为什么通过 dpkg 删除内核时会出现 update-initramfs 错误?

jar*_*rno 8 dpkg kernel initramfs purge

通过以下方式删除内核时,我得到以下输出dpkg --purge

删除 linux-headers-3.13.0-112-generic (3.13.0-112.159) ...
删除 linux-image-extra-3.13.0-112-generic (3.13.0-112.159) ...
运行部分:执行 /etc/kernel/postinst.d/apt-auto-removal 3.13.0-112-generic /boot/vmlinuz-3.13.0-112-generic
运行部分:执行 /etc/kernel/postinst.d/initramfs-tools 3.13.0-112-generic /boot/vmlinuz-3.13.0-112-generic
更新initramfs:生成/boot/initrd.img-3.13.0-112-generic
W: TMPDIR 挂载 noexec,不会缓存运行脚本。

gzip:标准输出:设备上没有剩余空间
E: mkinitramfs 失败 cpio 141 gzip 1
更新 initramfs:/boot/initrd.img-3.13.0-112-generic 失败,为 1。
运行部分:/etc/kernel/postinst.d/initramfs-tools 退出并返回代码 1
dpkg: 错误处理包 linux-image-extra-3.13.0-112-generic (--purge):
 子进程安装后删除脚本返回错误退出状态 1
删除 linux-image-3.13.0-112-generic (3.13.0-112.159) ...
检查 /etc/kernel/postrm.d 。
运行部分:执行 /etc/kernel/postrm.d/initramfs-tools 3.13.0-112-generic /boot/vmlinuz-3.13.0-112-generic
update-initramfs:删除/boot/initrd.img-3.13.0-112-generic
运行部分:执行 /etc/kernel/postrm.d/zz-update-grub 3.13.0-112-generic /boot/vmlinuz-3.13.0-112-generic
正在生成 grub 配置文件...
警告:不再支持在设置 GRUB_HIDDEN_TIMEOUT 时将 GRUB_TIMEOUT 设置为非零值。
找到 linux 映像:/boot/vmlinuz-4.4.0-71-generic
找到 initrd 映像:/boot/initrd.img-4.4.0-71-generic
找到 linux 映像:/boot/vmlinuz-4.4.0-67-generic
找到 initrd 映像:/boot/initrd.img-4.4.0-67-generic
找到 linux 映像:/boot/vmlinuz-4.4.0-66-generic
找到 initrd 映像:/boot/initrd.img-4.4.0-66-generic
找到 linux 映像:/boot/vmlinuz-4.4.0-64-generic
找到 initrd 映像:/boot/initrd.img-4.4.0-64-generic
找到 linux 映像:/boot/vmlinuz-3.13.0-115-generic
找到 initrd 映像:/boot/initrd.img-3.13.0-115-generic
找到 linux 映像:/boot/vmlinuz-3.13.0-113-generic
找到 initrd 映像:/boot/initrd.img-3.13.0-113-generic
找到 memtest86+ 图像:/memtest86+.elf
找到 memtest86+ 图像:/memtest86+.bin
  未找到卷组
完毕
清除 linux-image-3.13.0-112-generic (3.13.0-112.159) 的配置文件...
检查 /etc/kernel/postrm.d 。
运行部分:执行 /etc/kernel/postrm.d/initramfs-tools 3.13.0-112-generic /boot/vmlinuz-3.13.0-112-generic
运行部分:执行 /etc/kernel/postrm.d/zz-update-grub 3.13.0-112-generic /boot/vmlinuz-3.13.0-112-generic
处理时遇到错误:
 linux-image-extra-3.13.0-112-generic

为什么即使在清除时它也会耗尽空间?在这种情况下,这不是 inode 问题。

注意:dpkg --configure在安装内核期间或安装内核时发生错误的其他问题。更容易理解的是,系统会耗尽磁盘空间,但在这种情况下,我正在清除内核 - 一个特定的 linux-image-extra 包 - 通过dpkg. 在这种情况下不存在依赖问题。例如,在这个解决方案中,解决方案可能是直接通过 清除内核包dpkg,但是这个问题的问题在这样做时会产生错误。

jar*_*rno 5

清除 linux-image-extra 包时,会运行安装后脚本,因为该内核版本的主 linux-image 包可能会留在系统中: 相应的 initrd.img 将被更改为不包含额外内容;由于这个过程,它的大小将减小。但是,在此过程中,“/boot”中的旧initrd.img 文件并未删除,而是在其旁边的“/boot”中创建了新的initrd.img 文件,因此存在空间不足的风险。

修复方法可能是在不同的分区中创建新的 initrg.img 文件,然后在update-initramfs. 所以update-initramfs脚本应该是固定的。

一种解决方法是在运行dpkg --purgelinux-image-extra 包之前删除相应的版本化 /boot/initrd.img 文件。sudo update-initramfs -d -k 3.13.0-112-generic在这种情况下也可以这样做,因为我要删除的内核是“3.13.0-112-generic”。