我可能会遇到 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 内核运行正确