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