CentOS作为一个成熟的企业级Linux操作系统,在依赖版本上的策略一直是比较保守的。内核也是如此。有些场景下我们需要更新的内核特性,例如Docker,CentOS7默认的内核版本为3.10.0-xxx,只能刚好满足Docker安装要求而已。

CentOS提供了对应的源,提供主线内核的安装支持。

小版本升级

使用YUM更新功能,将当前内核版本升级到最新。

yum update -y kernel

大版本升级

这里需要安装一个elrepo的源。

1、安装Repo

导入公钥。

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

通过RPM包安装Repo。

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

查看Repo也数据。

yum --disablerepo=\* --enablerepo=elrepo-kernel repolist

查看可用的内核。

yum --disablerepo=\* --enablerepo=elrepo-kernel list kernel*

版本说明:

kernel-lt-*:long-term,长期支持版

kernel-ml-*:main-line,主线版本

2、升级内核

安装长期支持版的内核。

yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-lt -y
3、升级内核工具

需要同步升级工具包,获得与新内核的兼容性。新的内核工具和旧版不能共存,安装前需要卸载旧版。内核工具的版本也要和上一步安装的内核保持相同版本,内核安装长期支持,工具也要是长期支持版,主线版本同理。

yum remove kernel-tools kernel-tools-libs -y
yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-lt-tools -y
4、修改内核启动顺序

默认新的内核会插入到grub.cfg文件头部,默认的启动顺序也是从头部开始,编号从0开始。可以查看一下当前grub.cfg中的内核顺序。

awk -F \' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

输出类似信息:

0 : CentOS Linux (5.4.157-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1160.45.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-a6964ca0bbca44c8ba9a1abe47504022) 7 (Core)

但是这个顺序并没有生效,可以通过grub2-editenv查看实际启动的内核。

grub2-editenv list

基于以上,有两种方式设置从新内核启动:

设置数值:

通过更改编号为0设置从最新的内核启动,也就是刚开始查看的grub.cfg配置文件中内核顺序的编号。

grub2-set-default 0

设置内核名称:

也是通过之前查看的grub.cfg中的配置,区别在于使用名称而已,一定要指定已有的内核名称。

grub2-set-default 'CentOS Linux (5.4.157-1.el7.elrepo.x86_64) 7 (Core)'

设置完成后再次查看当前引导内核。

grub2-editenv list

重新启动系统,查看当前内核是否是新安装的内核。

uname -r
最后修改:2021 年 11 月 06 日
如果觉得我的文章对你有用,请随意赞赏