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

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

我可能会遇到 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

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

[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]# 

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

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

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

答案1

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

答案2

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

RHEL 8+ 使用新的包管理器(DNF / yum 4,请参阅百胜2DNF),其中推荐:

dnf remove $(dnf repoquery --installonly --latest-limit=-2)

--latest-limit=-2意味着保留最后两个版本 - 当前版本和上一个版本;

--latest-limit=-1将删除除当前项之外的所有项。

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

(此命令需要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 

联机帮助页记录了三个选项:

--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

答案3

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

yum remove --oldinstallonly

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

答案4

根据:

运行rpm -q kernel以显示已安装的内核

然后运行yum remove kernel <shown kernel from output above>删除内核

重新启动你的电脑

编辑:这实际上适用于@Ron 的问题,但请确保 elrepo 内核运行正确

相关内容