Linux

為什麼我的 initrd 只有一個目錄,即“核心”?

  • May 17, 2021

我正在使用 debian live-build 在可啟動系統上工作。在這個過程結束時,我得到了用於引導實時系統的典型文件:一個 squashfs 文件、一些 GRUB 模組和配置文件,以及一個 initrd.img 文件。

我可以使用這些文件很好地啟動,通過將 initrd 傳遞給核心

initrd=/path/to/my/initrd.img

在引導載入程序命令行上。但是當我嘗試檢查我的 initrd 圖像的內容時,如下所示:

$file initrd.img
initrd.img: ASCII cpio archive (SVR4 with no CRC)
$mkdir initTree && cd initTree
$cpio -idv < ../initrd.img

我得到的文件樹如下所示:

$tree --charset=ASCII
.
`-- kernel
   `-- x86
       `-- microcode
           `-- GenuineIntel.bin

實際的文件系統樹在哪裡,典型的 /bin , /etc, /sbin …包含引導期間使用的實際文件?

給出的 cpio 塊跳過方法不能可靠地工作。那是因為我自己獲得的 initrd 圖像沒有在 512 字節邊界上連接兩個檔案。

相反,請執行以下操作:

apt-get install binwalk
legolas [mc]# binwalk initrd.img 
DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             ASCII cpio archive (SVR4 with no CRC), file name: "kernel", file name length: "0x00000007", file size: "0x00000000"
120           0x78            ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86", file name length: "0x0000000B", file size: "0x00000000"
244           0xF4            ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode", file name length: "0x00000015", file size: "0x00000000"
376           0x178           ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode/GenuineIntel.bin", file name length: "0x00000026", file size: "0x00005000"
21004         0x520C          ASCII cpio archive (SVR4 with no CRC), file name: "TRAILER!!!", file name length: "0x0000000B", file size: "0x00000000"
21136         0x5290          gzip compressed data, from Unix, last modified: Sat Feb 28 09:46:24 2015

對我來說使用不在 512 字節邊界上的最後一個數字 (21136):

legolas [mc]# dd if=initrd.img bs=21136 skip=1 | gunzip | cpio -tdv | head
drwxr-xr-x   1 root     root            0 Feb 28 09:46 .
drwxr-xr-x   1 root     root            0 Feb 28 09:46 bin
-rwxr-xr-x   1 root     root       554424 Dec 17  2011 bin/busybox
lrwxrwxrwx   1 root     root            7 Feb 28 09:46 bin/sh -> busybox
-rwxr-xr-x   1 root     root       111288 Sep 23  2011 bin/loadkeys
-rwxr-xr-x   1 root     root         2800 Aug 19  2013 bin/cat
-rwxr-xr-x   1 root     root          856 Aug 19  2013 bin/chroot
-rwxr-xr-x   1 root     root         5224 Aug 19  2013 bin/cpio
-rwxr-xr-x   1 root     root         3936 Aug 19  2013 bin/dd
-rwxr-xr-x   1 root     root          984 Aug 19  2013 bin/dmesg

引用自:https://unix.stackexchange.com/questions/163346