Ubuntu 20.04:解压 initramfs 时也遇到问题,但更改为 gzip 并不能解决我的问题

Ubuntu 20.04:解压 initramfs 时也遇到问题,但更改为 gzip 并不能解决我的问题

我在自定义 ubuntu 20.04 时遇到问题。当我创建一个新的 initrd 用于引导(iso/casper/initrd)时,出现以下错误:

initramfs unpacking failed: Decoding failed

然后进入 initramfs shell。

我发现一些描述这个问题的帖子,比如

https://bugs.launchpad.net/ubuntu/+source/ubuntu-meta/+bug/1870260 https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1835660

所以我更改了 initramfs.conf 以COMPRESS=gzip在(chrooted)squashfs live 文件系统中进行设置,并使用

mkinitrd -o initrd 5.4.0-33-generic

还按照说明自定义 initramfs: https://askubuntu.com/questions/1094854/how-to-modify-initrd-initial-ramdisk-of-ubuntu-18-10-cosmic-cuttlefish

然后将其放入iso/casper/initrd

然而它并没有解决我的问题。它没有显示错误消息,但仍然直接将我扔进initramfs。即,它不会进入 plymouth 和 ubiquity,只是停在 initramfs shell 中。

没有消息。 initramfs 中的 ( busybox more) 不起作用,因此我也无法详细查看 dmesg 日志。

任何帮助和建议将不胜感激,包括我如何调试这种情况,或者我应该做什么才能使 gzip 压缩的 initramfs 工作。

答案1

我自己找到了答案。

它进入 shell 而不是运行 plymouth 的原因是,在任何新生成的 initrd 中,conf/conf.d 中没有“default-boot-to-casper.conf”文件。该文件指示引导加载程序从 casper 引导,而不是从 HDD 引导,因为它是一个实时系统。在本机 Ubuntu iso/casper/initrd 中,解压时存在此文件。然而它并不存在于squashfs live 文件系统中,因此任何新生成的initrd.img 都将无法从casper 启动。

放内容

if [ -z "$BOOT" ]; then
    export BOOT=casper
fi

然后/etc/initramfs-tools/conf.d/default-boot-to-casper.conf生成initrd,无论用lz4还是gzip压缩方式都能成功启动,虽然使用lz4时仍然会显示“解码失败”但仍然可以启动。

答案2

Franklin,当我尝试在使用 UNetbootin 创建的新桌面中运行实时版本的 Ubuntu Studio 20.04 时,我遇到了同样的问题...“initramfs 解包失败:解码失败”。

但是,如果我使用实时 USB 记忆棒并在另一台计算机上运行它,它会正常运行,不会出现任何问题,这让我相信我的问题可能会有所不同。

有任何想法吗?

相关内容