如何从 ubuntu-20.04-live-server-amd64.iso 中提取 initrd

vir*_*ius 6 disk-image initrd 20.04

我正在尝试更新用于重新管理 20.04 的 Ubuntu 18.04 安装映像的进程,但在提取 initrd 存档时遇到问题。使用的命令是cpio -id --no-absolute-filenames. 当我使用相同的命令从 20.04 映像中提取 initrd 映像时,它会提取kernel/x86/microcode/AuthenticAMD.bin并停止。

检查 initrd 文件内容,我可以看到“TRAILER”部分,显示该文件中有多个存档。正如有关 cpio 档案的其他线程中所建议的,我尝试按如下方式提取复合档案:cat initrd | while cpio -id --no-absolute-filenames; do :; done。在这种情况下,第一个条目会提取,但它有一堆“0 块”并且不会提取其他任何内容。

有谁知道这个档案是如何创建的或如何提取它?

Jde*_*aan 5

/usr/sbin/update-initramfs 调用 /usr/sbin/mkinitramfs,后者调用

cpio --quiet -R 0:0 --reproducible -o -H newc | lz4 -9 -l
Run Code Online (Sandbox Code Playgroud)

其中 lz4 来自 /etc/initramfs-tools/initramfs.conf

将其反转为

cat /boot/initrd.img-5.4.0-26-generic | unlz4 -9 -l | cpio -i -H newc
Run Code Online (Sandbox Code Playgroud)

但失败了。

cat /boot/initrd.img-5.4.0-26-generic | file -
    /dev/stdin: ASCII cpio archive (SVR4 with no CRC)
Run Code Online (Sandbox Code Playgroud)

一直坚持它是一个 cpio 存档,但是

cat /boot/initrd.img-5.4.0-26-generic | cpio -i -H newc
Run Code Online (Sandbox Code Playgroud)

仍然最终出现在同一个 AuthenticAMD.bin 中。也许其他人可以在此基础上继续发展?

编辑:不。根据https://unix.stackexchange.com/a/511224/44864 答案是

 unmkinitramfs -v initrd.img-5.4.0-26-generic .
Run Code Online (Sandbox Code Playgroud)


Ed *_*ing 2

同样的问题在这里 - 解决方案是不使用 unmkinitramfs 解压 Ubuntu 版本 20.04。

我创建了一个可启动 USB 并将我的机器启动到 Ubuntu 20 —— 然后 unmkinitramfs 能够解压 initrd。我仍在寻找构建新的可启动 USB 的方法,该 USB 不会自动登录(并且可以与 casper-rw 一起正常工作)。

如果您想了解有关 unmkinitramfs 功能的更多信息,它是一个 bash 脚本。在 Bionic 和 Focal 的比较中,Bionic 不支持 lz4 压缩。