好用的多系统引导装入器---GRUB的优点

发表于:2007-07-04来源:作者:点击数: 标签:
GRUB?是引导装入器(boot?loader)?--?它负责装入内核并引导? Linux ?系统。GRUB?还可以引导其它操作系统,如?FreeBSD、NetBSD、OpenBSD、GNU?HURD?和?DOS,以及? Windows ?95、98、NT?和?2000。尽管引导操作系统看上去是件平凡且琐碎的任务,但它实际上很重要

  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?/mnt/floppy?
  现在,需要创建一些目录,并将一些关键文件(原先安装?GRUB?时已安装了这些文件)复制到软盘:?
  
  #?mkdir?/mnt/floppy/boot?
  #?mkdir?/mnt/floppy/boot/grub?
  #?cp?/boot/grub/stage1?/mnt/floppy/boot/grub?
  #?cp?/boot/grub/stage2?/mnt/floppy/boot/grub?
  再有一个步骤,就能得到可用的引导盘。?
  
  在linux?bash中,从?root?用户运行"grub",该程序非常有趣并值得注意,因为它实际上是?GRUB?引导装入器的半功能性版本。尽管?Linux?已经启动并正在运行,您仍可以运行?GRUB?并执行某些任务,而且其界面与使用?GRUB?引导盘或将?GRUB?安装到硬盘?MBR?时看到的界面(即GRUB控制台)完全相同。?
  在?grub>?提示符处,输入:?
  
  grub>?root?(fd0)?
  grub>?setup?(fd0)?
  grub>?quit?
  
  现在,引导盘完成了。?
  如果要把GRUB装到硬盘上,也很容易。这个过程几乎与引导盘安装过程一样。首先,需要决定哪个硬盘分区将成为?root?GRUB?分区。在这个分区上,创建?/boot/grub?目录,并将?stage1?和?stage2?文件复制到该目录中,可以通过重新引导系统并使用引导盘,或者使用驻留版本的?GRUB?来执行后一步操作。在这两种情况下,启动?GRUB,并用?root?命令指定?root?分区。例如,如果将?stage1?和?stage2?文件复制到?hda5?的?/boot/grub?目录中,应输入?"root?(hd0,4)"。接着,决定在哪里安装?GRUB?--?在硬盘的?MBR,或者如果与?GRUB?一起使用另一个"主"引导装入器,则安装在特定分区的引导记录中。如果安装到?MBR,则可以指定整个磁盘而不必指定分区,如下(对于?hda):?
  
  grub>?setup?(hd0)?
  
  如果要将?GRUB?安装到?/dev/hda5?的引导记录中,应输入:?
  
  grub>?setup?(hd0,4)?
  
  现在,已安装?GRUB。引导系统时,应该立即以?GRUB?的控制台方式结束(如果安装到?MBR)。现在,应创建引导菜单,这样就不必在每次引导系统时都输入那些命令。
  
  小结:在这里只是介绍了?GRUB?的一部分。例如,可以使用?GRUB?来执行网络引导,引导?BSD?文件系统,或更多操作。另外,GRUB?有许多配置和安全性命令也很有用。如需所有?GRUB?功能的完整描述,请阅读?GRUB?出色的?GNU?文档。只要在?bash?提示中输入?"info?grub"?就可以阅读该文档。
  
  有用的一些信息:xosl是一个支持鼠标的图形界面boot?loader,可以于system?command和boot?manager相比

原文转自:http://www.ltesting.net