必须先用uname -r确认当前运行内核版本,再对比dpkg -l | grep linux-image列出的所有已安装内核,仅安全卸载旧于当前版本且非正在使用的内核包,并严格配套删除对应linux-modules和linux-headers包,最后强制执行sudo update-grub同步引导菜单。

确认当前运行的内核版本,别删错
误删正在使用的内核会导致系统无法启动,这是最常踩的坑。必须先查清楚 uname -r 输出的版本号,它就是你此刻依赖的内核,任何操作都不得碰它。
-
dpkg --list | grep 'linux-image-[0-9]' | awk '{ print $2 }' | sort -V列出所有已安装内核包,按版本自然排序,最新版通常在末尾 - 对比
uname -r结果,只标记比它旧、且非当前运行的版本(比如当前是6.5.0-1020-oem,那6.5.0-1018-oem可留,6.2.0-36-generic就该删) - 注意:
linux-image-extra-和linux-modules-包名必须与linux-image-版本号严格一致,否则卸载后 GRUB 启动会失败
用 apt purge 彻底删除内核包及其文件
仅用 apt remove 或手动删 /boot 下文件是半吊子操作——包状态残留会导致后续 apt autoremove 报错,甚至阻碍新内核安装。
- 一次性卸载完整套件:
sudo apt purge linux-image-6.2.0-36-generic linux-modules-6.2.0-36-generic linux-headers-6.2.0-36-generic linux-headers-6.2.0-36 - 务必包含
linux-headers-(不含 -generic 后缀的)和linux-headers-6.2.0-36-generic两个头文件包,漏一个都会让/usr/src留垃圾 - 执行后立即运行
sudo update-grub,否则重启可能进不了系统——这步不是可选,是强制同步引导菜单
/boot 分区已满时,先腾空间再走标准流程
当 df -h /boot 显示使用率 100%,apt 命令会直接失败,提示 Not enough space。此时不能硬等 apt 工作,得手动救急。
- 临时删掉对应旧内核的镜像文件:
sudo rm /boot/vmlinuz-5.4.0-42-generic /boot/initrd.img-5.4.0-42-generic - 顺手清理同版本的配套文件:
sudo rm /boot/config-5.4.0-42-generic /boot/System.map-5.4.0-42-generic /boot/abi-5.4.0-42-generic - 切记:这只是释放空间的临时动作,对应包仍存在,之后必须补上
apt purge+update-grub,否则apt autoremove会反复报错 - UEFI 系统下严禁动
/boot/efi/里的任何东西,哪怕看着像旧内核也不碰
dnf 系统(RHEL/CentOS/Fedora)逻辑完全不同
Debian/Ubuntu 的 apt 是“装完就留”,而 dnf 默认靠 installonly_limit 控制保留数量,不手动干预也会自动轮换。
- 查看当前设置:
sudo dnf versionlock list | grep kernel或检查/etc/dnf/dnf.conf中的installonly_limit=3 - 想立刻清理旧内核:
sudo dnf remove $(dnf repoquery --installonly --latest-limit=-2 -q)(保留最新两个) - 修改
installonly_limit后无需手动触发,下次dnf upgrade会自动应用新策略 - 别套用 Ubuntu 的
autoremove思路——dnf autoremove不处理内核,它只清孤立依赖
真正麻烦的不是删哪个,而是删完没跑 update-grub;也不是空间不够时手忙脚乱删文件,而是删完忘了补 apt purge 让包管理器状态回归一致。这两处断点,最容易在深夜维护时被忽略。


















