错误 24:写入错误:无法写入压缩块

ale*_*345 17 kernel initramfs

我最近从 Ubuntu 18.04 更新到 19.10。在我看来,更新安装的内核 (5.3.0-29) 比我在 18.04 (5.0.0-36) 下运行的内核更旧。从那以后,我在所有 apt 更新上都有错误,显示 initramfs 失败:

Setting up initramfs-tools (0.133ubuntu10) ...
update-initramfs: deferring update (trigger activated)
Processing triggers for initramfs-tools (0.133ubuntu10) ...
update-initramfs: Generating /boot/initrd.img-5.3.0-29-generic
Error 24 : Write error : cannot write compressed block 
E: mkinitramfs failure cpio 141 lz4 -9 -l 24
update-initramfs: failed for /boot/initrd.img-5.3.0-29-generic with 1.
dpkg: error processing package initramfs-tools (--configure):
 installed initramfs-tools package post-installation script subprocess returned 
error exit status 1
Errors were encountered while processing:
 initramfs-tools
E: Sub-process /usr/bin/dpkg returned an error code (1)
Run Code Online (Sandbox Code Playgroud)

我的 uname -r 输出是

5.3.0-29-generic
Run Code Online (Sandbox Code Playgroud)

alex@acer:~$ dpkg --list | grep linux-image
ii  linux-image-5.0.0-36-generic                  5.0.0-36.39                                         amd64        Signed kernel image generic
ii  linux-image-5.3.0-29-generic                  5.3.0-29.31                                         amd64        Signed kernel image generic
ii  linux-image-generic                           5.3.0.29.33                                         amd64        Generic Linux kernel image
Run Code Online (Sandbox Code Playgroud)

关于如何解决的任何想法?我什至不确定问题是什么,但已经经历了很多其他解决方案。

ale*_*345 18

好的,我想我可能刚刚解决了这个问题。一开始我没有注意到我实际上使用的是新内核而不是旧内核。在我更新后的前几次启动中,使用的是较旧的内核 (5.0.-),而不是较新的内核 (5.3.-)。所以sudo apt purge linux-image-5.0.0-36-generic它看起来像在 /boot 上释放了一些空间,瞧计算机说

Setting up initramfs-tools (0.133ubuntu10) ...
update-initramfs: deferring update (trigger activated)
(Reading database ... 328490 files and directories currently installed.)
Purging configuration files for linux-image-5.0.0-36-generic (5.0.0-36.39) ...
rmdir: failed to remove '/lib/modules/5.0.0-36-generic': Directory not empty
Processing triggers for initramfs-tools (0.133ubuntu10) ...
update-initramfs: Generating /boot/initrd.img-5.3.0-29-generic
Run Code Online (Sandbox Code Playgroud)

  • 是的。感谢您指出这是一个可用空间问题,每当“initramfs”需要重新生成并且“/boot”文件系统中没有可用空间时就会发生该错误。我开始觉得有必要将 '/boot' FS 扩展到 300M 或更多(最近平均每个内核 100M),在新内核版本安装时,ubuntu 安装了 3 个内核(当前运行的、旧的稳定版和新来的)。 (2认同)

Mat*_* J. 8

我遇到了这个问题,因为我的 /boot 分区已满。

我小心地删除了一些我确定不再需要的大型 initrd.img 文件。

确保你写下你的最后一个工作内核。不要立即删除所有其他人,因为您不希望它们全部重新生成。

我跑了sudo apt autoremove --purge又做了另一个sudo apt dist-upgrade -V来生成missind initrd 图像文件。

一旦您在最后一个内核上重新启动。一切都很好。然后我邀请你清理所有的旧东西。

您不应该接触的当前包裹 dpkg -l | egrep "linux-(signed|modules|image|headers)" | grep $(uname -r)

您可以清除的旧包 dpkg -l | egrep "linux-(signed|modules|image|headers)" | grep -v $(uname -r | cut -d - -f 1)

我用

dpkg -l | egrep "linux-(signed|modules|image|headers)" | grep -v $(uname -r | cut -d - -f 1) | awk {'print $2'} | xargs sudo apt purge -y

我在运行 5.8.0-45 的 Ubuntu 20.10 上仍然有 4.10 和 4.13 软件包


Eri*_*uff 7

作为解决方法,您可以尝试使用更多临时暂存空间:

cd /
sudo rsync -av /boot/ /boot2/
sudo mount --bind /boot2 /boot
sudo update-initramfs -u
sudo umount /boot
sudo rsync -av /boot2/ /boot/ --exclude "*.new" --exclude "*.dpkg-bak" --delete --inplace
Run Code Online (Sandbox Code Playgroud)


gui*_*erc 0

5.3 是比 5.0 更新/更高的内核

只有前两个数字来自上游,对于比较内核很重要。

其他尾随的次要数字是仅适用于该内核的内部 Ubuntu 代码,即。不要将 5.3 系列内核的次要编号与 5.0 系列内核进行比较。次要编号(即 5.0/5.3 之后的编号,只能用于在同一内核内进行比较)

https://wiki.ubuntu.com/Kernel/MainlineBuilds

注意:我所说的两个数字是指 number.number; 因此,粘贴链接中的 4.19 示例符合我使用该术语的前两个数字。