우분투 18.04의 initrd 압축을 풀고 다시 압축하려면 어떻게 해야 합니까?

우분투 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

생성된 initrd 의 경우 dracut추출하려면 dracut과 함께 제공되는 것을 사용할 수 있습니다 lsinitrd --unpack.

옵션 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

이를 사용하면 수정하려는 부분만 더 쉽게 추출한 다음 포장을 푼 것과 같은 방식으로 다시 포장할 수 있습니다. 포괄적인 가이드는 아니지만 동기가 부여된 경우 대부분의 정보를 제공할 것입니다.

관련 정보