我们在安装新内核的时候,通常都会编辑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/initrd
进入/mnt/initrd目录,我们就可以看到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脚本的能力才行。
FAQ
1. mkinitrd ***.img
不加参数直接生成的文件中的模块是来自于路径 /lib/modules/..... 还是/usr/src/kernel/.....
2.6 kernel下是 /lib/modules/
2.
阅读(995) | 评论(0) | 转发(0) |