linuxのinitramfs

initramfs は以前はテキストcpio形式をgzipしたものだったはずだけど今は違うらしい。
私はubuntu serverを使う事が多いので結局はinitramfs-tools , dracut-coreのパッケージを入れてそちらのドキュメントにアクセスすることになるのだけど、ちょっとだけファイルをダンプしてつらつら見ていると…

これ、cpioのファイルを幾つかcatしてるだけなんじゃね?

って思った。

# cpio -iv --list < /boot/initrd.img-5.15.0-53-generic
drwxr-xr-x 3 root root 0 Dec 18 2019 .
drwxr-xr-x 3 root root 0 Dec 18 2019 kernel
drwxr-xr-x 3 root root 0 Dec 18 2019 kernel/x86
drwxr-xr-x 2 root root 0 Dec 18 2019 kernel/x86/microcode
-rw-r--r-- 1 root root 30546 Dec 18 2019 kernel/x86/microcode/AuthenticAMD.bin
62 blocks

# dd if=/boot/initrd.img-5.15.0-53-generic of=skip1 bs=512 skip=62
209777+1 records in
209777+1 records out
107406171 bytes (107 MB, 102 MiB) copied, 1.44828 s, 74.2 MB/s

# cpio -iv --list < skip1
drwxr-xr-x 2 root root 0 Jun 15 12:00 kernel
drwxr-xr-x 2 root root 0 Jun 15 12:00 kernel/x86
drwxr-xr-x 2 root root 0 Jun 15 12:00 kernel/x86/microcode
drwxr-xr-x 2 root root 0 Jun 15 12:00 kernel/x86/microcode/.enuineIntel.align.0123456789abc
-rw-r--r-- 1 root root 5019648 Jun 15 12:00 kernel/x86/microcode/GenuineIntel.bin
9806 blocks

# dd if=skip1 of=skip2 bs=512 skip=9806
199971+1 records in
199971+1 records out
102385499 bytes (102 MB, 98 MiB) copied, 0.144869 s, 707 MB/s

# file skip2
skip2: Zstandard compressed data (v0.8+), Dictionary ID: None

# zstdcat skip2 | cpio -iv --list | head
drwxr-xr-x 9 root root 0 Nov 21 12:45 .
-rw-r--r-- 1 root root 4096 Nov 21 12:45 .random-seed
lrwxrwxrwx 1 root root 7 Nov 21 12:44 bin -> usr/bin
drwxr-xr-x 3 root root 0 Nov 21 12:44 conf
-rw-r--r-- 1 root root 16 Nov 21 12:44 conf/arch.conf
drwxr-xr-x 2 root root 0 Nov 21 12:44 conf/conf.d
-rw-r--r-- 1 root root 1284 Feb 8 2022 conf/initramfs.conf
-rw-r--r-- 1 root root 81 Nov 21 12:45 conf/modules
drwxr-xr-x 2 root root 0 Nov 21 12:44 cryptroot
-rw-r--r-- 1 root root 0 Nov 21 12:44 cryptroot/crypttab

ああ、なるほどcpioのファイル2つとzstandardで圧縮したcpioをcatしただけなんだ。スクリプトを作る必要もなかった。

この記事が気に入ったらサポートをしてみませんか?