为什么在使用dpkg删除内核时会出现update-initramfs错误?

通过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)...
 run-parts:执行/etc/kernel/postinst.d/apt-auto-removal 3.13.0-112-generic /boot/vmlinuz-3.13.0-112-generic
 run-parts:执行/etc/kernel/postinst.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
 W:TMPDIR挂载noexec,不会缓存运行脚本。

 gzip:stdout:设备上没有剩余空间
 E:mkinitramfs失败cpio 141 gzip 1
 update-initramfs:/boot/initrd.img-3.13.0-112-generic with 1失败。
 run-parts:/etc/kernel/postinst.d/initramfs-tools退出,返回码为1
 dpkg:error handling包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。
 run-parts:执行/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
 run-parts:执行/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 + image:/memtest86+.elf
找到memtest86 + image:/memtest86+.bin
  没有找到卷组
 DONE
清除linux-image-3.13.0-112-generic(3.13.0-112.159)的配置文件...
检查/etc/kernel/postrm.d。
 run-parts:执行/etc/kernel/postrm.d/initramfs-tools 3.13.0-112-generic /boot/vmlinuz-3.13.0-112-generic
 run-parts:执行/etc/kernel/postrm.d/zz-update-grub 3.13.0-112-generic /boot/vmlinuz-3.13.0-112-generic
处理时遇到错误:
  Linux的图像超3.13.0-112generics 

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

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

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

修复可能是在update-initramfs替换旧的initrg.img文件之前在不同的分区中创建新的initrg.img文件。 所以应该修复update-initramfs脚本。

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