Linux怎么升级内核_Linux内核在线升级与回滚方案【高级】

发布时间 - 2026-01-12 00:00:00    点击率:
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


# linux  # centos  # 阿里云  # ai  # 配置文件  # 网卡驱动  # 架构  # print  # count  # default  # http  # https  # 重启  # 启动项  # 离线  # 设为  # 可在  # 镜像  # 互联网  # 如果您  # 双内核  # 菜单中 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: zabbix利用python脚本发送报警邮件的方法  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  java中使用zxing批量生成二维码立牌  JS碰撞运动实现方法详解  实例解析angularjs的filter过滤器  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  高防服务器租用首荐平台,企业级优惠套餐快速部署  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  公司网站制作需要多少钱,找人做公司网站需要多少钱?  如何在腾讯云服务器上快速搭建个人网站?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  C语言设计一个闪闪的圣诞树  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  如何获取上海专业网站定制建站电话?  javascript读取文本节点方法小结  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  如何撰写建站申请书?关键要点有哪些?  Laravel怎么实现验证码(Captcha)功能  如何在IIS中新建站点并配置端口与物理路径?  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  佛山企业网站制作公司有哪些,沟通100网上服务官网?  Laravel如何配置任务调度?(Cron Job示例)  详解Android图表 MPAndroidChart折线图  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  什么是javascript作用域_全局和局部作用域有什么区别?  iOS验证手机号的正则表达式  如何在万网自助建站平台快速创建网站?  再谈Python中的字符串与字符编码(推荐)  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  详解阿里云nginx服务器多站点的配置  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  如何在万网主机上快速搭建网站?  如何在新浪SAE免费搭建个人博客?  大连网站制作公司哪家好一点,大连买房网站哪个好?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  如何挑选高效建站主机与优质域名?  js实现获取鼠标当前的位置  大学网站设计制作软件有哪些,如何将网站制作成自己app?  ,怎么在广州志愿者网站注册?  如何快速搭建FTP站点实现文件共享?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  高防服务器租用如何选择配置与防御等级?  java获取注册ip实例