Initramfs
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
如何獲取所有存檔內容?
當您安裝了 intel-microcode(您有)和/或 amd64-microcode 時,initrd 包含兩個連接的圖像。第一個圖像只包含微碼。第二個包含其他所有內容。您的 cpio 命令只是提取第一個。
最簡單的方法是使用
unmkinitramfs
initramfs-tools >= 0.126,它包含在 Ubuntu 18.04(仿生)和更新版本中。在 xenial 上,您可以複製https://salsa.debian.org/kernel-team/initramfs-tools並unmkinitramfs
從此目錄呼叫。