/boot分区空间不足,执行update-initramfs重建initramfs镜像失败求助
问题描述
我遇到了/boot磁盘空间不足的问题:
当尝试使用软件更新器时,系统提示我用
sudo apt autoremove删除旧内核,还建议在initramfs.conf里设置COMPRESS=xz。
和类似问题一样,sudo apt autoremove没有起到任何作用,于是我尝试了第二个方案。
但设置COMPRESS=xz后,我需要重建initramfs镜像,执行sudo update-initramfs -u -k all时却因为空间不足失败了,输出如下:I: The initramfs will attempt to resume from /dev/dm-2 I: (/dev/mapper/vgubuntu-swap_1) I: Set the RESUME variable to override this. xz: (stdout): Write error: No space left on device E: mkinitramfs failure xz --check=crc32 --threads=0 1 update-initramfs: failed for /boot/initrd.img-5.15.0-67-generic with 1.
解决方案
别着急,这种情况是因为/boot剩余空间连生成压缩镜像的临时文件都放不下,得先手动释放足够空间再执行重建。下面是分步解决办法:
1. 确认当前正在使用的内核(关键!别删错)
先执行命令查看当前运行的内核版本,这个版本的内核绝对不能动:
uname -r
比如输出是5.15.0-67-generic,那这个就是你当前在用的内核。
2. 手动删除最旧的冗余内核文件
列出/boot下所有内核相关文件,找到比当前版本更旧的内核组:
ls -la /boot/
你会看到类似5.15.0-60-generic的旧版本对应的三个核心文件:vmlinuz-xxx、initrd.img-xxx、config-xxx,用sudo删除这三个文件释放空间:
sudo rm /boot/vmlinuz-5.15.0-60-generic /boot/initrd.img-5.15.0-60-generic /boot/config-5.15.0-60-generic
(记得替换成你实际找到的旧版本号)
3. 彻底清理旧内核的软件包
为了避免残留依赖和配置文件,用apt彻底卸载旧内核的软件包:
sudo apt purge linux-image-5.15.0-60-generic linux-headers-5.15.0-60-generic
这一步会完整清理掉旧内核的所有相关文件,比手动删除更彻底。
4. 重新执行initramfs重建命令
现在/boot应该有足够空间了,再次执行重建命令:
sudo update-initramfs -u -k all
这次应该能顺利完成,因为xz的压缩率比默认格式高很多,生成的镜像体积会小不少,后续也能帮你节省/boot的空间。
5. 预防后续再出现空间问题
为了避免以后再踩这个坑,可以开启系统自动清理旧内核的功能:
编辑/etc/apt/apt.conf.d/50unattended-upgrades文件,确保下面这行没有被注释(去掉前面的//):
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
这样系统会自动清理不再需要的旧内核,不用你手动操作。
备注:内容来源于stack exchange,提问作者Miguel




