linux的启动配置文件grub启动时会在 /boot/grub 中寻找一个名字为grub.conf的配置文件,如果找不到此配置文件则不进入菜单模式而直接进入命令行模式。


    grub.conf是一个纯文字文件,您可以用任何一个文字编辑器来打开它。在SuSE LINUX 下没有/boot/grub/grub.conf这个文件,但是在/boot/grub/目录下有一个menu.lst文件,它的内容与grub.conf一样,而在CentOS6.5中有/etc/grub.conf ->/boot/grub/ grub.conf。grub.conf中每一行代表一个设置命令,如果一行的第一个字符为井号#,则这一行为注释,您可以简单地用增加或减少注释行来改变设置。 


        编辑grub.conf时,一般会有以下几行: 


timeout X     # 设置为在X秒之后自动引导默认的操作系统。


CentOS6.5中默认是timeout 5,也就是说5秒之内如果没有其他命令就启动系统。如果设成 -1,则 GRUB 会一直等待直到用户选择一个选项为止。 


 default X      # 默认启动第 X +1行选项,也就说default=0,则默认启动菜单第1行的操作系统,default=1,则启动第2行的系统,如此类推。 


 splash pathname/filename    # 指出开机画面的文件所存放的路径和文件名,如 splash /boot/logo/800x600x8.img 是指用在/boot/logo路径下的800×600像素的文件作为开机画面。 


title OSname title      # 后面的字符就是在菜单项上所看见的选项,可以写上操作系统的名字和描述,如用title BluePoint Linux, Single Mode 代表这一选项的话,是引导Thiz Linux的单用户模式。 


 


 下面结合两个系统引导描述来解释几个引导选项的意义: 


title Thiz Server, Default Mode 


root (hd0,1) 


kernel /boot/vmlinuz vga=auto root=/dev/hda2 


hd0是指第一个硬盘(主硬盘),(hd0,1)是指第一个硬盘的第二个分区。kernel /boot/vmlinuz是指出Linux内核的路径在/boot/vmlinuz中;vga=auto是设置显示模式;root=/dev/hda2 是指把第一个硬盘的第二个分区作为根挂载点。 


title Microsoft Windows 


root (hd1,0) 


chainloader (hd1,0)+1 


root (hd1,0)是指第二个硬盘(从硬盘)上的第一个分区。chainloader (hd1,0)+1 是指装入一个分区的数据然后把引导权交给它。


至于initrd文件是干什么用的呢?
大家只要做一个简单的实验就可以明白了:在开机的GRUB命令行上去掉initrd这一行,然后按CTRL+x启动,过会你会发现屏幕出现“kernel panic”的提示。
为什么会这样呢?这是因为为了减小kernle文件(vmlinuz)的大小和增强灵活性,现在的发行版如ubuntu默认将硬盘接口卡如IDE,STAT,SCSI的驱动程序以模块(modules)的形式
放在initrd文件中,GRUB中去掉initrd这一行意味着initrd中的modules没有被加载kernel就不能识别该硬盘更别提挂载上面的根文件系统了。
initrd文件的功能主要有两个:
1、提供开机必需的但kernel文件(即vmlinuz)没有提供的驱动模块(modules)
2、负责加载硬盘上的根文件系统并执行其中的/sbin/init程序进而将开机过程持续下去

GRUB将kernle加载到内存并执行,kernel在运行的后期会读取并执行initrd文件中的init脚本文件并按照其中命令逐行执行,所以要掌 握initrd的作用和硬盘上的根文件系统加载过程,全面解析init文件是很重要的。在本文的第二部分,我会将/boot/initrd文件打开,逐行 解读init文件.