必须用 uname -r 确认当前运行内核版本,如 6.8.0-52-generic,该版本绝不可删;再用 grubby --default-kernel 核对 grub 默认启动项是否一致,避免误删正在使用的内核。

删错内核会导致系统无法启动,必须先确认当前运行的内核版本,再逐层清理镜像、头文件、模块和 GRUB 配置 —— 漏掉任何一环都可能白忙活。
怎么确认当前正在跑的内核版本
这是所有操作的前提,uname -r 输出的就是当前加载并运行的内核,比如 6.8.0-52-generic。这个版本绝对不能删。另外建议补查一次 grubby --default-kernel,看 GRUB 默认启动项是否和 uname -r 一致;如果两者不一致,说明系统实际在跑旧内核,但你误以为它已下线,此时删最新版反而会出问题。
Debian/Ubuntu 怎么列出所有已安装的内核包
dpkg --list | grep 'linux-image-' | grep '^ii' 能筛出真正安装成功的内核镜像包。注意别漏掉这些变体:
-
linux-image-extra-(老 Ubuntu 版本常见) -
linux-image-unsigned-(启用 Secure Boot 时安装)
/boot 下的 vmlinuz-* 文件名应与包名严格对应,可用 ls /boot/vmlinuz-* 交叉验证。常见错误是只看 dpkg --list,结果发现某个 linux-image-* 包早已卸载,但残留的 vmlinuz 和 initrd.img 还占着 /boot 空间。
删完内核镜像后,哪些残留必须手动清
仅执行 apt purge linux-image-xxx 不等于释放全部空间。以下三类残留常被忽略:
-
linux-headers-*包:用sudo apt purge $(dpkg --list | grep 'linux-headers-' | awk '{print $2}' | grep -v "$(uname -r)") -
/lib/modules/下对应版本的整个目录(如/lib/modules/6.5.0-44-generic/):sudo rm -rf /lib/modules/6.5.0-44-generic -
/usr/src/linux-headers-*源码头文件目录:通常随linux-headers-*包一起 purge,但若之前用apt remove而非purge,就得手动rm -rf
不清理这些,apt autoremove 不会碰它们,/boot 空间也释放不了多少。
RHEL/CentOS/Fedora 删除旧内核的正确命令
这类系统内核是 installonly 类型包,不能直接 rpm -e。必须用 dnf 或 yum 的专用参数:
- 保留最新 2 个,删其余:
dnf remove --oldinstallonly --setopt installonly_limit=2 kernel - 手动指定版本删:
dnf remove kernel-4.19.90-52.19.v2207.ky10.x86_64
删完必须立刻执行 grub2-mkconfig -o /boot/grub2/grub.cfg。不更新 GRUB 配置,旧内核仍会出现在启动菜单里 —— 这是运维最常忽略的一步。
最麻烦的不是命令本身,而是路径匹配:/boot 下的文件名、dpkg/rpm 包名、/lib/modules/ 目录名、grubby 输出的路径,四者必须版本完全一致才能确认是同一套内核。稍有出入,就可能是 Secure Boot 变体、unsigned 镜像或手动安装残留,得单独处理。











