如何解壓縮ubuntu 18.04的initrd然後再打包?

如何解壓縮ubuntu 18.04的initrd然後再打包?

我用binwalk解壓了ubuntu 18.04的initrd但沒有解壓縮包

command used #  sudo binwalk initrd
===========
result:
==========
DECIMAL         HEX             DESCRIPTION
-------------------------------------------------------------------------------------------------------
0               0x0             ASCII cpio archive (SVR4 with no CRC), file name: "."
112             0x70            ASCII cpio archive (SVR4 with no CRC), file name: "kernel"
232             0xE8            ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86"
356             0x164           ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode"
488             0x1E8           ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode/AuthenticAMD.bin"
28072           0x6DA8          ASCII cpio archive (SVR4 with no CRC), file name: "TRAILER!!!"
28672           0x7000          ASCII cpio archive (SVR4 with no CRC), file name: "kernel"
28792           0x7078          ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86"
28916           0x70F4          ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode"
29048           0x7178          ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode/.enuineIntel.align.0123456789abc"
29212           0x721C          ASCII cpio archive (SVR4 with no CRC), file name: "kernel/x86/microcode/GenuineIntel.bin"
2440880         0x253EB0        ASCII cpio archive (SVR4 with no CRC), file name: "TRAILER!!!"
===========

它在目標資料夾中沒有給出任何內容

# file initrd 
initrd: ASCII cpio archive (SVR4 with no CRC)

我嘗試使用 cpio 命令提取,

build@###
:/source/build/1.0.5.00206/nm-gii/software/CD/build/initrd$ sudo cpio -i -F /source/build/1.0.5.00206/nm-gii/software/CD/build/extract-cd/casper/initrd
56 blocks
build@###:/source/build/1.0.5.00206/nm-gii/software/CD/build/initrd$ ll
total 12
drwxr-xr-x 3 root root 4096 Jan 15 05:36 ./
drwxr-xr-x 5 root root 4096 Jan 15 05:01 ../
drwxr-xr-x 3 root root 4096 Jan 15 05:36 kernel/
build@###:/source/build/1.0.5.00206/nm-gii/software/CD/build/initrd$

所以所有的文件仍然用這個提取。

答案1

對於 Ubuntu,至少是較新的版本,您可以使用命令lsinitramfs <file>來檢查和unmkinitramfs <file> <target directory>提取。

答案2

initrd 格式可以是一些內容的串連。即cpio檔案,也可以是檔案系統映像。看文件

選項1

對於dracut創建的initrds,可以使用lsinitrd --unpackdracut自帶的來提取。

選項2

另一種選擇是使用skipcpiodracut 附帶的工具。看到這個回答

/usr/lib/dracut/skipcpio $your-initrd-img | zcat | cpio -id --no-absolute-file-names

選項3

另一個選擇是使用binwalkcpio 或其他 initrd 部分。看到這個回答

選項4(可能是你所要求的)

但遍歷initrd、提取並修改的最佳答案是這樣的: https://unix.stackexchange.com/a/607996/14907

有了它,您可以更輕鬆地僅提取要修改的部分,然後以與解包相同的方式重新包裝它們。它不是一個全面的指南,但如果您有動力的話,應該會為您提供大部分內容。

相關內容