泪组词有哪些:initrd是什么?_我的扩展内存<<工作 学习 生活

来源:百度文库 编辑:偶看新闻 时间:2024/04/27 02:00:05

initrd是什么?
-------------------------------------------------
    initrd = init ramdisk,是一个启动时存在于内存的文件系统。initrd的最初的目的是为了把kernel的启动分成两个阶段:在kernel中保留最少最基本的启动代码,然后把对各种各样硬件设备的支持以模块的方式放在initrd中,这样就在启动过程中可以从initrd所mount的根文件系统中装载需要的模块。这样的一个好处就是在保持kernel不变的情况下,通过修改initrd中的内容就可以灵活的支持不同的硬件。在启动完成的最后阶段,根文件系统可以重新mount到其他设备上。

Linux启动一定要用initrd么?
-------------------------------------------------
   如果把需要的功能全都编译到内核中(非模块方式),只需要一个内核文件即可。initrd能够减小启动内核的体积并增加灵活性,如果你的内核以模块方式支持某种文件系统(例如ext3,UFS),而启动阶段的驱动模块放在这些文件系统上,内核是无法读取文件系统的,从而只能通过initrd的虚拟文件系统来装载这些模块。这里有些人会问: 既然内核此时不能读取文件系统,那内核的文件是怎么装入内存中的呢?答案很简单,Grub是file-systemsensitive的,能够识别常见的文件系统。

如何察看initrd的内容?
-------------------------------------------------
#cd /lib/modules/`uname -r`
#mkinitrd /tmp/initrd.`uname -r`.img   `uname -r`
#cd /tmp
#mv initrd.`uname –r`.img initrd.`uname –r`.img.gz(initrd使用gzip压缩,如果不改名字的话,后面无法解压缩)
#gunzip initrd.`uname -r`.img.gz
#file initrd.`uname –r`.img(不同的linux操作系统,这个文件格式有不同,在RHEL4中,这个文件是cpio的,在其他的可能是ext2的,此处使用file命令,察看格式)

如果是cpio:
#mkdir /mnt/tmp
#cd /mnt/tmp
#cpio -idmv

如果是ext2:
#mount -o loop   /tmp/initrd.`uname -r`    /mnt/tmp
#ls -al /mnt/tmp

如何修改initrd?
-------------------------------------------------
   通过上面的操作,我们可以看到initrd的内容,然后就可以修改按照要求,比如我们可以添加一个驱动进去,在上面的/mnt/tmp下面,有一个文件叫“init”或者“linuxrc”,查看/mnt/tmp中的这个文件内容即可知道启动时会装入哪些驱动程序。还可以更改其中的内容,例如,如果想增加另一种SCSI驱动aic7xxx.o进入到initrd.img,可以进行如下两种操作:

#cd /mnt/tmp
#vi linuxrc 加上一行“ insmod /lib/aic7xxx.o”
#cp /lib/modules/`uname -r`/scsi/aic7xxx.o lib/
#cd /
#umount /mnt/tmp
#dd if=/tmp/ininrd.`uname –r`.img | gzip > /boot/initrd2.img

或者:
#cd /mnt/tmp
#vi init加上一行 insmod /lib/aic7xxx.o
#cp /lib/modules/`uname -r`/scsi/aic7xxx.o lib/
#cd /mnt/tmp
#find –print |cpio –ov>/tmp/initrd2.img (find的时候最好不要用绝对路径,否则cpio出来的文件以后解压缩也会解到这个绝对路径上面)
#gzip /tmp/initrd2.img
#mv /tmp/initrd2.img.gz /boot/initrd2.img
至此,新的initrd文件initrd2.img中就包含了aic7xxx的驱动程序了


再将其改名拷贝至/boot目录,重启就可以观察修改后的效果。重启后无法成功引导。这是因为生成的initrd.img不对。解决如下:
生成initrd
find . | cpio -o -H newc | gzip > /mnt/sda1/boot/initrd.img-2.6.18-4-686
(注:-H newc 是必须的,否则内核会认为是ramdisk,而不是initramfs)