You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

/boot分区空间不足,执行update-initramfs重建initramfs镜像失败求助

/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-xxxinitrd.img-xxxconfig-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

火山引擎 最新活动