initrd镜像文件的作用与制作

我们在安装新内核的时候,通常都会编辑lilo.conf 和grub.conf
文件。里面有一段“initrd=/boot/initrd-***.img”(其中的***表示内核的版本号)的我们都很少会注意到,有时候还会发现这
一行不要也可以正常开机。那这个initrd***.img究竟是用来干什么的呢?
其实initrd***.img是一个镜像文件,类似ramdisk,把一段程序打包到img里,然后在开机的时候在内存里开辟一段区域,一般是
2m,释
放到那里运行,都是一些初始化的程序,比如sisc_mod、ext3、sd_mod等模块和insmod、nash等命令。不同内核,初始化的img可
以相同,也可以不同,如果没有,可以在grub.conf里加上no initrd,它就跳过initrd的检测和执行了,以前好像就没有,后来才有的。
它的作用是在没有mount
/分区以前,系统要执行一些操作,比如挂载scsi驱动,它就把initrd释放到内存里,作一个虚拟的/,然后执行其根目录下的一个脚本
“linuxrc”,运行insmod和nash命令挂装模块。为什么有的时候我们在lilo或grub的配置文件中不加入该行都可以正常开机呢?这是因
为我们一般的PC机都没有使用scsi硬盘等需要先加载其驱动的设备,所以就算没有initrd***.img也可以正常开机。但是如果我们要在服务器上
为其编译新内核那就一定不要忘记也为其新建一个initrd文件呀!
好,下面来看看如何查看initrd***.img里面的内容和如何为你的新内核创建一个新的initrd.img文件。
查看initrd.img:
initrd***.img虽然后缀是“img”,但其实它是一个gz格式的文件,我们可以先把它解压,然后载挂装到目录下:
1、cp initrd.img initrd.gz
2、guzip initrd.gz
3、mount -o loop initrd /mnt/floppy
进入/mnt/floppy目录,我们就可以看到initrd***.img文件的庐山真面目了。
制作initrd文件
当我们编译了一个新的内核,也不要忘了为我们的scsi设备做一个新的initrd镜像:
语法:
mkinitrd 文件名 内核的目录名
示例:
mkinitrd initrd-2.4.19.img 2.4.19
initrd-2.4.19.img文件是自己任意取的,但最好对应自己的内核版本号。
2.4.19是在/lib/modules中的目录名,对应内核的版本。
当然,我们也可以在挂装了initrd***.img文件后直接添加模块到/lib目录中,然后修改linuxrc脚本让其开机进行挂装。但必须具备一定的shell脚本的能力才行。
IBM参考文档:
http://www-128.ibm.com/developerworks/cn/linux/l-k26initrd/index.html

你可能感兴趣的:(linux)