2008年1月3日星期四

initrd.img:内核初始化过程中使用的内存文件系统

initrd.img是一个gzipcpio双重打包的文件,如果你把它解开就会发现,其实它包含了一个微型的根文件系统:

mkdir initrd
cd initrd
cp /boot/initrd.img-2.6.22-14-generic ..
zforce ../*
gunzip ../initrd.img-2.6.22-14-generic.gz
cpio -i -F ../initrd.img-2.6.22-14-generic
ls
其中包含了一些常用的命令,许多脚本,内核模块等等。内核在启动过程中,会将它解压到内存,建立一个临时的用户环境,利用这些工具处理一些必须在这个阶段完成的任务,如加载根设备驱动等等。

重新打包可以这样:
find . | cpio -o -H newc | gzip -9 > ../initrd.gz
Ubuntu上建议用户使用update-initramfs来维护和生成initrd.img,高级用户可以使用mkinitramfs。以前的标准工具mkinitrd似乎不再被使用。其实它们都是一些脚本。
sudo update-initramfs -u -k all
我们可以通过Grub或Lilo给内核传递参数,告诉它应该使用哪一个initrd.img文件:
initrd /boot/initrd.img-2.6.22-14-generic

没有评论: