一、为什么要关心内核升级的风险

每次看到Linux系统弹出内核升级提示,你是不是也和我一样,既兴奋又忐忑?兴奋的是新版本可能带来性能提升和功能增强,忐忑的是万一升级后系统崩了怎么办?毕竟内核就像人的心脏,一旦出问题,整个系统都可能瘫痪。

举个例子,去年我们公司某台重要服务器在升级到5.15内核后,某个定制驱动突然不兼容,导致数据库服务直接宕机。幸亏当时做了完整的回滚预案,否则后果不堪设想。所以今天咱们就来好好聊聊,怎么安全地进行内核升级,以及万一翻车了该怎么优雅地回滚。

二、升级前的准备工作

2.1 检查当前内核版本

首先得知道自己现在用的是什么版本,这是最基本的。打开终端输入:

uname -r
# 输出示例:5.4.0-135-generic
# 这里显示的是当前运行中的内核版本

2.2 查看可用的内核版本

在Ubuntu/Debian系系统上可以这样查看:

apt list --installed | grep linux-image
# 输出会列出所有已安装的内核包
# 例如:linux-image-5.4.0-135-generic

2.3 创建系统快照

这一步特别重要!建议使用LVM或者直接做全盘备份:

# 使用LVM创建快照(假设你的根分区在/dev/vg00/lv_root)
lvcreate -L 10G -s -n root_snapshot /dev/vg00/lv_root
# 解释:
# -L 指定快照大小
# -s 创建快照
# -n 给快照命名

三、安全升级内核的步骤

3.1 使用稳定源升级

不要随便添加第三方源,优先使用官方稳定源:

sudo apt update
sudo apt upgrade linux-image-generic
# 对于CentOS/RHEL:
# sudo yum update kernel

3.2 选择性安装内核

有时候自动升级会安装多个内核,我们可以手动选择:

sudo apt install linux-image-5.15.0-60-generic
# 明确指定要安装的版本
# 安装完成后记得更新grub:
sudo update-grub

四、内核回滚的完整方案

4.1 GRUB界面选择旧内核

开机时按住Shift键进入GRUB菜单,选择"Advanced options",然后选择之前的内核版本启动。

4.2 彻底删除问题内核

如果确定新内核有问题,可以这样删除:

sudo apt purge linux-image-5.15.0-60-generic
# 删除特定内核包
# 然后再次更新grub:
sudo update-grub

4.3 使用快照恢复

如果系统已经无法启动,就用之前创建的LVM快照:

lvconvert --merge /dev/vg00/root_snapshot
# 这个命令会将快照内容合并回原卷
# 注意:合并后快照会消失

五、真实案例解析

去年我们遇到一个典型问题:某台运行着老旧硬件驱动的生产服务器,在升级到5.13内核后网卡驱动失效。当时是这样处理的:

  1. 首先通过IPMI远程控制台进入救援模式
  2. 挂载原系统分区:
    mount /dev/sda2 /mnt
    mount --bind /dev /mnt/dev
    mount --bind /proc /mnt/proc
    mount --bind /sys /mnt/sys
    
  3. chroot进去后删除新内核:
    chroot /mnt
    apt purge linux-image-5.13.0-44-generic
    update-grub
    

整个过程耗时约15分钟,服务中断时间控制在20分钟内。

六、最佳实践建议

  1. 测试环境先行:任何内核升级都先在测试机上验证
  2. 保留至少两个可用的旧内核
  3. 关键业务系统建议延迟1-2个月再升级
  4. 做好完整的回滚预案和业务影响评估

记住,内核升级不是越新越好,稳定才是王道。特别是对于生产环境,有时候保守一点反而是更专业的选择。