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

为什么通过 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) ...
运行部分:执行 /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
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 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-通用

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

注意:在安装内核期间或安装内核时,还会出现其他错误dpkg --configure。系统磁盘空间不足是可以理解的,但在这种情况下,我正在清除内核 - 具体来说是一个 linux-image-extra 包dpkg。在这种情况下没有依赖性问题。例如在这个一种解决方案可能是直接通过 清除内核包dpkg,但是这个问题在这样做时会产生错误。

答案1

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

修复方法是在不同的分区中创建新的 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”。

相关内容