我 们在安装新内核的时候,通常都会编辑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、gunzip 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脚本的能力才行。