GRUB?是引导装入器(boot?loader)?--?它负责装入内核并引导?Linux?系统。GRUB?还可以引导其它操作系统,如?FreeBSD、NetBSD、OpenBSD、GNU?HURD?和?DOS,以及?Windows?95、98、NT?和?2000。尽管引导操作系统看上去是件平凡且琐碎的任务,但它实际上很重要。如果引导装入器不能很好地完成工作或者不具有弹性,那么就可能锁住系统,而无法引导计算机。另外,好的引导装入器可以给您灵活性,让您可以在计算机上安装多个操作系统,而不必处理不必要的麻烦。?
GRUB?是一个很棒的boot?loader。它有许多功能,可以使引导过程变得非常可靠。例如,它可以直接从?FAT、minix、FFS、ext2?或?ReiserFS?分区读取?Linux?内核。这就意味着无论怎样它总能找到内核。另外,GRUB?有一个特殊的交互式控制台方式,可以让您手工装入内核并选择引导分区。这个功能是无价的:假设?GRUB?菜单配置不正确,但仍可以引导系统。哦,对了?--?GRUB?还有一个彩色引导菜单。?
更令人惊讶的是,这是一个自由软件!!!?
##################?
#?GRUB菜单?#?
##################?
先来看一个例子,这是位于/boot/grub/目录下的menu.lst文件。?
此文件将在开机是产生一个菜单,包含有Debian?linux,Windows2000,RedHat?linux和?Mandrake?linux,共四个选择项。我一共分了8个区,一个fat16(0x6),一个ntfs(0x7),三个ext2fs分区(0x83),一个swap分区(0x82)。ntfs用来装win2000,三个ext2fs装了三个linux,c盘fat16分区没有装任何东西。?
#例子由此开始?
######################?
#?#?
#?一个GRUB?configure?的例子?#?
#?#?
######################?
timeout?10?
default?2?
#?--?Debian?linux?
title?Debian?linux?
root?(hd0,2)?
kernel?/boot/vmlinuz-2.2.18?root=/dev/hda3?ro?
initrd?/boot/initrd-2.2.18.gz?
#?--?Debian?END?
#?--?Windows?菜单选项?
title?Windows2000?
root?(hd0,0)?
chainloader?+1?
#?--?Winddows?结束?
#?--?RedHat?linux?菜单选项?
title?RedHat?linux?
root?(hd0,?
chainloader?+1?#?在硬盘主引导分区装了lilo,所以也用了chainloader。?
#?--?RedHat?linux?结束?
#?--?Mandrake?linux?菜单选项?
title?Mandrake?linux?
root?(hd0,5)?
kernel?/boot/vmlinuz-2.4.3-20mdk?root=/dev/hda6?ro?
initrd?/boot/initrd-2.4.3-20mdk.img?
#?--?Mandrake?linux?结束?
#例子到此结束?
以符号井"#"开头的行表示被注释掉,没有任何意义。?
timeout表示默认等待的时间,这儿是10秒钟。超过10秒,用户还没有作出选择的话,系统将自动选择默认的操作系统。?
默认的操作系统就是由default控制的。default后加一个数字n,表明是第n+1个。需要注意的是,GRUB中,计数是从0开始的,第一个硬盘是hd0,第一个软驱是fd0,等等。所以,default?2?表示默认的操作系统在这儿是?Redhat?linux。?
接下来,正如你所想象的,title表示的是"Debian?linux"菜单项。root?(hd0,2)表示第一个硬盘,第三个分区。这儿的root?于linux的root分区及其不同,此root非彼root也!?
在?Linux?中,当谈到?"root"?文件系统时,通常是指主?Linux?分区。但是,GRUB?有它自己的?root?分区定义。GRUB?的?root?分区是保存?Linux?内核的分区。这可能是您的正式?root?文件系统,也可能不是。我们讨论的是?GRUB,需要指定?GRUB?的?root?分区。进入?root?分区时,GRUB?将把这个分区安装成只读型,这样就可以从该分区中装入?Linux?内核。GRUB?的一个很"酷"的功能是它可以读取本机的?FAT、FFS、minix、ext2?和?ReiserFS?分区。?
到目前为止,您可能会感到一点疑惑,因为?GRUB?所使用的硬盘/分区命名约定与?Linux?使用的命名约定不同。在?Linux?中,第一个硬盘的第五个分区称作?"hda5"。而?GRUB?把这个分区称作?"(hd0,4)"。GRUB?对硬盘和分区的编号都是从?0?开始计算。另外,硬盘和分区都用逗号分隔,整个表达式用括号括起。现在,可以发现如果要引导?Linux?硬盘?hda5,应输入?"root?(hd0,4)"。?
知道了内核在哪儿,还要具体指出哪个文件是内核文件,这就是kernel的工作。?
kernel?/boot/vmlinuz-2.2.18?root=/dev/hda3?ro说明/boot/vmlinuz-2.2.18?就是要载入的内核。后面的都是传递给内核的参数。root=/dev/hda3就是linux的硬盘分区表示法,ro是以readonly的意思。?
initrd用来初始的linux?image,并设置相应的参数。?
是不是感觉很简单啊!再来看一看windows的定义段吧。?
这里,我添加了一项来引导?Windows2000。要完成此操作,GRUB?使用了"链式装入器"(chainloader)。链式装入器从分区?(hd0,0)?的引导记录中装入?win2000?自己的引导装入器,然后引导它。这就是这种技术叫做链式装入的原因?--?它创建了一个从引导装入器到另一个的链。这种链式装入技术可以用于引导任何版本的?DOS?或?Windows。?
我的RedHat?linux在硬盘主引导分区装了lilo,所以也用了chainloader。?
GRUB的配置文件要简单就这么简单,如果你要更个性化一点,试一试把"color?light-gray/blue?"加在default语句的下面,下一次启动GRUB时,看看有什么变化,再试一试"color?light-blue/red",惊喜吗??有趣吧!?
######################?
#?GRUB的交互性?#?
######################?
GRUB?最好的优点之一就是其强健的设计?--?在不断使用它时请别忘了这点。如果更新内核或更改它在磁盘上的位置,不必重新安装?GRUB。事实上,如有必要,只要更新?menu.lst?文件即可,一切将保持正常。?
只有少数情况下,才需要将?GRUB?引导装入器重新安装到引导记录。首先,如果更改?GRUB?root?分区的分区类型(例如,从?ext2?改成?ReiserFS),则需要重新安装。或者,如果更新?/boot/grub?中的?stage1?和?stage2?文件,由于它们来自更新版本的?GRUB,很有可能要重新安装引导装入器。其它情况下,可以不必理睬!?
GRUB的最大的特点就是交互性特别强。在开机时,按一下"c",将进入GRUB?控制台。显示如下:?
GRUB?version?0.5.96.1?(640K?lower?/?3072K?upper?memory)?
[?Minimal?BASH-like?line?editing?is?supported.?For?the?first?word,?TAB?
lists?possible?command?completions.?Anywhere?else?TAB?lists?the?possible?
completions?of?a?device/filename.?]?
grub?
欢迎使用?GRUB?控制台。现在,再研究命令:?
我将通过GRUB?控制台绕过lilo来启动RedHat?linux,?
grub?root?(h?
现在,按一次?Tab?键。如果系统中有多个硬盘,GRUB?将显示可能完成的列表,从?"hd0"?开始。如果只有一个硬盘,GRUB?将插入?"hd0,"。如果有多个硬盘,继续进行,在?("hd2")?中输入名称并在名称后紧跟着输入逗号,但不要按?Enter?键。部分完成的?root?命令看起来如下:?
grub?root?(hd0,?
现在,继续操作,再按一次?Tab?键。GRUB?将显示特定硬盘上所有分区的列表,以及它们的文件系统类型。在我的系统中,按?Tab?键时得到以下列表:?
grub?root?(hd0,?(tab,按tab一下键)?
Possible?partitions?are:?
Partition?num:?0,?Filesystem?type?is?fat,?partition?type?0x6?
Partition?num:?2,?Filesystem?type?is?ext2fs,?partition?type?0x83?
Partition?num:?4,?Filesystem?type?unknown,?partition?type?0x7?
Partition?num:?5,?Filesystem?type?is?ext2fs,?partition?type?0x83?
Partition?num:?6,?Filesystem?type?is?fat,?partition?type?0xb?
Partition?num:?7,?Filesystem?type?is?fat,?partition?type?0xb?
Partition?num:?8,?Filesystem?type?is?ext2fs,?partition?type?0x83?
Partition?num:?9,?Filesystem?type?unknown,?partition?type?0x82?
如您所见,GRUB?的交互式硬盘和分区名称实现功能非常有条理。这些,只需要好好理解?GRUB?新奇的硬盘和分区命名语法,然后就可以继续操作了?
grub?root?(hd0,?
现在已安装了?root?文件系统,到装入内核的时候了?
grub?kernel?/boot/vmlinuz-2.4.2?root=/dev/hda5?ro?
[Linux-bzImage,?setup=0x1200,?size=0xe1a30]?
您已经安装了?root?文件系统并装入了内核。现在,可以引导了。只要输入?"boot",Linux?引导过程就将开始。是不是很cool啊,GRUB的menu.lst更像一个linux下的脚本程序。?
#####################?
#?GRUB启动盘?#?
#####################?
要制作引导盘,需执行一些简单的步骤。首先,在新的软盘上创建?ext2?文件系统。然后,将其安装,并将一些?GRUB?文件复制到该文件系统,最后运行?"grub"?程序,它将负责设置软盘的引导扇区。准备好了吗??
将一张空盘插入?1.44MB?软驱,输入:?
#?mke2fs?/dev/fd0?
创建了?ext2?文件系统后,需要安装该文件系统:?
#?mount?/dev/fd0?/