当通常的cpio -i -m产生乱码时,如何提取initrd?

我试图按照这里的指示https://superuser.com/questions/1134160/how-to-get-old-linux-versions-to-boot-after-p2v-on-vmware获得另一个P2Vd旧的Linux系统引导,但这次的发行版是RedHat 7.3。 跟踪了一个合适的安装ISO,我已经成功地安装了一个新的RH7.3,现在正在尝试从initrd中提取文件,并将其与失败的启动P2V版本相结合,并构build一个新的initrd。

但是当我跑步

gunzip < initrd-2.4.18-3.smp.img |cpio -i -m 

它回应

 cpio: warning: skipped 485423 bytes of junk cpio: warning: archive header has reverse byte-order cpio: premature end of file 

然后用文件权限c--S--S---写入一个名为?lyyPjye?"的文件(除了?lyyPjye?"和e是扩展的ASCII字符)

假设这将是一个相当简单的陷阱我尝试了谷歌search,在这里search,cpio,initrd,颠倒字节顺序的各种组合,但除rhel5系统提取rhel6 rpms问题的引用之外,我没有发现任何提及。 这是rhel7.3试图提取自己的initrd文件,所以版本不匹配不应该进入它。

我该如何解决这个问题,以后需要什么特殊的技术来重buildinitrd?

我认为你的内核正在使用一个实际的(和过时的)initrd:init RAM DISK。 不是现代的只保留旧名称的initramfs。 所以它不是一个cpio档案,而是一个完整的文件系统磁盘映像。

你可以尝试使用它来尝试mount --loop它放在某个地方。 文件系统可以是任何东西(ext2,cramfs …)

如果是r / w,编辑起来很容易,如果是r / o会更困难。

这里描述了: https : //www.kernel.org/doc/Documentation/initrd.txt