必须双重确认当前运行与grub默认内核版本一致,再手动清理/boot、/lib/modules和/usr/src中对应残留文件,并强制执行update-grub更新引导配置,否则易致系统无法启动。

不能只跑 apt autoremove 就完事——它大概率漏删 /boot 和 /lib/modules 里的关键残留,/boot 空间几乎不释放。
先确认当前运行和 GRUB 默认内核是否一致
只看 uname -r 输出是危险的。系统可能刚升级完还没重启,uname -r 还在报旧版本(比如 6.6.127-amd64-desktop-hwe),但 GRUB 默认项已指向新内核(比如 6.6.138-amd64-desktop-hwe)。这时候删掉新内核,下次重启就进不去。
必须两步都做:
- 运行
uname -r记下当前运行版本 - 再跑
grubby --default-kernel(RHEL/CentOS/Fedora)或grep menuentry /boot/grub/grub.cfg | head -n5(Debian/Ubuntu/deepin),比对路径末尾的版本号是否完全一致 - 不一致?别删任何一方,先重启进新内核再操作
dpkg 列出的 “ii” 包 ≠ /boot 里真实存在的文件
dpkg --list | grep 'linux-image-' | grep '^ii' 只反映包管理器状态,不是磁盘事实。常见脱节情况:
-
linux-image-unsigned-6.5.0-44-generic被装过又卸载,dpkg 状态是rc,但/boot/vmlinuz-6.5.0-44-generic还在 - 定制内核(如 Liquorix、XanMod)根本不走标准包名,
dpkg根本列不出来,得靠ls /boot/vmlinuz-*手动找 -
linux-image-extra-包卸载后,/lib/modules/6.5.0-44-generic/目录常被遗留
所以清理前,先执行:ls /boot/vmlinuz-* 和 ls /lib/modules/,把输出和 dpkg --list 结果逐行比对,找出“多出来”的版本。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
删包只是第一步,三处残留必须手动清
sudo apt purge linux-image-6.5.0-44-generic 只删了包记录,以下三处不手动处理,/boot 空间基本不下降:
-
/boot下全套文件:vmlinuz-6.5.0-44-generic、initrd.img-6.5.0-44-generic、System.map-6.5.0-44-generic、config-6.5.0-44-generic -
/lib/modules/对应目录:sudo rm -rf /lib/modules/6.5.0-44-generic -
/usr/src/头文件目录:sudo rm -rf /usr/src/linux-headers-6.5.0-44-generic(注意结尾必须带-generic,少这个就删错)
别信 apt autoremove 会帮你扫干净——它不会碰这些路径,除非你之前用的是 purge 而非 remove,且没手动改过文件权限。
update-grub 不是可选项,是强制收尾动作
删完所有文件后不跑 sudo update-grub(Debian/Ubuntu/deepin)或 sudo grub2-mkconfig -o /boot/grub2/grub.cfg(RHEL/CentOS/Fedora),后果很具体:
- GRUB 启动菜单里仍显示已删内核,选了就报
file not found卡住 - 某些新版 Ubuntu(如 24.04+)的
update-grub会跳过缺失vmlinuz的条目,但如果initrd.img残留,它仍会保留该菜单项 - deepin 25.1.1+ 虽加了失效内核标记机制,但前提是
update-grub已执行过至少一次
最易忽略的细节:四个地方的版本字符串必须完全一致——dpkg 包名、/boot 文件名、/lib/modules/ 目录名、grubby 输出路径。差一个字符(比如少个 -generic 或多一个 unsigned-),清理就白干。










