如何安全地删除 CentOS 7 中的旧内核版本?

Cod*_*Med 19 kernel centos linux-kernel

我可能会遇到由于 CentOS 7 中的内核竞争而导致的奇怪症状。那么我如何安全地删除旧内核?我怎么知道哪个内核是最新的?

以下是我在相关服务器上研究时得到的终端输出。请注意,我尝试了 package-cleanup 但它留下了相同的 2 个内核:

本教程中的说明说以下两个命令的输出应该匹配,但您可以看到它们不匹配,即使在重新启动后:

[root@localhost ~]# rpm -qa kernel |sort -V |tail -n 1
kernel-3.10.0-229.el7.x86_64
[root@localhost ~]# uname -r
3.10.0-229.14.1.el7.x86_64
Run Code Online (Sandbox Code Playgroud)

其余命令确认有两个内核,并说明了删除旧内核的尝试。

[root@localhost ~]# cd /usr/src/kernels
[root@localhost kernels]# ls -al
total 16
drwxr-xr-x.  4 root root 4096 Oct  2 12:55 .
drwxr-xr-x.  4 root root 4096 Oct  2 13:15 ..
drwxr-xr-x. 22 root root 4096 Oct  2 12:55 3.10.0-229.14.1.el7.x86_64
drwxr-xr-x. 22 root root 4096 Oct  2 12:35 3.10.0-229.el7.x86_64
[root@localhost kernels]# rpm -q kernel
kernel-3.10.0-229.el7.x86_64
kernel-3.10.0-229.14.1.el7.x86_64
[root@localhost kernels]# package-cleanup --oldkernels=1
Loaded plugins: fastestmirror
Usage: 
    package-cleanup: helps find problems in the rpmdb of system and correct them

    usage: package-cleanup --problems or --leaves or --orphans or --oldkernels
Command line error: --oldkernels option does not take a value
[root@localhost kernels]# package-cleanup --oldkernels
Loaded plugins: fastestmirror
No old kernels to remove
[root@localhost kernels]# rpm -q kernel
kernel-3.10.0-229.el7.x86_64
kernel-3.10.0-229.14.1.el7.x86_64
[root@localhost kernels]# 
Run Code Online (Sandbox Code Playgroud)

我还打开/etc/yum.conf并设置了installonly_limit=1,但这导致后续yum update命令出错,说明 1 超出了 的可接受值范围installonly_limit

我认为这3.10.0-229.14.1.el7.x86_64是最新的,但我怎么知道呢?此外,引导选项似乎提供了多个内核可供选择。当系统从选项列表中的第一个内核自动引导时,混淆的机会会变得更糟。

有人可以解释一下这是如何工作的,特别是如何安全地删除旧内核,以便可以消除内核版本作为奇怪症状的可能原因吗? 我想确保最新的内核是唯一可以运行的内核,无论系统如何重新启动。

小智 28

package-cleanup --oldkernels --count=1 删除除最新内核之外的所有内核。

  • 我运行“package-cleanup --oldkernels --count=1”。重新启动后,我仍然得到两个内核: `CentOS Linux (4.4.6-1.el7.elrepo.x86_64) 7 (Core)` 和 `CentOS Linux (3.10.0-514.2.2.el7.x86_64) 7 (Core) )`,你知道如何只保留一个吗? (2认同)
  • 此解决方案不再适用于 Centos 8 及以上版本。给出错误消息“package-cleanup 必须使用以下选项之一执行:--dupes、--leaves、--orphans、--problems 或 --cleandupes” 请参阅下面我的答案,了解 Centos 8 的工作解决方案。 (2认同)

Fra*_*iat 11

RHEL 和 CentOS >= 8(以及带有 DNF 的 Fedora)。

RHEL 8+ 使用新的包管理器(DNF / yum 4,请参阅yum2dnf),它推荐:

dnf remove $(dnf repoquery --installonly --latest-limit=-2)
Run Code Online (Sandbox Code Playgroud)

yum remove --oldinstallonly可以删除旧的 installonly 软件包,而不仅仅是内核 (?)。

(此命令需要 dnf>= 4.2.17-4 错误 #1774670

较旧的 RHEL 和 CentOS ( <=7 )

该命令package-cleanup用于删除 yum <4 的旧内核。用于--count=1仅保留最新的。该程序永远不会删除当前使用的内核(“不删除内核 3.10.0-327.el7,因为它是正在运行的内核”),因此您可能会在 /boot 中得到两个内核...直到您重新启动并重新启动- 运行命令。

所以命令是

package-cleanup --oldkernels --count=1 
Run Code Online (Sandbox Code Playgroud)

联机帮助页文档三个选项:

--oldkernels
          Remove old kernel and kernel-devel packages.
--count <COUNT>
          Number of duplicate/kernel packages to keep on the system (default 2)
--keepdevel
          Do not remove kernel-devel packages when removing kernels
Run Code Online (Sandbox Code Playgroud)


Mri*_*nal 5

对于 Centos 8 及以上版本(Yum 版本 4),您可以使用以下命令

yum remove --oldinstallonly
Run Code Online (Sandbox Code Playgroud)

这将删除所有旧版本的内核。当您只想拥有最新发行版本的内核时使用。