yum update和apt upgrade默认不升级内核,因主流发行版将内核视为独立包管理;须用apt install linux-image-generic或yum --enablerepo=elrepo-kernel install kernel-lt等明确命令安装新内核,并手动执行update-grub或grub2-mkconfig更新启动项,再重启手动验证后方可设为默认。

yum update 和 apt upgrade 不会升级内核——这是最常被误解的一点。想同时更新所有已安装软件包 和 内核,必须分两步走:先用通用命令升软件,再用明确包名指令装新内核。
为什么 yum update 或 apt upgrade 不动内核
主流发行版把内核当作“特殊包”隔离管理:yum 默认跳过 kernel 包,apt 把 linux-image-* 视为独立可选包。这不是 bug,是设计——防止自动覆盖导致无法启动。
常见错误现象:
- 执行
yum update后uname -r没变,/boot 下也没新增vmlinuz-* -
apt upgrade完毕,dpkg -l | grep linux-image显示只有旧版本 - 误用
yum update kernel,结果报错 “No package kernel available”,因为仓库里没有叫kernel的单个包
正确做法是:
- Ubuntu/Debian:
sudo apt install linux-image-generic linux-headers-generic(装最新稳定通用版)
或指定版本:sudo apt install linux-image-6.8.0-45-generic linux-headers-6.8.0-45-generic - RHEL/CentOS 7/8/9:
sudo yum --enablerepo=elrepo-kernel install kernel-lt(LTS 版)
或sudo dnf --enablerepo=elrepo-kernel install kernel-ml(主线新版)
update-grub 和 grub2-mkconfig 必须手动运行
只装内核包,不刷新 GRUB 配置,等于白装。新内核的 vmlinuz-* 和 initramfs-* 已放进 /boot,但 GRUB 菜单根本不知道它存在。
不执行这步的后果:
- 重启后仍进旧内核(最常见)
- 若旧内核被误删,直接卡在 GRUB 命令行或黑屏
-
grubby --set-default失效,因为目标内核没被 GRUB 索引
对应命令:
- Ubuntu/Debian:
sudo update-grub - RHEL/CentOS:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
验证是否生效:
- Ubuntu:
grep menuentry /boot/grub/grub.cfg | head -5 - RHEL:
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg
别急着设默认启动项,先手动选一次新内核
GRUB 菜单里出现新内核 ≠ 它能正常启动。缺驱动、cgroup v2 不兼容、initramfs 没含必要模块……都可能卡在启动早期。
安全操作顺序:
- 装完内核 + 运行
update-grub或grub2-mkconfig - 重启,在 GRUB 菜单用方向键手动选择新内核条目(不要按回车,先高亮)
- 进系统后立刻检查:
uname -r、dmesg | grep -i "error\|fail"、lsmod | grep nf_conntrack(按业务需要) - 确认服务(如 Docker、Nginx)能拉起、容器可创建、网络转发正常
- 没问题再设默认:
sudo grubby --set-default-index=0(RHEL)或改/etc/default/grub中GRUB_DEFAULT=0后再update-grub
容易忽略的点:
- 某些新内核默认禁用
net.ipv4.ip_forward,导致 K8s CNI 或 NAT 规则失效,需检查/proc/sys/net/ipv4/ip_forward - Docker 可能报 “cgroup v2 not supported”,得在
/etc/default/grub的GRUB_CMDLINE_LINUX加systemd.unified_cgroup_hierarchy=0 - 旧内核镜像别删——
sudo apt autoremove或yum remove kernel-3.10.*会连带清掉 initramfs,务必跳过
升级前必须保留的三个现场
不是“备份整个系统”,而是保三样最小但关键的东西:
- 当前可用内核的完整路径:
sudo cp /boot/vmlinuz-$(uname -r) /boot/vmlinuz-$(uname -r).bak - 当前 GRUB 配置快照:
sudo cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.pre-kernel-upgrade(RHEL)或同理 Ubuntu 路径 - SSH 服务状态确认:
sudo systemctl is-enabled sshd+sudo ss -tlnp | grep :22,避免重启后失联
真正麻烦的不是装不上新内核,而是装上了却没法验证、没法回退、没人能连上机器。这些动作花不了两分钟,但能省掉半夜爬起来救火的时间。











