web-dev-qa-db-ja.com

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

すべてのアーカイブコンテンツを取得するにはどうすればよいですか?

3
Selivanov Pavel

Intel-microcode(お持ち)またはAMD64-micrcocode(あるいはその両方)がインストールされている場合、initrdは2つの連結されたイメージで構成されます。最初の画像にはマイクロコードのみが含まれています。 2番目には他のすべてが含まれます。 cpioコマンドは、最初のコマンドを抽出するだけです。

最も簡単な方法は、Ubuntu 18.04(bionic)以降に含まれているinitramfs-tools> = 0.126のunmkinitramfsを使用することです。 xenialでは、 https://salsa.debian.org/kernel-team/initramfs-tools を複製して、このディレクトリからunmkinitramfsを呼び出すだけです。

4
Benjamin Drung