Linux服务器内核升级回滚实操指南
Linux服务器内核升级回滚实操指南
Linux内核升级可以带来安全补丁、性能优化和新硬件支持,但生产服务器升级后也可能出现驱动不兼容或服务异常。
掌握内核回滚能力是必备技能。
下面按零基础也能照做的顺序,从准备到回滚一步步说清楚。
第一步:升级前必须做的三件事
不管用CentOS还是Ubuntu,操作前先记录当前内核版本:
uname -r
接着检查根分区剩余空间,内核文件通常占用几百MB,至少留出1GB空间:
df -h /
最后备份关键配置文件(如 /etc/default/grub)和重要数据。
如果你在用宝塔面板,可以在后台“文件”管理器中整体备份 /boot 目录。
第二步:使用包管理器升级内核(CentOS / Ubuntu)
CentOS / RHEL 系
添加ELRepo仓库(如果不想用官方旧版内核)并安装最新主线内核:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml
安装完成后更新GRUB配置:
grub2-mkconfig -o /boot/grub2/grub.cfg
重启系统:reboot。
Ubuntu / Debian 系
直接更新仓库并安装新版内核(可选 linux-image-generic-hwe-22.04 等HWE内核):
apt update && apt upgrade -y
# 或安装特定版本
apt install linux-image-6.2.0-35-generic
重启后生效。
第三步:升级后如何回滚到旧内核
核心思路:启动时选择旧内核,然后删除新内核。
方法一:重启时手动选GRUB菜单
- 重启服务器,在GRUB引导界面(黑色背景)立刻按 Esc 或 Shift(不同系统按键可能不同)。
- 出现系统版本列表,通常第一项是新内核,下方会保留旧内核选项(带
(old)或类似标注)。方向键选择旧内核,按Enter启动。 - 进入系统后运行
uname -r确认已回到旧内核。
方法二:修改GRUB默认启动项(永久回滚)
查看GRUB菜单项索引:
grub2-editenv list # CentOS
grub-reboot 0 # 只让下一次启动指定项
更稳妥的方式是直接编辑配置文件:
vim /etc/default/grub
找到 GRUB_DEFAULT=saved 这一行,改为 GRUB_DEFAULT=0(0代表第一个内核菜单项,通常是最新的;
要设为旧内核需先用 grep ^menuentry /boot/grub2/grub.cfg 找出旧内核的完整名称,然后写成 GRUB_DEFAULT="CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)")。
修改后执行 grub2-mkconfig -o /boot/grub2/grub.cfg 生效,再重启。
方法三:直接卸载新内核(推荐确认稳定后再做)
在旧内核环境中:
# CentOS
rpm -qa | grep kernel
# 找到新内核对应的包名,例如 kernel-ml-6.7.0-1.el8.elrepo
yum remove kernel-ml-6.7.0-1.el8.elrepo
# Ubuntu
dpkg --list | grep linux-image
apt remove linux-image-6.2.0-35-generic
卸载后再次运行 grub2-mkconfig 或 update-grub 清理引导菜单。
第四步:常见问题与避坑说明
问题1:升级后无法启动(黑屏或卡在加载界面)
- 重启进入GRUB菜单,选择上一项(旧内核)启动。进入系统后立即卸载新内核。
- 若GRUB菜单都进不去,使用系统救援模式或Live CD挂载根分区,手动编辑
/boot/grub2/grub.cfg或重新安装旧内核。
问题2:GRUB菜单没有显示旧内核
- 运行
grub2-mkconfig -o /boot/grub2/grub.cfg重新生成配置文件。如果仍无旧内核,检查/boot下是否还有旧内核的vmlinuz和initramfs文件。 - 防止被自动清理:在升级前执行
yum install dnf-plugin-versionlock并锁定旧内核包。
问题3:升级后网络或驱动异常
- 部分第三方驱动(如NVIDIA显卡、网卡)依赖内核模块,升级后需重新编译。建议先卸载私有驱动再升级,或使用发行版自带驱动。
- 回滚后恢复驱动正常。
第五步:效果验证与后续习惯
无论升级还是回滚,最终用 uname -r 确认当前运行的内核版本是否符合预期。检查关键服务是否正常:systemctl status nginx ss -tlnp 等。
建议保留最近两个版本的内核,不要贪图空间一次性全部删除。将常用命令做成小脚本或记录在笔记中,下次操作直接复制。
如果你正在处理Linux服务器内核升级回滚,建议先按本文步骤在测试环境跑一遍,再上生产。
遇到异常时优先回看避坑和高频问题部分,能省下不少排查时间。