cpio 在 Ubuntu Xenial 中错误地解压了 initrd

cpio 在 Ubuntu Xenial 中错误地解压了 initrd

我正在尝试解压 initrd 映像:

# file /boot/initrd.img-4.11.0-14-generic
/boot/initrd.img-4.11.0-14-generic: ASCII cpio archive (SVR4 with no CRC)
# mkdir /tmp/initrd; cd /tmp/initrd
# cpio -i -d -H newc --no-absolute-filenames -F /boot/initrd.img-4.11.0-14-generic
194 blocks
# ls -R
.:
kernel

./kernel:
x86

./kernel/x86:
microcode

./kernel/x86/microcode:
GenuineIntel.bin

因此 cpio 仅提取./kernel档案的子目录。但lsinitramfs显示其中的更多文件:

# lsinitramfs /boot/initrd.img-4.11.0-14-generic
/boot/initrd.img-4.11.0-14-generic
kernel
kernel/x86
kernel/x86/microcode
kernel/x86/microcode/GenuineIntel.bin
.
lib
lib/libnss_files.so.2
lib/cryptsetup

...

bin/egrep
init
run

我如何才能获取所有档案内容?

答案1

当您安装了 intel-microcode(您有)和/或 amd64-micrcocode 时,initrd 由两个连接的映像组成。第一个映像仅包含微码。第二个包含其他所有内容。您的 cpio 命令只会提取第一个。

最简单的方法是使用unmkinitramfsinitramfs-tools >= 0.126,它包含在 Ubuntu 18.04 (bionic) 及更新版本中。在 xenial 上,您只需克隆https://salsa.debian.org/kernel-team/initramfs-toolsunmkinitramfs并从该目录调用。

相关内容