我在自定义 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 记忆棒并在另一台计算机上运行它,它会正常运行,不会出现任何问题,这让我相信我的问题可能会有所不同。
有任何想法吗?