必须升级内核而非仅更新软件包,因为内核是操作系统核心,apt/yum无法替换运行中内核;需手动安装、配置GRUB并保留旧内核回滚;升级后须验证模块、容器兼容性及服务适配,重启前完成备份、SSH检查与救援准备。

为什么要升级内核而不是只更新软件包
内核是操作系统的核心,直接管理硬件资源和进程调度。仅用 apt upgrade 或 yum update 只能更新用户态程序,无法替换正在运行的内核。必须手动安装新内核并配置引导,否则系统重启后仍使用旧内核。常见误区是认为“系统已打满补丁”,结果安全公告里提到的漏洞(如 eBPF 提权、Spectre 变种)依然存在——因为它们需要内核级修复。
安全地安装新内核并保留回滚能力
不要直接卸载旧内核。生产环境必须保留至少一个可用的旧内核作为故障回退选项。以 Ubuntu/Debian 为例:
- 用 apt list --upgradable | grep linux-image 查看可安装的新内核版本
- 执行 sudo apt install linux-image-6.5.0-25-generic linux-headers-6.5.0-25-generic(版本号按实际替换)
- 安装后运行 sudo update-grub,确认新内核已写入 GRUB 菜单
- 检查 /boot 目录下是否同时存在新旧 vmlinuz 和 initrd 镜像文件
- 修改 /etc/default/grub 中的 GRUB_DEFAULT=0 表示默认启动最新内核;若需默认进旧版,设为 GRUB_DEFAULT='1>2'(按菜单层级索引)
服务如何在不中断业务的前提下完成适配
内核升级后,部分服务可能依赖特定内核模块或 syscall 行为。不能等重启后才发现 Nginx 启动失败或 Docker 容器无法创建。关键动作是提前验证:
- 加载新内核模块:运行 sudo modprobe -v nf_conntrack(根据业务需要测试 iptables/nft 相关模块)
- 检查容器运行时兼容性:执行 sudo docker info | grep "Kernel Version",确认 Docker 已识别新内核;若报错 “cgroup v2 not supported”,需在 GRUB_CMDLINE_LINUX 中添加 systemd.unified_cgroup_hierarchy=0
- 对数据库、消息队列等长连接服务,采用滚动重启策略:逐台下线节点 → 重启 → 等待服务注册成功 → 再操作下一台,避免集群脑裂
- 用 inotifywait -m /proc/sys/net/ 监控网络参数是否被重置(某些新内核会重置 net.ipv4.ip_forward=0)
重启前必须做的三件事
一次未经验证的重启可能导致服务不可用甚至系统无法启动。务必在维护窗口开始前完成:
- 备份当前内核启动项:执行 sudo cp /boot/vmlinuz-$(uname -r) /boot/vmlinuz-$(uname -r).bak
- 确认 SSH 服务设置为开机自启且未绑定到特定内核模块:运行 sudo systemctl is-enabled ssh,并检查 sshd_config 中无 KernelModulePath 类配置
- 准备救援手段:U 盘中存好对应发行版的 Live 系统镜像,或确保云平台控制台支持 VNC 连接和挂载 rescue 模式磁盘










