主题:【原创】如何解开Ubuntu的initrd.img和Gentoo的initramfs -- wsxx
解压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比较熟练的人看了上面的链接就知道自己做了,我是琢磨了一番才搞明白的。新手们可能还需要解释一番,我回头再写一个详细一点的解释和示例。
(待续)
- 相关回复 上下关系8
🙂好文,做个极好 1 小愚 字0 2006-09-01 12:01:09
🙂【后记】我们应该养成好习惯 3 wsxx 字1127 2006-08-30 10:38:49
🙂很佩服您的钻研精神 1 泰让 字3 2006-09-01 10:18:48
🙂(续二)解压Gentoo中的initramfs的方法
🙂(续三)解压Gentoo中的initramfs的详细方法 3 wsxx 字1737 2006-08-30 10:03:02
😁静心学习,花,呵呵,一花双宝,好爽! 1 住在乡下 字0 2006-08-29 20:48:55
🙂(续一)解压Ubuntu的initrd.img的方法 3 wsxx 字2675 2006-08-28 04:19:13
🙂受教了,花催 1 住在乡下 字0 2006-08-29 01:53:30