Total Pageviews

Saturday 6 October 2012

用grub命令行启动 linux系统

启动菜单grub.conf丢失,无法进入系统。不过,grub启动管理器还好好的,只好通过grub命令行来手动引导启动系统了。
  在“从硬盘安装fedora 8 ”中曾经稍微提到过,grub是一个多系统的启动管理器,不但有linux版本的grub,也有windows版本的grub。上次从硬盘安装系统用的就是windows版本的grub。可以说,grub是一个非常强大的多系统启动管理器,具有多重系统引导,交互式操作,可设置grub启动密码,可映射硬盘,可以定制开机画面等等特点。通过命令行启动系统就是交互式操作的一个应用,至于其它应用,这里就不再一一列出。想要深入了解它的话,可以看一下grub的手册: http://www.linuxsir.org/main/doc/grub/grubmanual/index.html 。说来惭愧,我还没完全看过。。哈哈。。
  闲话少说,先把通过命令行启动系统的过程列出来。为了解释方便,特标上行号:
1 root (hd0,2)
2 kernel /vmlinuz-2.6.26.5-28.fc8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
3 initrd /initrd-2.6.26.5-28.fc8.img
4 boot
  怎么样?linux的启动命令行是不是很简洁啊?下面就一一解释这几命令。
  第1行命令:指定/boot所在的分区。
   要是不知道自己的/boot分区在哪里,没关系,先输入root (hd0,然后按Tab键,它会显示可能的分区,然后根据分区类型判断/boot分区。我就是这么做的......所以Tab键是linux里很好用的一 个键。这里指定/boot分区并不是必须的,在这里省略的话要在kernel以及initrd中指定,即:kernel (hd0,2)/vmlinuz-2.6......和initrd (hd0,2)/initrd-2.6......
  关 于"hd0,2”,是指第一块硬盘的第三个分区,这是一个主分区。linux里的分区表示方法有两种:一是像"hd0,2"这种纯数字表示法,它是 以"hd0,0"开始,意思是第一块硬盘的第一个分区;第二块硬盘就是hd1。还有一种是hda1这一种,它也表示第一块硬盘的第一个分区;第二块硬盘就 是hdb。两种表示法用在不同的场合,纯数字表示法一般用在grub中指定/boot分区;第二种方法是日常使用的表示法,硬盘挂载等都用这种表示法。关于主分区与扩展分区,这里稍微提一点:扩展分区是从hdx5或hdx,4开始的,其中x代表硬盘号。要更加详细的了解linux的分区表示法,Google一下。

  第2行命令:指定内核映像及根分区。
   输入kernel /vmlinuz,然后按Tab键补全内核映像全名;补全以后可以看到我的fedora内核映像是vmlinuz-2.6.26.5-28.fc8。如果 有一个以上的内核,它会全部显示出来让你选择(这种情况遇到过,从8升级到9以后,我的启动菜单里就有了两个映像)。还有就是,我的/boot分区不是在 根分区中,而是一个独立的分区;如果/boot分区不是一个独立分区,而是位于根分区中,就要这样写: kernel /boot/vmlinuz-2.6.26.5-28.fc8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet,下面的initrd要写成:initrd /boot/initrd-2.6.26.5-28.fc8.img。映像后面的部分是用来指定根分区的,要手动输入。ro的意思是read only,root=/dev/VolGroup00/LogVol00是根分区位置,rhgb意思是图形化启动过程,quiet意思是不要显示启动信 息。在实际操作中,我发现内核映像以后的部分其实不是必须的;也就是说,即使不输入这部分内容,不指定根分区,不指定图形化启动过程,不省略启动信息,也 可以正确启动。对于不必指定根分区,是否跟我的系统是单内核有关系?
  这行命令要多理解一下。首先,vmlinuz中,vm是指vritual memery,linuz的意思是说,这一个经过压缩的内核映像。还有,这一行命令中的root跟第一行命令中的root表达的不是同一意思。第一行命令 中的root指的是系统的启动分区,即/boot分区;第二行命令中的root指的是系统的根分区,即/分区。要详细理解两者的区别,就牵涉到linux 文件系统及目录结构,它是linux中关键性的概念之一,我会找个时间写一些关于它东西,浅谈一下我对它的理解。"root="后面的"/dev /VolGroup00/LogVol00"就是根分区的位置;看起来是不是怪怪的?因为我的根分区用的不是普通的硬盘分区,而是逻辑卷,术语叫 LVM(logical volume manager)。这个也是linux里一个很重要的东西。LVM要结合linux硬盘分区及目录结构来理解,这里就不谈了,否则会越扯越远,偏离正题。

  第3行命令:指定initrd.img
   initrd即initial ramdisk,字面上理解是初始化RAM磁盘。它实际上是一个临时的文件系统,而且是与内核绑定在一起的。一般用来加载必须的系统文件、驱动程序和存储 设备等,系统启动以后它立刻被释放。据说,在没有其它存储设备的情况下,它就是永久的系统。我不是太了解,也写不出更多的东西来。总 之,initrd.img是一个与内核绑定在一起的,用来加载必须的系统文件的临时文件系统。

  第4行命令:启动系统。输入boot,敲回车键即可启动系统。
  系统启动以后,再想一下这个手动启动的过程,如果了解grub的话,手动启动系统并不复杂。而启动菜单呢,很像是根据我们手动输入的内容编写而成的一个脚本。这个“脚本”让你在启动系统时不必每次都手动输入,所以这个“脚本”还是很有用的,我们还是手动编写一个吧。
  若了解linux目录结构的话,就会知道启动菜单在根分区的boot文件夹下的grub文件夹中。grub文件夹中还有一个menu.lst,它是grub.conf的链接文件。你可能有点疑问:你的/boot分区不是一个独立的分区,不在根分区中么?其实这就是linux与windows不同的地方之一,它是通过挂载的方式与根分区产生关系的,这牵涉到文件系统和目录结构方面的东西,这里不详谈。找到并打开grub文件夹,创建一个grub.conf,你需要root权限!

  grub.conf该怎么写呢?和上面输入的命令基本相似。下面是我虚拟机中fedora的grub.conf的内容:
Click here to open new window
CTRL+Mouse wheel to zoom in/out
其中,加#号的都是注释文字,启动时是被忽略的。核心部分如下:
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
#hiddenmenu title Fedora (2.6.26.5-28.fc8)
  root (hd0,0)
  kernel /vmlinuz-2.6.26.5-28.fc8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
  initrd /initrd-2.6.26.5-28.fc8.img
  第一行,default项,表示默认启动的系统。0代表按照grub中 的顺序默认启动第一个系统,改为1,则是默认启动第二个系统。以此类推。第二行,timeout项,表示选择菜单等待时间为5秒。这个可以自己设定选择菜 单等待的时间。第三行,splashimage项,表示开机启动时出现的背景画面。若不想让画面显示,可以在前面加#号以忽略。第四 行,hiddenmenu项,表示隐藏选择菜单,加#号表示不隐藏。若装了双系统又不想让它出现选择菜单,可以把前面的#号去掉。第五行,title项, 选择菜单上出现的系统标题。下面的就不用再解释了。。。
  仿照这个grub.conf 另外写一个启动菜单,注意我实际电脑中的/boot分区是(hd0,2),其它的完全照搬。然后把它放在/boot/grub中,就可以正常启动 fedora了。但是我的实际的电脑中装的是xp和fedora双系统,按照那个启动菜单虽然可以正常启动fedora,却不能正常启动xp,仍然需要手 动输入。所还需要在刚才的启动菜单尾部加上一部分:
title windows xp
  rootnoverify (hd0,0) #我实际电脑中xp系统是放在第一个分区中的
  chainloader +1
  若想让xp系统默认启动,把default项改为1。xp这一部分的启动菜单用了链式装入器,也不必理会什么意思,照搬就可以了。
  现在一份新的启动菜单就弄好了!
  这篇日记算是勉强写完了。一方面,我也不是特别了解grub,无法作更深入的挖掘;另一方面,这篇日记牵涉到很多linux文件系统、目录结构、硬盘分区等知识。既要谈一点这方面的知识,否则读起来会很吃力;又不能谈的过多,否则会偏离正题。但是不管怎么说,用命令行启动fedora是没什么问题了。
-------------------------------------------------------------------------------
 GRUB使用说明及Linux和Windows双系统Grub丢失恢复和linux硬盘安装方法

从Red Hat Linux 7.2起,GRUB(GRand Unified Bootloader)取代LILO成为了默认的启动装载程序。相信LILO对于大家来说都是很熟悉的。这次Red Hat Linux用GRUB代替LILO,可见GRUB大有过人之处。不过,相对于LILO来说,大家对GRUB还是要陌生一些。本文将对GRUB的基本情况、 术语、接口、命令以及配置文件做个介绍,希望对大家有所帮助。
  
    一、GRUB的概述
  
    在Red Hat linux装载一个系统前,它必须由一个引导装载程序(boot loader,启动管理程序)中的特定指令告诉它去引导系统。这个程序一般是位于系统的主硬盘驱动器或是其他知道如何去开始linux内核的媒介驱动器上。
  
     如果说一个x86系统只安装了Red Hat Linux而且只有一个版本的linux内核,那么通过引导装载程序开始Red Hat Linux的特定过程就不重要了。Red Hat Linux安装程序允许用户快速方便地配置引导装载程序存放在主硬盘驱动的主引导记录中来引导操作系统。
  
    然而,为了能从多个linux内核或其他操作系统引导,那么就很有必要了解Red hat linux用于提供必要的引导选项的方法,以及理解引导的过程与如何去改变。
  
    本文是讨论GRUB,它是Red Hat Linux用来在x86系统上装载操作系统的默认方法。同时,本文也将详细介绍用于控制引导过程的各种命令和配置选项。   GRUB的定义
  
     GNU GRUB(GRand Unified Bootloader)是一个将引导装载程序安装到主引导记录的程序,主引导记录是位于一个硬盘开始的扇区。它允许位于主引导记录区中特定的指令来装载一 个GRUB菜单或是GRUB的命令环境。这使得用户能够开始操作系统的选择,在内核引导时传递特定指令给内核,或是在内核引导前确定一些系统参数(如可用 的RAM大小)。
  
    x86的引导过程
  
    当一个x86机器启动后,系统BIOS开始检测系统参数,如 内存的大小、日期和时间、磁盘设备、以及这些磁盘设备用于引导的顺序等。通常情况下,BIOS都是被配置成首先检查软驱或光驱(或两者都检查),然后再尝 试从硬盘引导。如果在这些可移动的设备中,没有找到可引导的介质,那么BIOS通常是转向第一块硬盘最初的几个扇区,寻找用于装载操作系统的指令。这些最 初的扇区-主引导记录-开始装载一个预选择操作系统的过程,一个操作系统选项贩GRUB菜单,或是一个执行特定选项的GRUB命令行接口。 
  
    装载GRUB和操作系统的过程,包括以下几个操作步骤:
  
    1、装载基本的引导装载程序,这通常是第一步。基本引导装载程序必须是位于主引导扇区中一个非常小的空间,少于512字节。因此,基本引导装载程序所做的唯一的事情就是装载第二引导装载程序。这主要是归结于在主引导扇区中没有足够的空间用于其他东西了。
  
    2、装载第二引导装载程序,这通常称为第二步。这第二引导装载程序实际上是引出更高级的功能 ,以允许用户装载入一个特定的操作系统。在GRUB中,这步是让用户显示一个菜单或是输入命令。
  
    3、装载在一个特定分区上的操作系统,如linux内核。一旦GRUB从它的命令行或是配置文件中,接到开始操作系统的正确指令,它就寻找必要的引导文件,然后把机器的控制权移交给操作系统。
  
注意
  
    在一些文件系统以及文件系统的配置中,可能需要一个1.5步的文件,用来连接基本引导程序与第二引导程序之间的差异。
  
    举个例子来说,如果第二步中的引导装载程序文件位于一个使用了第一步引导装载程序所不能访问的文件系统的分区中,那么就可能需要指示第一步引导装载程序,从1.5步文件中载入附加的指令来读取第二步引导装载程序的文件。更多相关的信息,请参考GRUB的信息页。
  
    前面所提到的引导方法被称为直接装载。因为这种方法中使用的是直接装载操作系统的指令,没有用到任何在引导装载程序和操作系统主文件(如内核)之间的中间代码。然而,不同操作系统所采用的引导过程可能会与上面提到的有一些细微的不同。例如,微软的DOS和Windows操 作系统在安装时,倾趋于完全重写主引导记录,而不是合并当前的主引导记录的配置。这将破坏掉其他操作系统保存在主引导记录中的所有信息,如Red Hat Linux。微软操作系统,还有一些其他的专有操作系统,都是使用一种称为链式装载的引导方法来启动的。在这种方法中,主引导记录仅仅是简单地指向操作系 统所在分区的第一个扇区。
  
    GRUB支持直接和链式装载的引导方法。GRUB能用于几乎所有操作系统,绝大多数流行的文件系统,以及几乎所有的系统BIOS所能识别的硬盘。
  
    GRUB的特性
  
    GRUB包含许多特性,这使得GRUB比其他可用的引导装载程序更加优越。下面列出一些比较重要的特性:
     ·GRUB在x86机器上,提供一个真正基于命令行的,先于操作系统(pre-OS)的环境。它对于用确定的选项装载操作系统或收集系统信息方面, 提供了最大程度的适应性。许多非x86的体系结构已经使用先于操作系统环璄许多年了,它提供控制系统如何从一个命令行引导。当LILO或其他x86引导装 载程序使用了一些命令特性的时候,GRUB已经包含了许多这方面的特性。
    ·GRUB支持逻辑块寻址(LBA)方式。LBA将用于寻找驱动 器上文件的地址转换工作置于驱动器的硬件中,它被用在许多IDE和所有的SCSI硬盘中。在使用LBA之前,硬盘驱动器遇到一个1024柱面的限制,即 BIOS不能找到在1024柱面后的文件(比如一个引导装载程序或是内核文件)。只要系统BIOS能支持LBA模式(大多数都支持),那么LBA就允许 GRUB超越1024柱面的限制,引导操作系统。
    ·GRUB的配置能在每次系统引导时被读取。这就避免了用户每次改变引导选项时都要重写 一次主引导记录。大多数的引导装载程序都不能很老道地读取配置文件,并使用它们来设置引导选项。比如说,用户必需改变一个LILO的配置文件,然后运行一 个命令将新的配置数据重写回系统的主引导记录。这种方法比GRUB所采用 的方法更加危险,因为一个错误配置的主引导记录将让系统无法引导。在使用 GRUB中,如果说配置文件被错误配置并且引导,那它也仅仅简单地转到一个默认的命令行,允许用户手工输入命令来运行操作系统。除开更新系统引导的第一 步、第二步、或是菜单配置文件的位置,主引导记录是不会被触及到的,而这种情况是很少发生的。
  
    注意:
  
    当GRUB的配置文件发生改变时,没有必要重新启动GRUB。所有的改变都能被自动地检测到。如果GRUB被重新启动,那么用户将退回到命令行方式的GRUB外壳下。
  
    安装GRUB 
  
    如果在Red Hat Linux的安装过程中,GRUB没有被安装,下面将说明如何安装它,并将它设为默认的引导装载程序。
  
    注意:如果LILO已经被安装,并且是当前的系统引导装载程序,那并没有必要为了使用GRUB而删除它。GRUB一旦安装后,将做为系统默认的引导装载程序。
  
    首先,获取最新可用的GRUB包。在Red Hat Linux安装光盘上的GRUB包也可以使用。
  
    其次,在一个外壳提示下,运行命令/sbin/grub-install ,这里的是GRUB将要被安装的位置。比如说:/sbin/grub-install /dev/hda
  
    最后,重新引导系统。GRUB图形引导装载菜单将出现。  二、GRUB的术语
  
    在使用GRUB前,最重要的事情之一就是理解这个程序是如何引用设备的,如系统硬盘驱动器、分区等。对于配置GRUB实现多操作系统的引导,这方面的信息是很重要的。
  
    设备名称
  
    系统的第一个硬盘驱动器被GRUB称为(hd0)。在它上面的第一个分区被称为(hd0,0),第二个硬盘驱动器上的第5个分区被称为(hd1,4)。通常使用GRUB时,文件系统习惯上采用下面的方式命名:
  
    (,)
    在设备命名中,圆括号和逗号是很重要的。指出是一个硬盘(hd)还是一个软盘(fd)被指定。
  
    是依照系统BIOS而确定的设备号,从0开始。基本IDE硬盘被标为0,第二IDE硬盘被标为1。这个排序大体上等同于linux内核用字母安排设备的顺序,只是在hda中的a变成了0,hdb中的b变为了1,依次类推。
  
    注意:GRUB用于设备的命名系统是从0开始,而不是1。这常常是GRUB新手们常犯的最普遍的错误。
    指在一块硬盘上一个分区的编号。类似于,分区的编号也是从0开始。虽然大多数的分区可以用数字指定,但是如果系统使用的是BSD分区,那么它们还是用字母来指定,如a或c。
  
    GRUB在命名设备和分区时,使用下面的规则:
  
    ·系统使用IDE硬盘或SCSI硬盘,都没有关系。所有的硬盘都是用hd开始。软盘用fd开头。
    ·当指定整个硬盘,不考虑它的分区时,简单地将逗号和分区编号取消即可。当告诉GRUB配置一个特定硬盘的主引导扇区时,这一点很重要。比如,(hd0)指定第一个设备,(hd3)指定第四个设备。
    ·如果一个系统有多个驱动设备,知道由BIOS确定的驱动器顺序就很重要了。如果系统只有IDE或SCSI驱动器,那是相当简单的。但是如果有多个驱动器混合时,这就变得令人混乱了。  
  
    文件名称
  
    当在GRUB中输入包括文件的命令时,比如在多操作系统中使用一个菜单列表,文件名必须直接在设备和分区后指定。一个绝对文件名的格式如下:
  
    (,)/path/to/file
  
    大多数的时候,用户可以通过在分区上的目录路径后加上文件名来指定文件。这种方法是直接了当的。
  
     另外,我们也可以将不在文件系统中出现的文件指定给GRUB,比如在一个分区最初几块扇区中的链式引导装载程序。为了指定这些文件,需要提供一个块 列表(blocklist),由它来一块一块地告诉GRUB文件在分区中的位置。当一个文件是由几个不同的块组合在一起时,需要有一个特殊的方式来写块列 表。每个文件片断的位置由一个块的偏移量以及从偏移点起始的块数来描述,这些片断以一个逗号分界(comma-delimited)的顺序组织在一起。
  
    考虑下面的块列表:
  
    0+50,100+25,200+1
  
    上面这个块列表告诉GRUB使用一个文件,这个文件起始于分区的第一块,使用了第0块到第49块,第99块到124块,以及第199块。
  
    当使用GRUB装载诸如微软Windows这样采用链式装载方式的操作系统时,知道如何写块列表是相当有用的。如果从第0块开始,那么可以省略块的偏移量。作为一个例子,当链式装载文件在第一硬盘的第一个分区时,可以使用下面的命名:
  
    (hd0,0)+1
  
   下面给出一个带类似块列表名称的chainloader命令。它是在设置正确的设备和分区作为根后,在GRUB命令行中给出的。
  
    chainloader +1
    GRUB的根文件系统
  
    一些用户常困惑于GRUB中根文件系统(root filesystem)这一术语的用法。GRUB的根文件系统与Linux的根文件系统是没有关系的,这一点需要记住。
  
    GRUB的根文件系统是用于一个特定设备的根分区。GRUB使用这个信息来挂入(mount)这个设备并从它上面载入文件。
  
     在Red Hat Linux中,一旦GRUB载入它自己的包含Linux内核的根分区,那么kernel命令就可以将内核文件的位置作为一个选项来执行。一旦Linux内 核引导,它就设定自己的根文件系统,此时的根文件系统就是大多数人用来与Linux联系的了。最初的GRUB根文件系统以及它的挂入都被去掉,它们仅存在 于用来引导内核文件。
 
三、GRUB的接口
  
    GRUB主要有三个强大的接口,它们提供了不同级别的功能。每个接口都允许用户引导操作系统,甚至可以在处于GRUB环境下的接口之间移动。
  
    菜单接口
  
     如果GRUB是由Red Hat Linux的安装程序自动配置的,那么它默认的显示接口是菜单接口。在系统第一次启动后,一个操作系统或内核的菜单(事先已经用它们各自的引导命令配置 好)将一个按名称排列的列表保存在这个接口中。使用箭头键选择一个非默认选项,然后按回车键来引导它。如果不是这样,一个记时器可能已经被设置,那么 GRUB将启动装载那个默认的选项。
  
    在菜单接口上,按[e]键,对高亮菜单项中的命令进行编辑。按[c]键载入一个命令行接口。
  
    菜单项目编辑器接口
  
    在引导装载菜单中按[e]键,就进入了菜单项目编辑器。用于项目的GRUB命令就显示在这里。在引导操作系统前,用户可以更改这些命令,添加(加在当前行后面,用[o]键;加在当前行前,用[0]),编辑(用[e]键),删除(用[d]键)。
  
    在所有的改变都完成后,用[b]键来执行这些命令,并引导操作系统。[Esc]键来放弃这些修改,将重新入标准的菜单接口。[c]键用来载入命令行接口。
  
    命令行接口
  
     命令行是GRUB最基本的接口,但它也是被授予了最大控制能力的接口。在命令行接口中,输入任何相关的GRUB命令,再回车就可以执行了。这个接口 的功能有点类似于shell的功能,比如[Tab]键完成,前后文提示,输入命令时的[Ctrl]键组合,如[Ctrl]-[a]移到行的开头, [Ctrl]-[e]移到行的结尾。另外,箭头键,[Home],[End],[Delete]键与bash shell中一样用法。
  
    接口使用的顺序
  
    当GRUB环境开始载入第二步引导装载程序时,它寻找自己的配置文件。当找到配置文件后,它使用这个配置文件建立一个要载入的操作系统的菜单列表, 然后显示引导菜单接口。
  
    如果配置文件没有被找到,或者如果配置文件不能读取,那么GRUB将载入命令行接口,以允许用户手工输入必要的命令来启动操作系统。
  
     如果配置文件不是正确的,那么GRUB将显示出错误,并请求输入。这点是很有帮助的,因为用户将能够看到问题发生在文件中的什么地方,并修复它。按 下任意键,重新载入菜单接口,根据GRUB报告的错误,编辑菜单选项并纠正问题。如果这个修正失败了,那么错误将被报告,且GRUB将再次开始。
  
    四、GRUB的命令
  
    GRUB包含了许多不同的命令,它们可以在命令行接口中以交互的方式执行。其中的一些命令能接在命令名后面的选项,这些选项用空格隔开。
  
    下面的列表给出了最有用的一些命令:
  
    boot - 引导先前已经被指定并载入的操作系统或链式装载程序。
    chainloader - 将指定的文件作为一个链式装载程序载入。为了获取在一个指定分区第一扇区内的文件,使用+1作为文件名。
    displaymem - 显示当前内存的使用情况,这个信息是基于BIOS的。这个命令有助于确定系统在引导前有多少内存。
    initrd - 使用户能够指定一个在引导时可用的初始RAM盘。当内核为了完全引导而需要某些模块时,这是必需的。
    install p - 安装GRUB到系统的主引导记录。这个命令允许系统重启时出现GRUB接口。
  
    警告:install命令将覆盖主引导扇区中的其他信息。如果命令被执行,那么除了GRUB信息之外的其他用于引导其他操作系统的信息都将丢失。在执行这条命令前,确定你对它有正确的了解。
  
    这条命令可以用几种不同的方式进行配置。然而,它都要求指定。表示一个设备,分区和文件,在那里可以找到第一个引导装载程序的映象,比如(hd0,0)/grub/stage1。另外,也指定了第一步引导装载程序应该被安装的硬盘,如(hd0)。
  
选项告诉第一步引导装载程序第二步引导装载程序位于什么地方,例如(hd0,0)/grub/stage2。p选项告诉install命令菜单配置文件被指定在部分,比如说(hd0,0)/grub/grub.conf。
  
    kernel - 当使用直接载入方式引导操作系统时,kernel命令指定内核从GRUB的根文件系统中载入。options选项是跟在kernel命令后面,在内核载入时传给内核。
  
    在Red Hat Linux中,一个kernel命令的例子看起来象下面的形式:
  
    kernel /vmlinuz root=/dev/hda5
  
     上面这行表明了vmlinuz文件是从GRUB的根文件系统载入的,如(hd0,0)。同时,一个选项也被传给了内核。它指出当Linux内核载入 时,内核的根文件系统应该是位于hda5,第一个IDE硬盘的第五个分区。如果有必要的话,多个选项可以被放在这个选项后面。
  
    root - 将GRUB的根分区设置成特定的设备和分区,比如说(hd0,0)。并挂入这个分区,这样文件可以被读取。
    rootnoverify - 做root命令同样的事情,只是不挂入分区。
  
    除上面所述外,还有更多的命令可用。输入info grub,得到一个所有命令的完全列表。
  
    五、GRUB的菜单配置文件
  
    配置文件在GRUB菜单接口中,创建用于引导操作系统的列表。配置文件可以允许用户选择执行事先设置好的一组命令。这些命令既包括前面给出的命令,也包括一些只用于配置文件的命令。
  
    配置文件的专用命令
  
    下面这些命令只用于GRUB的菜单配置文件:
  
    color - 设定在菜单中使用的颜色,一种是作为前景色,一种作为背景色。可以简单地使用颜色名称,如red/black。比如:
    color red/black green/blue
    default - 默认项目的标题名称。如果菜单接口超时,那它将被载入。
    fallback - 当这个命令被使用时,如果第一次尝试失败,那么这个项目的标题名称将被试用。
    hiddenmenu - 这个命令被使用时,它不显示GRUB菜单接口,在超时时间过期后载入默认项。用户通过按[Esc]键,可以看到标准的GRUB菜单。
    password - 这个命令被使用时,它可以防止不知道口令的用户编辑菜单的项目。
  
    作为附加选项,可以在后面指定一个后备的菜单配置文件。因此,如果口令被知道,GRUB将重新启动第二步的引导装载程序,并使用这个后备的配置文件来建立菜单。如果这个后备文件不在命令中指出,那么知道口令的用户能够编辑当前的配置文件。
  
    timeout - 这个命令设定了在GRUB载入由default命令指定的项目前的时间间隔,以秒为单位。
   
    splashimage - 它指定在GRUB引导时所使用的屏幕图像的位置。
    title - 设定用来装载一个操作系统的一组特定命令的标题。
  
    字符#用来在菜单配置文件放置注释。
配置文件的结构

    设置GRUB菜单接口全局参数的命令被放在文件的顶部,接下来的是用于各个操作系统引导的不同项目。
  
    一个非常基本的用于引导Red Hat Linux或Microsoft Windows 2000的GRUB菜单配置文件可能如下所示:
  
    default=linux
    timeout=10
    color=green/black light-gray/blue
    # section to load linux
    title linux
    root (hd0,1)
    kernel /vmlinuz root=/dev/hda5
    boot
    # section to load Windows 2000
    title windows
    rootnoverify (hd0,0)
    chainloader +1
  
    这个文件告诉GRUB建立一个以Red Hat Linux为默认操作系统的菜单,设定10秒后自动引导。这里给出了2个部分,每个部分对应于一个操作系统项目,每个部分都包含了指向操作系统硬盘分区表的命令。
  
    在下面的附加资料中,将列出如何使用GRUB引导多种操作系统的参考资料。
  
    六、GRUB的附加资料
  
    这个部分只是对GRUB以及它的许多选项作一个介绍。如果想要更多的了解GRUB是如何工作的、如何在其他任务中配置它来引导非Linux操作系统,可以参考下面列出的一些资料。
  
    安装文档
  
    /usr/share/doc/grub-0.90 - /usr/share/doc/grub-0.90是GRUB文档在系统上的目录。
    在一个shell提示下,输入man grub命令可以查看GRUB的手册,它包括一个装载GRUB shell时所使用的选项的列表。
    在一个shell提示下,使用info grub命令可以得到GRUB的info页,它包括一个指南,一个用户参考手册,一个程序员参考手册,以及一个关于GRUB和它自己用法的FAQ文档。
  
    有用的一些站点
  
    [url]http://www.gnu.org/software/grub[/url] - GNU GRUB 项目的主页。这个站点包含了GRUB发展状态的信息以及一个FAQ。
    [url]http://www.uruk.org/orig-grub[/url] - 在这个项目被脱管到自由软件基金会进一步发展前的最初的GRUB文档。
    [url]http://www.redhat.com/mirrors/LDP/H...-with-GRUB.html[/url] - 研究GRUB各种不同的用法,包括引导非Linux操作系统。
    [url]http://www.linuxgazette.com/issue64/kohli.html[/url] - 一篇介绍性的文章,讨论在一个系统上GRUB配置,包括GRUB命令行选项的概述。

 
       当我们每次要重装WIN的时候,MBR都会被重写,这样原来的GRUB或LILO就会不见了,或者由于某些原因使得原来的GRUB不见了,这个时候只要重装GRUB就行了。
GRUB的重装方法有很多,这种方法不行,换一种试下:
1.用安装光盘启动,选升级安装,再只选安装GRUB行了。
2.用安装光盘启动,到BOOT那里输入linux rescue也就是进入救援模式,到出现#命令提示符时,输入chroot /mnt/sysimage,然后再输入grub-install /dev/hda,搞定...
3.没有软驱如何修复grub/lilo引导菜单?
a.把第一张linux安装盘里的dosutils目录复制到windows盘中。如果是iso可以用winrar3提取。
b.进入纯dos,进入dosutils目录,执行loadlin autoboot/vmlinuz root=/dev/hdxx()hdxx是你的linux根分区。这样就能进入linux。
c.执行grub-install /dev/hdx(x=a,b,c,d) 或lilo即可以重写引导。
4.如果你用grub来引导linux和windows,当windows出毛病重新安装后,会破坏MBR中的grub,这时需要恢复grub。
a.把linux安装光盘的第一张放到光驱,然后重新启动机器,在BOIS中把系统用光驱来引导。
b.等安装界面出来后,按[F4]键,也就是linux rescue模式。
c.一系列键盘以及几项简单的配制,过后就[继续]了。。。这个过程,我不说了,比较简单。
d.然后会出现这样的提示符:
sh#
e.我们就可以操作GRUB了.输入grub:
sh#grub
会出现这样的提示符:
grub>
我们就可以在这样的字符后面,输入:
grub>root (hdX,Y)
grub>setup (hd0)
如果成功会有一个successful......
这里的X,如果是一个盘,就是0,如果你所安装的linux的根分区在第二个硬盘上,那X就是1了;Y,就是装有linux系统所在的根分区。 setup (hd0)就是把GRUB写到硬盘的MBR上。
另外说下,有人说我没安装光盘啊?我是从硬盘安装的.呵呵,那你的ISO文件还在吧..那再来次硬盘安装进入安装界面也是一样的....


根据网上一些资料把常用Linux/Unix的硬盘安装方法汇总介绍下(这里只介绍最方便最常用的方法):
==========================================
RedHat/Fedora/RHEL/CentOS/RedFlag硬盘安装方法
第一步:安装grub4dos。到 http://download.gna.org/grub4dos/ 找合适的版本下载,解开压缩包并将里面的grldr文件放到c盘根目录,修改boot.ini文件(右键“我的电脑”-“属性”-“高级”-“启动和故障恢复设置”-“编辑”),加入一条语句c:\grldr="grub4dos",然后保存文件。
第二步:用winrar(或ultraliso等镜像工具)打开linux的第一块盘,进入isolinux文件夹,找到vmlinuz和initrd.img文件,并放在c盘根目录下。
第三步:打开记事本,把下面内容复制进去:
############################################################
timeout 0
default 0
title install linux
root (hd0,0)
#(hd0,0)表示c盘,即第一个主分区
kernel /vmlinuz
initrd /initrd.img
############################################################
然后保存文件到c盘根目录,保存类型选择“所有文件”,文件名用“menu.lst”。
第四步:将下载的linux镜像文件全部保存在一个fat32分区内(推荐根目录下),请注意是fat32格式分区。
第五步:重启电脑,会出现两个菜单选项,选择“grub4dos”就能启动linux安装程序,后面就自己看着办了(进入安装程序,会提示你安装介质,你应该选择硬盘方式,并选择镜像文件所在的分区)。
PS:如果是fedora 8硬盘安装,在进入安装程序前有可能会卡在一个地方(“running /sbin/loader”),那么请将“kernel /vmlinuz”改成“kernel /vmlinuz clocksource=acpi_pm”
==========================================
Ubuntu/Debian硬盘安装方法
第一步:同RedHat。
第二步:如果是Ubuntu,请到 http://ubuntu.cn99.com/ubuntu/dists/gutsy/main/installer-i386/current/images/hd-media/ 下载vmlinuz和initrd.gz文件,并放在c盘根目录。如果是Debian,请到 http://debian.cn99.com/debian/dists/sarge/main/installer-i386/current/images/hd-media/ 下载vmlinuz和initrd.gz文件,并放在c盘根目录。
PS:我这里ubuntu版本是gutsy(7.10),debian指版本是sarge(4.0)。如果是其它版本,只要将链接中的版本号改成自己的就行,比如你用的ubuntu是feisty(7.04),那么就将链接改成 http://ubuntu.cn99.com/ubuntu/dists/feisty/main/installer-i386/current/images/hd-media/
第三步:同RedHat,不过要将initrd.img改成initrd.gz。
第四步:如果是Ubuntu,可以将镜像文件保存在ntfs和fat32分区内。如果是Debian,就必须将镜像文件保存在fat32分区内。
第五步:同RedHat。
==========================================
Suse/OpenSuse硬盘安装方法
第一步:同RedHat。
第二步:用winrar(或ultraliso等镜像工具)打开linux的第一块盘,找到进入目录“\boot\i386\loader\”里找到linux和initrd文件,并放在c盘根目录下。
第三步:同RedHat,不过要将“kernel /vmlinuz”改成“kernel /linux”,“initrd /initrd.img”改成“initrd /initrd”。
第四步:将镜像文件全部解压出来,并放在fat32分区内,可以是根目录也可以是文件夹内。
第五步:同RedHat(进入安装程序,会提示你安装介质,你应该选择硬盘方式,并选择安装源,就是你镜像文件解压后保存的目录)。

5.如何把GRUB或LILO删掉?
只要在DOS下执行FDISK /MBR就行了...
如何配置grub?
修改/boot/grub/grub.conf文件。其中
“default=n”(n是个数字)是grub引导菜单默认被选中的项,n从0开始,0表示第一项,1表示第二项,依此类推。
“timeout=x”(x是一个数)是超时时间,单位是妙。也就是引导菜单显示后,如果x秒内用户不进行选择,那么grub将启动默认项。
“splashimage =xxxxxx”,这是引导菜单的背景图,先不理他。
其它常用项我用下面的例子来说明:
title Red Hat 8.0
root (hd1,6)
kernel /boot/vmlinuz-2.4.18-14 ro root=/dev/hdb7
initrd /boot/initrd-2.4.18-14.img
其中"Red Hat 8.0"是在启动菜单列表里显示的名字
root (hdx,y)用来指定你的boot分区位置,如果你没有分boot分区(本例就没分boot分区),那就指向根分区就行了,hdx是linux所在硬 盘,hd0是第一块硬盘,hd1是第二块,依此类推。y是分区位置,从0开始,也就是等于分区号减一,比如你要指向的分区是hdx7,那么y就是6,如果 是hdx1,那y就是0。注意root后面要有一个空格。
kernel /boot/vmlinuz-2.4.18-14,其中"/boot/vmlinuz-2.4.18-14"是你要用的内核路径,如果你编译了心内核,把它改成你的新内核的路径就行了。
ro就不用管,写上不会有错。
root=/dev/hdxx指定根分区,本例是hdb7,所以root=/dev/hdb7
initrd xxxxxxxxxxxxx这行不要也行,目前我还不清楚它是做什么用的。
上面是linux的,下面是windows的
title windows 98
rootnoverify (hd0,0)
chainloader +1
title xxxxxxx不用解释了,上面有解释。
rootnoverify (hdx,y)用来指定windows所在分区,x,y跟上面一样,注意rootnoverify后有空格。
chainloader +1照抄就行,注意空格。