CentOS 7自带的内核版本还停留在3.x
,如果某些软件对Linux内核版本有要求,就不得不升级内核来支持,比如Google的BBR加速,要求Linux内核大于4.9
以上,这篇文章来聊一聊CentOS 7内核升级的话题。
内核版本选择
我们可以从https://www.kernel.org/官网下载指定内核源码并进行编译升级,但是此步骤较为繁琐,不在此次讨论范围。
如果我们采用rpm
包进行升级,可以使用别人编译好的包,其中elrepo
提供的内核升级包是比较值得信赖的,内核地址如下:https://elrepo.org/linux/kernel/el7/x86_64/RPMS/
但是打开elrepo的网站我们只能看到5.15.x
和5.4.x
(随着时间的推移可能会有变化)两个版本,标识了ml
和lt
ml
代表主线版本,总是保持主线最新的内核lt
代表长期支持版本,支持周期更长
再通过https://www.kernel.org官网对照下上面两个版本的生命周期,可以看到5.15
支持到2023年,而5.4
支持到2025年。
如果你要追求最新的版本,直接选择带ml
的rpm包即可,如果你要追求稳定且更长的支持周期,直接选择lt
版本即可。
在线升级
#导入ELRepo 公钥
wget https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm --import RPM-GPG-KEY-elrepo.org
#安装ELRepo
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
#升级最新内核
yum --enablerepo=elrepo-kernel install kernel-ml -y
#升级长期支持的lt内核(二选一即可)
yum --enablerepo=elrepo-kernel install kernel-lt -y
离线升级
也可以手动下载rpm
的内核进行离线升级,以升级lt
内核为例,方法如下:
#下载内核(随着时间推移,链接可能失效)
wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-5.4.160-1.el7.elrepo.x86_64.rpm
#备用下载地址
wget https://wget.ovh/linux/kernel/kernel-lt-5.4.160-1.el7.elrepo.x86_64.rpm
#升级内核
rpm -ivh kernel-lt-5.4.160-1.el7.elrepo.x86_64.rpm
切换内核
输入命令awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg
查看grub2引导序号。
[root@test ~]# awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg
0 : CentOS Linux (5.4.160-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
2 : CentOS Linux (0-rescue-face32e3e9d448e2a0403204f18369d9) 7 (Core)
可以看到序号0
是我们刚刚安装的内核,我们将其设置为默认启动内核:
#设置默认启动内核
grub2-set-default 0
#重启服务器生效
reboot
某些服务商可能会遇到设置不生效的问题,我们可采取删除旧内核,保留新内核的做法。需要重启服务器并通过VNC连接(请咨询服务商)并在开机的启动界面选择新内核(5.4)进入,通过以下方法删除旧内核:
#查看当前内核,确保是以新内核启动
uname -a
#查看系统中全部内核
rpm -qa | grep kernel
#移出不需要的内核
yum remove kernel-3.10.0-229.4.2.el7.x86_64
如果系统中只有一个内核,在下次启动的时候就会默认选择该内核启动。
注意
升级内核有分险,以上方法不保障升级内核一定成功,生产环境请谨慎操作,如果升级后内核无法启动,可通过VNC连接服务器(咨询服务商),然后选择正常的内核启动,并删除异常的内核进行恢复。
总结
ml
代表主线版本,总是保持主线最新的内核lt
代表长期支持版本,支持周期更长- 内核升级失败,可通过VNC连接选择正常的内核进入系统
- elrepo会经常删除旧的内核,建议定期从elrepo网站将内核下载进行保存,以便后续使用
以上部分内容参考了:Linux Kernel 5.14.x 编译版