initrd (boot loader initialized RAM disk)

  Linux2.6 内核支持两种格式的 initrd,一种是 linux2.4 内核那种传统格式的文件系统镜像-image-initrd,它的制作方法同 Linux2.4 内核的 initrd 一样,其核心文件就是 /linuxrc.另外一种格式的 initrd 是 cpio 格式的,这种格式的 initrd 从 linux2.5 起开始引入,使用 cpio 工具生成,其核心文件不再是 /linuxrc,而是 /init,本文将这种 initrd 称为 cpio-initrd.尽管 linux2.6 内核对 cpio-initrd和 image-initrd 这两种格式的 initrd 均支持,但对其处理流程有着显著的区别。

第一种:gzip处理initrd.img

  如果initrd.img是经过用gzip -9进行压缩过的ramdisk文件。直接用#mount initrd.img /mnt -o loop会失败,并报告你指定一个文件类型。 要先将其进行解压缩,然后再mount。具体操作如下:

cd /boot
mv initrd.img initrd.gz
gunzip initrd.gz /tmp/initrd
mv /tmp/initrd /tmp/initrd.img
mount /tmp/initrd.img /mnt/ -o loop

反过来生成initrd.img过程如下:

mkcramfs /tmp/ /boot/newinitrd
gzip - /boot/newinitrd
mv /tmp/newinitrd.gz /tmp/initrd.img

第二种:cpio处理initrd.img

  2.6内核中的initrd.img采用cpio压缩,不再是2.4内核使用的ext2格式,无法使用mount -o loop 挂载。需要使用gunzip解压缩,然后再使用cpio解包

cp /boot/initrd-2.6.-prep.img initrd.img.gz #必须先将initrd重名为initrd.gz,否则gunzip工具无法识别该文件
gunzip initrd.img.gz
mkdir initrd
mv initrd.img initrd
cd initrd
cpio -ivmd < initrd.img  # -v: List the files processed.
              # -i: Run in copy-in mode, cpio copies files out of an archive or list the archive contents.
              # -m: Retain previous file modification times when creating files.
              # -d: Create leading directories where needed.

  通过以上命令就将initrd.img解压了,现在就可以对其进行编辑,完成后使用以下命令重新压制

find . | cpio -o -H newc | gzip > /mnt/sda1/boot/initrd-2.6.-prep.img  # -o: Create the archive.
                                           # -H newc: Use archive format "newc", the "newc" format is The new (SVR4) portable format, which supports file systems having more than 65536 i-nodes.

(注:-H newc 是必须的,否则内核会认为是ramdisk,而不是initramfs)

gzip ../initrd.new.img

【转载】关于initrd.image的处理-LMLPHP

参考文献:

[1] http://blog.csdn.net/jiazhen/article/details/4022800

05-11 13:02