一个引导加载器通常存在于系统的主硬盘驱动器中,通过它来加载linux内核跟一些需要的文件或其它操作系统到系统内存中。
在各种系统架构上运行RedHat企业Linux系统会使用不同的引导加载器,一般在X86系统架构和AMD、AMD64系统架构中使用GRUB引导器,而其它的如Intel Itanium系统架构中会使用ELILO引导器。以下所有的内容都是说明在X86系统架构下使用GRUB引导器。
GRUBCE能够在系统引导时把操作系统或内核加载到系统内存中。GRUB还能允许用户进行相应配置和定制,以适合用户自身所需。以下是GRUB的主要特性:
(1)、GRUB在X86系统的机器上提供一个真正的命令行方式,这个特性允许用户在引导相应的操作系统时为它指定一些需要加载的特殊选项。
(2)、GRUB能读ext2分区,此特点允许GRUB在每次系统引导时都能访问它的配置文件/boot/grub/grub.conf。
一、安装GRUB
如果在安装系统时没有同时安装GRUB,也可以在随后安装它,一旦安装完成,它就自动变为缺省引导器。
在安装前,请确保获得最终可用的GRUB包,或从安装盘中得到GRUB包。
安装完GRUB包后,打开一个有根(ROOT)权限的shell,然后输入命令:
/sbin/grub-install
其中为GRUB的第一阶段引导器应被安装到的位置,例如下列命令安装GRUB到主IDE通道的主IDE设备的MBR上:
/sbin/grub-install /dev/hda
在下一次启动系统时,GRUB图形化引导菜单就会在内核被加载到内存中之前出现在屏幕上。
二、GRUB Terminology
明白在GRUB中怎样参考设备是非常重要的,例如硬盘驱动器和分区。这些信息在配置GRUB引导多个操作系统时显得特别重要,以下分别介绍在GRUB中设备的表示方式。
(一)、设备名称(Device Names)
以下是存储设备在linux系统中的GRUB中所使用的格式:
指定GRUB中使用的存储设备类型,有两种通用选项:hd表示硬盘 类型,fd表示3.5英寸软盘,还有一种叫nd的类型表示从网络磁盘。
<bios-device-number>是在BIOS中设备序号,主IDE硬盘为0,第二块IED硬盘为1。在内核中也可用字符来代替这些设备数字序号,例如,hda在内核中表式hd0,hdb在内核中表示hd1,其它以此类推。
指定设备中的分区号,像<bios-device-number>一样,分区号数字也从0开始。
一些新用户要注意的是,在GRUB中的设备号,总是从0开始的,不是1,一定要记住。
给个例子:如果系统中有多于一个的硬盘驱动器,GRUB以第一块硬盘为参考为hd0,第二块硬盘为hd1,同样,GRUB以第一块硬盘中的第一个分区为(hd0,0)为参考,第二块硬盘中的第三个分区就为(hd1,2)。
以下是一些在GRUB下设备和分区的一般规则:
(1)、在GRUB中不论是IDE或SCSI,所有硬盘名称都以hd开头,fd为3.5英寸软盘。
(2)、当告诉GRUB在个别磁盘中配置MBR时,不要在磁盘名称后指定分区号。例如,hdo指定MBR在第一块磁盘上,hd3指定MBR在第四块磁盘上。
(3)、如果系统中有多块驱动设备,那么在BIOS中就应指定哪个驱动器为引导驱动器,特别是在有多种混合类型的设备时更应在BIOS中明确指出使用哪种类型的驱动器作为引导驱动器。
(二)、文件名和块列表(File Names and Blocklists)
在GRUB的配置文件中,需要为一些命令行指定要使用的文件的绝对路径在这些命令行中设备和分区的后面,它们的格式如下:
用hd、fd或nd代替,用所使用的硬盘序号代替,用文件所在的分区号代替,用设备分区上的绝对文件路径代替。
在GRUB中也可以不使用文件系统的方式来指定文件,例如,当使用链接加载方式在一个分区中加载在其中的一部分区段中的文件时,只需要提供一个在些分区中包含此文件的区段列表的位置,即一个区段中的文件可以用包含此文件的区段号来表示。以下是一个区段列表的例子:
0+50,100+25,200+1
此区段列表例子指定一个文件在分区中所使用的区段从0到49,99到124,和199。
知道如何在GRUB中使用区段列表,这对于使用链接(chain loader)加载方式加载操作系统时非常有用的。
以下这个例子,要通过用链接(chain loader)方式加载的文件在第一块硬盘中的第一个分区中的0区段:
(hd0,0) +1
以上如果用链接方式加载的文件在第一块硬盘中的第一个分区中的0区段中可以用chainloader命令来代替所要表示的驱动器和分区。例如:chainloader +1就等同于上面的(hd0,0) +1。
三、GRUB接口(GRUB Interfaces)
GRUB提供三种不同功能的接口特性,每一种接口都允许用户引导内核或其它操作系统。这些接口如下所述:(以下的接口只有在出现GRUB菜单屏幕后三秒内按下任意键才能够开始被访问)
(1)、菜单接口(menu interface)
它是GRUB的缺省接口,用来列出所安装的操作系统或已配置的内核,它们以名称方式排序。使用方向键选择一个与缺省选项不同的选项后按回车[Enter]即可引导它。如果在规定时间内没有选择,GRUB将引导缺省选项。
在此界面中按[e]键进入编辑接口或按[c]进入命令行接口。
(2)、菜单编辑接口(menu entry editor interface)
在菜单接口下按[e]键就可以进入此接口,GRUB中的所用命令行都会在此接口下显示出来,用户也可以在此接口下增加或修改这些命令行。例如,在当前行按下[o]键就会在当前行后插入一个新行,按[O]键就会在当前行的前面插入一个新行,按[e]键编辑当前行,按[d]键删除此行,当所有的改变完成后按键执行命令和引导操作系统,按[esc]键撤消所有的改变并加载标准菜单接口,按[c]键进入命令行接口。
(3)、命令行接口(command line interface)
命令行接口是GRUB接口中的一个非常重要的基本接口。在此接口下能实现许多控制功能,当输入完命令后按回车[enter]键就能执行它。这个接口也用着与shell相似的特性,包括使用[tab]键,和一些使用[ctrl]键来组合使用的快捷方式,如[ctrl]-[a]移动第一行,[ctrl]-[e]移动最后一行。还有,如方向键、[home]、[end]和[delete]这些键的使用与bash shell下作用一样。
四、接口加载顺序
当GRUB在加载它的第二阶段引导程序时,它首先查找它的配置文件,一旦发现,菜单接口屏幕就被显示出来,如果在三秒内按下任意键,GRUB就显示一个有菜单列表的菜单接口给用户选择,如果在规定时间内没有按下任何键,那么GRUB会加载在它配置文件中设定的缺省项。
如果配置文件不存在或配置文件不能读取,GRUB就加载命令行接口,允许用户键入命令来完成引导工作。
如果配置文件无效,GRUB会在屏幕上显示出错误信息并询问输入。它能帮助用户识别出错的原因,此时按下任意键会重新加载菜单接口,用户可以通过出现的错误提示,通过按[e]进入编辑模式内修改出错的行来纠正错误。如果纠正失败,GRUB报告错误信息并重新加载菜单接口。
五、GRUB命令
GRUB允许用户在其命令行界面中输入它可以执行的命令,一些命令后可以跟一些不同的选项,这些选项必须用空格字符来分别隔开。
以下是一些有用的命令:
(1)、boot:引导操作系统或通过链接方式加载最后加载项;
(2)、chainloader :为链接加载方式指定文件,如果这个文件在指定分区中的第一个扇区,可以使用区段位、+1,代替文件名,例如:chainloader +1;
(3)、displaymem:显示所使用的内存,这些信息来自BIOS。
(4)、initrd :在引导时指定初始化内存盘所使用的映像文件绝对路径。当根分区被格式化为ext3文件系统时必须加载此项。以下是一个initrd命令的例子:
initrd /initrd-2.6.13-1.52.img
(5)、install p config-file:安装GRUB到系统MBR中。
:指定需要加载的第一阶段引导程序所在硬盘和分区中的位置,例如:(hd0,0) /grub/stage1;
:指定第一阶段引导程序必须安装在哪一个磁盘中,例如:(hd0);
:指定第二阶段引导程序所在的位置,如(hd0,0) /grub/stage2;
p :此选项告诉安装命令通过指定的<config-file>来查找配置文件,例如:(hd0,0) /grub/grub.conf。
(6)、kernel ...:指定当引导操作系统时所要加载的内核文件。用内核文件在分区中的绝对位置来代替,所要加入的选项代替等,例如 root=/dev/hda5指定根分区在设备中的位置,多个选项用空格隔开分别在后列出。例如:
kernel /vmlinuz-2.4.21 root=/dev/hda5
(7)、root (,):为GRUB配置根分区和挂载此根分区,例如:root(hd0,0);
(8)、rootnoverify(,):为GRUB配置根分区,但不挂载此根分区。
其它的一些命令可以输入help --all来得到。
六、GRUB配置文件
/boot/grub/grub.conf配置文件,用来创建一个在GRUB菜单接口中的操作系统引导列表。
(1)、配置文件结构
GRUB配置文件/boot/grub/grub.conf中的命令用来为菜单接口模式设置全局参数。以下是一个红帽企业linux下使用的非常基本的GRUB菜单配置文件:
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise linux as (2.6.8-1.523)
root(hd0,0)
kernet /vmlinuz-2.6.8-1.523 ro\ root=/dev/volgroup00/logvol00 rhgb quiet
init /initrd-2.6.8-1.523.img
title windows
rootnoverify (hd0,0)
chainloader +1
此配置文件设置红帽企业linux为GRUB缺省的引导操作系统,选择时间为10S,通过改变default=0为default=1来改变缺省引导的操作系统为windows。
配置文件指令
以下是GRUB配置文件中的一些通用指令:
(1)、chainloader :为链接方式指定文件,用一个文件在分区中的绝对路径来代替,如果此文件在指定分区中的第一个扇区上,可以用chainload +1来代替。
(2)、color :允许指定在菜单接口中使用的界前景与背景颜色以及所列出项被选时颜色与没有选择时的颜色。可用如下方式设置:
color red/black green/blue
(3)、default=:指定缺省引导的操作系统或内核,以配置文件中用多少个标题项来决定一共为多少,如上所述配置文件中有两项,<interger>为0时红帽企业linux为缺省,当为1时windows为缺省。
(4)、fallback=:指定当加载缺省失败时再加载哪一个操作系统或内核。此指令一般只在多系统引导时使用。
(5)、hiddenmenu:指定在系统引导时如果用户不按任意键就隐藏菜单列表。
(6)、initrd :在系统引导时指定初始化内存盘,</path/to/initrd>为初始化内存盘的绝对路径。
(7)、kernel ...:指定当引导操作系统时所要加载的内核文件。用内核文件在分区中的绝对位置来代替,所要加入的选项代替等。
(8)、password --md5:为GRUB引导器加入MD5加密的密码保护。如果在GRUB中的全局配置项中加入此项,例如在timeout项下加入此指令并跟MD5序列,同时在每一个title项的下面加入lock命令,那么在引导时用户只有按[p]键后输入正确的密码才能引导相应的操作系统和进行GRUB编辑,也可以分别为每一个操作系统建立独立的启动密码。
(9)、root (,):为GRUB配置根分区和挂载此根分区,例如:root(hd0,0)。
(10)、rootnoverify(,):为GRUB配置根分区,但不挂载此根分区。
(11)、timeoput=:指定GRUB加载缺省选项时的时间间隔,单位为秒。
(12)、splashimage=:指定GRUB背景图片路径。
(13)、title group-title:指定在GRUB菜单接口列表中出现的操作系统或内核名称。
七、在引导时改变运行级别
当用户需要在引导时改变系统的运行级别,用下述方法进行:
(1)、当出现GRUB引导菜单屏幕时,按下任意键出现GRUB菜单接口。
(2)、在GRUB菜单接口下按[a]键出现一个增加内核命令行。
(3)、在此命令行提示符下输入要指定运行的运行级别,例如:
grub append> ro root=/dev/volgroup00/logvol00 rhgb quiet 3
在此命令行后面指定了运行级别为3。
到此, GRUB引导器已经读完,相信以后在使用GRUB时会更加明了。