Linux内核升级本质是安装新内核并更新GRUB菜单,而非替换当前内核;uname -r仅显示运行中版本,旧内核必须保留以支持回滚,且update-grub或grub2-mkconfig不可省略,否则新内核无法出现在启动菜单。

手动更新内核不是“替换当前内核”,而是安装一个新内核并让它出现在 GRUB 启动菜单里——uname -r 显示的永远是当前运行的内核,和你装了多少个新内核无关。
为什么不能直接用 apt upgrade 或 yum update 升内核
主流发行版把内核当作独立包管理,apt upgrade 默认跳过 linux-image-* 类包,yum update kernel 则试图升级已安装的旧包(可能失败或覆盖),而正确做法是新增一个内核条目,保留旧内核兜底。
- Ubuntu/Debian:必须用
sudo apt install linux-image-6.8.0-45-generic这类明确指定版本的命令 - CentOS/RHEL:必须先启用 elrepo 源,再用
sudo dnf --enablerepo=elrepo-kernel install kernel-lt - 直接
rm -rf /boot/vmlinuz-*删除旧文件会破坏包管理器状态,后续apt autoremove可能误删依赖
update-grub 和 grub2-mkconfig 必须执行
只装包不更新 GRUB 配置,新内核根本不会出现在启动菜单里。很多用户装完重启还是进老内核,甚至卡在黑屏,就是因为漏了这步。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- Ubuntu/Debian:运行
sudo update-grub,它会扫描/boot下所有vmlinuz-*并重写/boot/grub/grub.cfg - CentOS/RHEL 8+:运行
sudo grub2-mkconfig -o /boot/grub2/grub.cfg - 验证是否生效:
grep menuentry /boot/grub/grub.cfg | head -3(Ubuntu)或grubby --info=ALL | grep ^kernel(RHEL系)
手动下载 DEB 包安装时的常见坑
从 https://www.php.cn/link/27d62a2ccc194f945cc8ab4ecca3e8ed 下载主线内核时,四个文件缺一不可:
-
linux-headers-ALL.deb(通用头文件) -
linux-headers-6.9.0-060900rc3-generic_6.9.0-060900rc3.202604122230_amd64.deb(架构专用头文件) linux-image-6.9.0-060900rc3-generic_6.9.0-060900rc3.202604122230_amd64.deblinux-modules-6.9.0-060900rc3-generic_6.9.0-060900rc3.202604122230_amd64.deb- 顺序必须是:先装 headers-ALL,再装 headers-GENERIC,再 image,最后 modules;否则
dpkg会报依赖错误 - 装完后务必运行
sudo apt --fix-broken install补全可能缺失的 firmware 或依赖
回滚比升级更简单,但得留着旧文件
只要没删 /boot/vmlinuz-5.15.0-91-generic 和对应 /lib/modules/5.15.0-91-generic/,就能在 GRUB 菜单里选它启动——BIOS 模式长按 Shift,UEFI 模式狂按 Esc,进 “Advanced options” 子菜单找带旧版本号的条目。
Secure Boot 开启时,旧 initramfs 可能被拒载,此时需进固件设置临时关闭 Secure Boot;另外,设默认启动项前,务必先手动选一次新内核启动成功,再用 grub-set-default 或 grubby --set-default 锁定,否则可能锁死在无法启动的版本上。

















