grub是一个很强大引导加载器,很多的Redhat发行版使用的都是grub进行引导,但是grub有一个缺陷就是grub最大只能支持的1T的硬盘,在进入grub时,可以看到有个纯红色的背景图片,但是在MBR中存放grub一共就446字节,但是一个图片的大小有可能就大于446字节,所以这张图片肯定不会在grub中,所以,grub的运行机制是采用了两段式设计,grub的第一段放在MBR中,其作用是是引导grub的第二段,在第一段和第二段的中间其实还有一段,其大致作用可以理解为用来加载文件系统,和识别文件系统。在/boot/grub中可以看到很多结尾"1_5"的文件,这些就是grub的中间段所要加载的文件。其实grub也有自己的配置文件--"grub.conf";
下面打开grub.conf查看一下其中的内容:# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/vol0/root # initrd /initrd-version.img #boot=/dev/sda default=0 timeout=5 splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux Server (2.6.18-164.el5) root (hd0,0) kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/vol0/root rhgb quiet initrd /initrd-2.6.18-164.el5.img title Install Red Hat Enterprise Linux 5 root (hd0,0) kernel /vmlinuz-5 ks=http://192.168.0.254/workstation.cfg ksdevice=eth0 noipv6 initrd /initrd-5 以#开头的都是注释信息 一、default:指的是默认启动的哪个,可以看到下面有两个title,其中第一个title表示为0,第二个title表示为1,所以这里默认启动的就是第一个title; 二、timeout:指的是超时时间,即在该时间内没有进行其他操作,则启动默认启动项; 三、spalashp_w_picpath:指的是进入grub时的背景图片,"(hd0,0)":这里指的是第一块磁盘的第一个分区,也是grub能够识别的磁盘格式,无论任何种类的磁盘,grub都将其识别为hd;/grub/splash.xpm.gz:指的是在grub中的那张图片,在grub启动时,内核还没有启动,所以文件系统还不存在,所以根也就不存在,所以就写作/grub而不写作/boot/grub;这里要说的是,grub只支持xpm格式的图片,而且支持的颜色位数为14位; 四、hiddenmenu:指的是是否要隐藏隐藏菜单; 五、title:后面跟的则是要启动的系统名字,当然这个根据个人需要,你也可以随便的命名 root:指的是grub使用的根,也是文件访问的起始点 kernel:指定内核文件是谁;在这里由于root已经指定了grub的根,所以这里直接指定/kernel;ro:只读;root:这里的root指的是操作系统的根文件系统;rhgb:指的是rehat的一个边框,这个可有可无;quiet:指的是静默模式; initrd:内核需要读取文件系统,读文件系统时需要加载驱动,但是驱动在lib中,而lib在根下,去根下找需要加载驱动,所以这样就无法就解决了吗?其实initrd就是做这样的功能,它也是一个根,其实它也算是一个微型的Linux,它不提供其他功能,它只提供/lib/modules,所以内核加载驱动时去initrd中加载,Initrd提供了驱动那么内核就可以访问根了,访问这个文件系统了,但是这个initrd又不是必须的,当需要的驱动在内核中已经存在时,就不在需要initrd了;"/initrd-2.6.18-164.el5.img":因为内核中没有逻辑卷的驱动,而这个文件中就存在逻辑卷的驱动 grub的安装方法:法1:手动安装 步骤: 一、新增加一块硬盘,创建一个新的分区,并将其格式化#echo " n p 1 +100M w" | fdisk /dev/sdb #mkfs -t ext3 /dev/sdb1 二、将该新分区挂载#mount /dev/sdb1 /mnt/boot 三、创建grub目录#mkdir /mnt/boot/grub #cd /usr/share/grub 这里的grub是一个隐藏的目录,所以需要先进入#cd i386-redhat/ 复制当前目录中的所有文件到/mnt/boot/grub/#cp ./* /mnt/boot/grub/ 四、卸载/dev/sdb1#umount /dev/sdb1 五、安装grub#cd #grub grub>root (hd1,0) grub>setup (hd1) grub>quit 并且在grub下生成了一个grub.conf文件,这样就强制安装了grub法2、使用grub-install安装 步骤: 一、新增加一块硬盘,创建一个新的分区,并将其格式化#echo " n p 1 +100M w" | fdisk /dev/sdb #mkfs -t ext3 /dev/sdb1 二、将该新分区挂载#mount /dev/sdb1 /mnt/ 三、创建boot目录#mkdir /mnt/boot 四、安装grub#grub-install --root-directory=/mnt /dev/sbd1 在此它会自动在boot目录下创建一个grub目录并且创建相关文件 这样grub可以通过两种方法进行创建,我们只需要将这两块已经创建好grub的硬盘放入PC中,可以看到出现了grub的提示符,如果有内核那么就可以进入系统了。好了到此grub就创建成功!