CentOS 更新内核并删除旧版内核
更新使用新版内核
添加 ELRepo 软件仓库(一个由社区维护的企业级 Linux 软件仓库),依次运行下面命令。
# 导入 ELRepo 公钥 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org # 安装 ELRepo(适用 CentOS 7) rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm # 安装 ELRepo(适用 CentOS 6) rpm -Uvh https://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
编辑 ELRepo 配置文件,设置只用它的内核软件包(默认包含了其它类别软件)。
vi /etc/yum.repos.d/elrepo.repo
将[elrepo]
下的 enabled 改为 0,[elrepo-kernel]
enabled 改为 1。保存后用 yum repolist all
检查软件仓库启用情况。
考虑之后安装&更新内核都通过 ELRepo 获取,为避免之后运行 yum update
影响默认内核版本设置。建议修改 Base.repo
配置文件,设置不通过 CentOS 自带源更新旧版内核。
vi /etc/yum.repos.d/CentOS-Base.repo
在 [updates]
下添加如下一行,排除 kernel 开头的软件包更新。
exclude=kernel*
之后可用 yum check-update kernel*
检查设置前后的变化(假设 Base.repo
存在内核更新)。
从 ELRepo 安装新版内核。这里有两个选择,分别是 kernel-lt 长期支持版本和 kernel-ml 最新主线版本。前者版本较低(写本文时测试版本是 4.4.179-1.el7.elrepo),因此如果用 TCP BBR 才升级内核的,只能选择 kernel-ml。
# 安装 kernel-lt 版本 yum --enablerepo=elrepo-kernel install kernel-lt # 安装 kernel-ml 版本 yum --enablerepo=elrepo-kernel install kernel-ml
列出系统上已安装的内核版本。
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg
设置使用指定内核版本。内核名称用上个命令查询。
grub2-set-default "CentOS Linux (4.4.179-1.el7.elrepo.x86_64) 7 (Core)"
运行 grub2-mkconfig -o /boot/grub2/grub.cfg
命令重新生成启动文件,reboot
重启生效。
确认当前使用的内核版本。
grub2-editenv list
注:该方式查询结果需取决 /etc/default/grub
文件里的 GRUB_DEFAULT
参数是默认 saved
值才准确。不然就用 uname -r
查询。
删除旧版内核和安装内核相关软件包
列出已安装的内核和相关软件包。
rpm -qa kernel\* | sort -V
这里用 package-cleanup
命令删除内核,需要先安装 yum-utils
软件包。
yum -y install yum-utils
删除内核旧版本(默认从最旧的开始删),修改其中数字以设置要保留几个旧内核版本。如果只有一个旧版内核,就不用操作了,建议保留以备不时之需。
package-cleanup --oldkernels --count=1
如果要限制内核或其它软件的版本并存数,修改 /etc/yum.conf
配置文件里的 installonly_limit
参数(默认为 5,最小只能设置 2,小于 2 将引发 yum 错误)。
删除旧版内核相关的软件包。
yum remove kernel-tools-libs kernel-tools
补安装新版内核相关软件包。其中 kernel-*-headers
是内核头文件,供 glibc 使用。有些软件需要用到,建议安装。
# 对应 kernel-lt 版本软件包 yum --enablerepo=elrepo-kernel install kernel-lt-tools kernel-lt-headers # 对应 kernel-ml 版本软件包 yum --enablerepo=elrepo-kernel install kernel-ml-tools kernel-ml-headers
运行 grub2-mkconfig -o /boot/grub2/grub.cfg
命令重新生成启动文件,reboot
重启生效。