CentOS 7/RHEL 7内核升级需多版本共存,推荐ELRepo安装kernel-lt(LTS)或kernel-ml(主线),支持在线安装、离线RPM部署、GRUB回滚及双内核灰度切换。

如果您正在运行 CentOS 7 或 RHEL 7 系统,当前内核版本较旧且需启用新硬件支持、安全补丁或容器运行时增强特性,则可能需要升级内核。Linux 内核升级并非覆盖式替换,而是以多版本共存方式安装新内核,并通过 GRUB 引导选择启动项。以下是多种可行的在线升级与回滚方案:
一、使用 ELRepo 仓库在线安装长期支持(LTS)内核
ELRepo 是专为 RHEL/CentOS 设计的可信第三方源,提供预编译的 kernel-lt(长期支持)和 kernel-ml(主线最新)二进制包,无需编译,兼容性高、部署快。
1、导入 ELRepo 公钥并安装仓库配置包:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
2、执行以下命令安装 elrepo-release 包:
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
3、列出可用的长期支持内核包:
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available kernel-lt*
4、安装 kernel-lt 及其配套 headers 和 firmware:
yum --enablerepo=elrepo-kernel install kernel-lt kernel-lt-devel kernel-lt-headers
5、确认新内核已写入 /boot 目录:
ls /boot/vmlinuz-*
6、设置 GRUB 默认启动新内核:
grubby --set-default /boot/vmlinuz-5.4.214-1.el7.elrepo.x86_64
7、重启系统并验证:
reboot && uname -r
二、使用 ELRepo 安装主线最新(ML)内核
当需要测试较新特性(如 eBPF 改进、IO_uring 增强、新网卡驱动)且可接受略低稳定性时,kernel-ml 版本提供接近上游 mainline 的功能集,适用于开发与评估环境。
1、确保已启用 elrepo-kernel 仓库(参见方案一第2步)。
2、查询可用的主线内核包:
yum --enablerepo=elrepo-kernel list available kernel-ml*
3、安装 kernel-ml 及其开发组件:
yum --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel kernel-ml-headers
4、查看 GRUB 启动菜单索引:
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg
5、将新内核设为默认启动项(假设新内核位于索引 0):
grubby --set-default-index=0
6、强制更新 GRUB 配置文件:
grub2-mkconfig -o /boot/grub2/grub.cfg
7、重启后检查是否生效:
uname -r | grep -E '^(5\.1[0-9]|6\.)'
三、离线 RPM 包手动安装(适用于无外网环境)
在无法直连互联网的生产服务器上,可通过内网镜像或跳板机下载指定内核 RPM 包,再使用 yum localinstall 完成部署,全程可控、审计清晰。
1、从阿里云 ELRepo 镜像站下载对应架构的 kernel-lt 包(例如 5.4.214):
wget https://mirrors.aliyun.com/elrepo/kernel/el7/x86_64/RPMS/kernel-lt-5.4.214-1.el7.elrepo.x86_64.rpm
2、同时下载配套依赖包(若提示缺失):
wget https://mirrors.aliyun.com/elrepo/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.214-1.el7.elrepo.x86_64.rpm
3、将所有 RPM 文件拷贝至目标主机的 /tmp 目录。
4、执行本地安装(自动解析依赖):
yum localinstall /tmp/kernel-lt-*.rpm -y
5、验证新内核是否注册到 GRUB:
ls /boot/vmlinuz-5.4.214*
6、修改 /etc/default/grub 中 GRUB_DEFAULT 值为 0,然后执行:
grub2-mkconfig -o /boot/grub2/grub.cfg
7、重启系统完成切换。
四、通过 GRUB 回滚至旧内核(紧急恢复)
若新内核导致系统无法正常启动(如黑屏、无网络、驱动失效),可在 GRUB 启动菜单中临时选择旧内核启动,避免系统宕机;后续可卸载问题内核并修复引导配置。
1、开机时在 GRUB 菜单界面按方向键高亮显示旧内核条目(如 “CentOS Linux (3.10.0-1160.15.2.el7.x86_64)”)。
2、按 e 键进入编辑模式,定位到以 linux16 开头的行。
3、在该行末尾添加 systemd.unit=rescue.target 并按 Ctrl+X 启动救援模式。
4、登录后执行以下命令卸载问题内核(以 kernel-lt-5.4.214 为例):
yum remove kernel-lt-5.4.214\* -y
5、重新生成 GRUB 配置:
grub2-mkconfig -o /boot/grub2/grub.cfg
6、设置默认启动项为稳定旧内核:
grubby --set-default /boot/vmlinuz-3.10.0-1160.15.2.el7.x86_64
7、重启验证回滚结果:
reboot && uname -r
五、保留双内核并按需切换(生产环境推荐策略)
生产系统应始终保留至少两个可用内核:一个经长期验证的 LTS 版本作为主用,一个新版本用于灰度验证。通过 GRUB_TIMEOUT 和 GRUB_DEFAULT=saved 实现灵活切换,降低变更风险。
1、确认当前所有已安装内核:
rpm -q kernel kernel-lt kernel-ml
2、查看各内核在 GRUB 中的顺序编号:
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg
3、启用 GRUB 保存上次成功启动项功能:
sed -i 's/GRUB_DEFAULT=.*/GRUB_DEFAULT=saved/' /etc/default/grub
4、更新 GRUB 配置使设置生效:
grub2-mkconfig -o /boot/grub2/grub.cfg
5、每次成功启动某内核后,执行以下命令将其设为下次默认:
grubby --set-default /boot/vmlinuz-5.4.214-1.el7.elrepo.x86_64
6、如需临时启动另一内核,可在 GRUB 菜单中直接选择,无需修改配置。
7、定期清理过期内核(保留最近两个):
package-cleanup --oldkernels --count=2









