我使用 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 --unpack
dracut 自带的。
选项 2
另一个选择是使用skipcpio
dracut 附带的工具。请参阅此回答。
/usr/lib/dracut/skipcpio $your-initrd-img | zcat | cpio -id --no-absolute-file-names
选项 3
另一种选择是使用binwalk
再次使用 cpio 或其他任何 initrd 部分。请参阅此回答。
选项 4(可能正是你想要的)
但遍历 initrd、提取和修改的最佳答案是这样的: https://unix.stackexchange.com/a/607996/14907
有了它,您可以更轻松地提取要修改的部分,然后按照解包的方式重新打包。它不是一份全面的指南,但如果您有动力,应该会为您提供大部分内容。