西西河

主题:【原创】如何解开Ubuntu的initrd.img和Gentoo的initramfs -- wsxx

共:💬13 🌺37
全看分页树展 · 主题 跟帖
家园 (续二)解压Gentoo中的initramfs的方法

解压Gentoo的initramfs方法,与遵循常规方法的Ubuntun略有不同。

我们先来看看问题在哪里:

cp /boot/initramfs-genkernel-x86-2.6.17-gentoo-r4 /initramfs.gz # 复制到当前家目录,简化文件名

gunzip initramfs.gz # gunzip解压

mkdir initrd #建立一个新目录

cd initrd #进入新目录

cpio -i -d < ../initramfs #解开上层目录中的initramfs

也可以这样:cat ../initramfs |cpio -id

可是结果是显示5 blocks,也就是说解压出来的内容一共才有5K大小!这显然是有问题的,原始的initramfs.gz有2M多,gunzip解压之后有4M多,可是怎么可能cpio解压之后只有5K呢?Ubuntu解压出来之后有12M多呢。

这个问题不解决,修改init是没有用的。曾经修改之后再打包压缩回去,剩下不到1K的内容。如果拿它去启动,不知道会是什么样子。

被这个问题困扰的人不多也不少,在网上遇到问题求问的不少,有些人似乎找到了答案,但是也不是最终正确的。例如有人觉察到cpio打开initramfs之后遇到TRAILER解包就结束了,所以来了个我称作的“二次解包法”:

cat ../initramfs |(cpio -id;cpio -id)

这样可以解出343 blocks。我第一次以为这样算是可以了,后来才明白 1个block其实只有1K,343K是比5K大了不少,但是距离成千上万K的预期值还相去甚远。

继续在网上翻,在几乎绝望的状态之下,很偶然地点击了google搜索结果第n页的一个不起眼的链接,里面竟然有正解!

外链出处

对于Linux比较熟练的人看了上面的链接就知道自己做了,我是琢磨了一番才搞明白的。新手们可能还需要解释一番,我回头再写一个详细一点的解释和示例。

(待续)

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河