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

当常用的 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 版本中的文件合并,并构建新的 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

然后写入一个名为?lyyPjye?"(ys 和 e 是扩展 ASCII 字符)的文件,并赋予其文件权限c--S--S---

假设这是一个相当简单的问题,我尝试谷歌搜索,并在这里搜索各种 cpio、initrd、反向字节顺序的组合,但除了提到在 rhel5 系统上提取 rhel6 rpm 的问题外,我没有找到任何提及。这是 rhel7.3 试图提取其自己的 initrd 文件,因此版本不匹配不应该出现。

我该如何解决这个问题?之后是否需要什么特殊技术来重建 initrd?

答案1

我认为您的内核正在使用实际的(且已过时的)initrd:init RAM DISK。不是仅保留旧名称的现代 initramfs。因此,它不是 cpio 存档,而是文件系统的完整磁盘映像。

您可以尝试用 gunzip 压缩它,然后尝试将mount --loop它放到某个地方。文件系统可以是任何文件系统(ext2、cramfs ...)

如果是 r/w,则编辑起来很容易,如果是 r/o,则比较困难。

那里有描述: https://www.kernel.org/doc/Documentation/initrd.txt

相关内容