更新于:2024年1月5日
实战-centos7升级内核(yum方式)-2023.1.5(测试成功)
目录
前言
注意:内核升级可能涉及系统稳定性和兼容性的风险;在进行内核升级之前,请确保了解这些风险并备份重要的数据。
kernel-ml:kernel-ml 中的ml是英文【 mainline stable 】的缩写,elrepo-kernel中罗列出来的是最新的稳定主线版本。
kernel-lt:kernel-lt 中的lt是英文【 long term support 】的缩写,elrepo-kernel中罗列出来的长期支持版本。
ML 与 LT 两种内核类型版本可以共存,但每种类型内核只能存在一个版本。
测试环境
centos7.9
测试环境
1、检查已安装的内核版本
让我们安装了一个发行版,它包含了一个特定版本的内核。为了展示当前系统中已安装的版本,我们可以:
[root@node2 ~]#uname -a
Linux node2 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
2、在 CentOS 7 中升级内核
大多数现代发行版提供了一种使用 yum 等包管理系统和官方支持的仓库升级内核的方法。
但是,这只会升级内核到仓库中可用的最新版本 - 而不是在 https://www.kernel.org/ 中可用的最新版本。不幸的是,Red Hat 只允许使用前者升级内核。
与 Red Hat 不同,CentOS 允许使用 ELRepo,这是一个第三方仓库,可以将内核升级到最新版本。
- 要在 CentOS 7 上启用 ELRepo 仓库,请运行:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
- 仓库启用后,你可以使用下面的命令列出可用的内核相关包:
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
kernel-lt.x86_64 5.4.265-1.el7.elrepo
kernel-ml.x86_64 6.6.9-1.el7.elrepo
- 接下来,安装最新的主线稳定内核:
# 安装 最新版ML 版本
# yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y
# 安装 最新版LT 版本
# yum --enablerepo=elrepo-kernel install kernel-lt-devel kernel-lt -y
yum --enablerepo=elrepo-kernel install kernel-ml -y
注意:
这个只安装了一个rpm包哦,没其它依赖包哦!
🔰 将内核工具包一并升级(可选)(可忽略次步骤,一般也不用配置次步骤。)
- 默认:
[root@docker ~]#uname -a
Linux docker 3.10.0-1160.102.1.el7.x86_64 #1 SMP Tue Oct 17 15:42:21 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
[root@docker ~]#rpm -qa|grep kernel
kernel-3.10.0-957.el7.x86_64
kernel-tools-libs-3.10.0-957.el7.x86_64
abrt-addon-kerneloops-2.1.11-60.el7.centos.x86_64
kernel-tools-3.10.0-957.el7.x86_64
kernel-3.10.0-1160.102.1.el7.x86_64
kernel-devel-3.10.0-957.el7.x86_64
kernel-headers-3.10.0-957.el7.x86_64
[root@docker ~]#
- 将内核工具包一并升级
# 删除旧版本工具包
yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64
# 安装新版本工具包
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml-tools.x86_64
- 验证
[root@docker ~]#rpm -qa|grep kernel
kernel-3.10.0-957.el7.x86_64
kernel-ml-tools-6.6.9-1.el7.elrepo.x86_64
abrt-addon-kerneloops-2.1.11-60.el7.centos.x86_64
kernel-ml-tools-libs-6.6.9-1.el7.elrepo.x86_64
kernel-3.10.0-1160.102.1.el7.x86_64
kernel-devel-3.10.0-957.el7.x86_64
kernel-headers-3.10.0-957.el7.x86_64
[root@docker ~]#
3、设置 GRUB 默认的内核版本并重启
注意:内核安装好后,需要设置为默认启动选项并重启后才会生效。
为了让新安装的内核成为默认启动选项,你需要如下修改 GRUB 配置:
- 查看系统上的所有可用内核
方法1:(查看内核启动顺序)
[root@docker ~]#awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (5.4.265-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1160.102.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-5987de640e6d4ac9b69d19e0059df86e) 7 (Core)
[root@docker ~]#
方法2:(查看系统上的所有可用内核)
[root@docker ~]#rpm -qa | grep kernel
kernel-3.10.0-957.el7.x86_64
kernel-tools-libs-3.10.0-957.el7.x86_64
abrt-addon-kerneloops-2.1.11-60.el7.centos.x86_64
kernel-tools-3.10.0-957.el7.x86_64
kernel-3.10.0-1160.102.1.el7.x86_64
kernel-lt-5.4.265-1.el7.elrepo.x86_64
kernel-devel-3.10.0-957.el7.x86_64
kernel-headers-3.10.0-957.el7.x86_64
[root@docker ~]#
- 打开并编辑 /etc/default/grub 并设置 GRUB_DEFAULT=0。意思是 GRUB 初始化页面的第一个内核将作为默认内核。(其中 0 是上面查询出来的可用内核)
GRUB_TIMEOUT=5
GRUB_DEFAULT=0
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap crashkernel=auto rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
- 生成 grub 配置文件,执行如下命令。
GRUB2 的配置文件通常为 /boot/grub2/grub.cfg,虽然此文件很灵活,但是我们并不需要手写所有内容。可以通过程序自动生成,或是直接修改生成之后的文件。通常情况下简单配置文件 /etc/default/grub ,然后用程序 grub-mkconfig 来产生文件 grub.cfg。
[root@node2 ~]#grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.6.9-1.el7.elrepo.x86_64
Found initrd image: /boot/initramfs-6.6.9-1.el7.elrepo.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-957.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-5987de640e6d4ac9b69d19e0059df86e
Found initrd image: /boot/initramfs-0-rescue-5987de640e6d4ac9b69d19e0059df86e.img
done
[root@node2 ~]#
/etc/grub2.cfg 是 /boot/grub2/grub.cfg的软链接
注意:
[root@node2 ~]#ll /etc/grub2.cfg
lrwxrwxrwx. 1 root root 22 May 30 2021 /etc/grub2.cfg -> ../boot/grub2/grub.cfg
/etc/grub2.cfg 是 /boot/grub2/grub.cfg的软链接。
## 这个是干嘛的呢??
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
- 重启并验证最新的内核已作为默认内核。
需要重启才能生效。
[root@node2 ~]#uname -a
Linux node2 6.6.9-1.el7.elrepo.x86_64 #1 SMP PREEMPT_DYNAMIC Mon Jan 1 13:50:39 EST 2024 x86_64 x86_64 x86_64 GNU/Linux
[root@node2 ~]#
恭喜你!你已经在 CentOS 7 中升级内核了!
4、 删除旧内核(可选)
注意:无法卸载当前在用的内核版本。
建议还是保留旧内核,如果后续发现有问题可以回退。
- 查看系统中全部的内核:
[root@docker ~]#rpm -qa | grep kernel
kernel-3.10.0-957.el7.x86_64
kernel-tools-libs-3.10.0-957.el7.x86_64
abrt-addon-kerneloops-2.1.11-60.el7.centos.x86_64
kernel-tools-3.10.0-957.el7.x86_64
kernel-3.10.0-1160.102.1.el7.x86_64
kernel-lt-5.4.265-1.el7.elrepo.x86_64
kernel-devel-3.10.0-957.el7.x86_64
kernel-headers-3.10.0-957.el7.x86_64
[root@docker ~]#
方法1、yum remove 删除旧内核的 RPM 包
yum remove -y kernel-3.10.0-957.el7.x86_64 \
kernel-tools-libs-3.10.0-957.el7.x86_64 \
kernel-tools-3.10.0-957.el7.x86_64 \
kernel-3.10.0-1160.102.1.el7.x86_64
只需删除
kernel-3.10.0-514
、kernel-tools-libs
、kernel-tools
即可。
- 验证
[root@docker ~]#awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (5.4.265-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (0-rescue-5987de640e6d4ac9b69d19e0059df86e) 7 (Core)
[root@docker ~]#rpm -qa | grep kernel
kernel-ml-tools-6.6.9-1.el7.elrepo.x86_64
abrt-addon-kerneloops-2.1.11-60.el7.centos.x86_64
kernel-ml-tools-libs-6.6.9-1.el7.elrepo.x86_64
kernel-lt-5.4.265-1.el7.elrepo.x86_64
kernel-devel-3.10.0-957.el7.x86_64
kernel-headers-3.10.0-957.el7.x86_64
[root@docker ~]#
方法2、yum-utils工具
未实际测试,仅记录。
如果安装的内核不多于 3 个,yum-utils
工具不会删除任何一个。只有在安装的内核大于 3 个时,才会自动删除旧内核。
安装yum-utils
$ yum install yum-utils
删除旧版本
package-cleanup --oldkernels
升级脚本
UpdateKernel-v1-2024.1.4.sh(网上脚本)
UpdateKernel.sh
yum localinstall -y kernel-lt*
if [ $? -eq 0 ];then
grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
fi
echo 'Please reboot your system quick !!!'
UpdateKernel-v2-2023.11.24.sh(yum升级到最新长久支持版-亲测成功)(最新)
可一键粘贴使用!
uname -a
# 载入公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 安装ELRepo
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
# 载入elrepo-kernel元数据
yum --disablerepo=\* --enablerepo=elrepo-kernel repolist
# 查看可用的rpm包
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
# 安装最新版本的lt kernel
yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-lt -y
#如果是安装指定版本
#yum --enablerepo=elrepo-kernel install kernel-lt-devel-5.4.225-1.el7.elrepo.x86_64 kernel-lt-5.4.225-1.el7.elrepo.x86_64 -y #注意包的个数
#yum install -y kernel-lt
if [ $? -eq 0 ];then
grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
fi
echo 'Please reboot your system quick !!!'
reboot
uname -a
🔰 开始测试:(测试成功)2024.1.5
- 升级前内核
[root@node2 ~]#uname -a
Linux node2 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
- 开始升级
uname -a
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum --enablerepo=elrepo-kernel install kernel-lt -y
if [ $? -eq 0 ];then
grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
fi
echo 'Please reboot your system quick !!!'
reboot
uname -a
- 升级后测试
[root@node2 ~]#uname -a
Linux node2 5.4.265-1.el7.elrepo.x86_64 #1 SMP Wed Dec 20 13:57:20 EST 2023 x86_64 x86_64 x86_64 GNU/Linux
[root@node2 ~]#
FAQ
小版本升级
仅做记录,未实际测试。2024年1月5日
在实验环境下,已安装了最新的CentOS 7.4操作系统,现在需要升级内核版本。
实验环境
CentOS-7-x86_64-Minimal-1708.iso
CentOS Linux release 7.4.1708 (Core)
Kernel 3.10.0-693.el7.x86_64
连接并同步CentOS自带yum源,更新内核版本。此方法适用于更新内核补丁 。
具体实验步骤:
yum list kernel
yum update -y kernel
此时,已安装成功,但若想将系统运行在新版本的kernel上,则需要重新启动操作系统。
重启完成,至此,Kernel版本已升级至【3.10.0-693.17.1.el7.x86_64】
安装指定内核版本Rpm
仅做记录,未实际测试。
本次以安装 LT 内核的5.4.230 版本为例。
- 当前内核版本(centos7.9默认内核)
[root@docker ~]#uname -a
Linux docker 3.10.0-1160.102.1.el7.x86_64 #1 SMP Tue Oct 17 15:42:21 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
[root@docker ~]#rpm -qa|grep kernel
kernel-3.10.0-957.el7.x86_64
kernel-tools-libs-3.10.0-957.el7.x86_64
abrt-addon-kerneloops-2.1.11-60.el7.centos.x86_64
kernel-tools-3.10.0-957.el7.x86_64
kernel-3.10.0-1160.102.1.el7.x86_64
kernel-devel-3.10.0-957.el7.x86_64
kernel-headers-3.10.0-957.el7.x86_64
[root@docker ~]#
1、查找版本
因 ELRepo 源都是最新版本,所以旧版本内核只能手动下载。查找 kernel rpm 历史版本:http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/
2、下载内核 RPM
下载rpm:
wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-devel-4.4.215-1.el7.elrepo.x86_64.rpm
wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-4.4.215-1.el7.elrepo.x86_64.rpm
3、安装内核
rpm -ivh kernel-lt-4.4.215-1.el7.elrepo.x86_64.rpm
rpm -ivh kernel-lt-devel-4.4.215-1.el7.elrepo.x86_64.rpm
4、确认已安装内核版本
[root@localhost ~]# rpm -qa | grep kernel
kernel-headers-3.10.0-1160.15.2.el7.x86_64
kernel-devel-3.10.0-1160.49.1.el7.x86_64
kernel-tools-libs-3.10.0-957.el7.x86_64
kernel-3.10.0-957.el7.x86_64
kernel-ml-4.9.9-1.el7.elrepo.x86_64
kernel-lt-4.4.215-1.el7.elrepo.x86_64
kernel-tools-3.10.0-957.el7.x86_64
kernel-lt-devel-4.4.215-1.el7.elrepo.x86_64
5、设置启动
<code class="language-text"># 查看启动顺序
[root@localhost ~]# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
CentOS Linux (4.4.215-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (4.9.9-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-b91f945269084aa98e8257311ee713c5) 7 (Core)
# 设置启动顺序
[root@localhost ~]# grub2-set-default 0
# 生成grub配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
# 重启生效
[root@localhost ~]# reboot
自编译升级(不推荐)
Step1: 下载源码
Step2: 安装gcc bc cmake
Step3: 编译源码,安装新内核
自编译升级过程略微复杂,且不便于后期维护,具体操作步骤在此略去不表。
参考链接
https://www.linuxprobe.com/update-kernel-centos7.html
https://www.cnblogs.com/gaoyuechen/p/16848807.html
https://blog.csdn.net/u010674953/article/details/129064085
https://www.zzbaike.com/23045.html
关于我
我的博客主旨:
- 排版美观,语言精炼;
- 文档即手册,步骤明细,拒绝埋坑,提供源码;
- 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
🍀 微信二维码
x2675263825 (舍得), qq:2675263825。
🍀 微信公众号
《云原生架构师实战》
🍀 个人博客站点
🍀 语雀
https://www.yuque.com/xyy-onlyone
🍀 csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421
🍀 知乎
https://www.zhihu.com/people/foryouone
最后
好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!