Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6913946
  • 博文数量: 1956
  • 博客积分: 10648
  • 博客等级: 上将
  • 技术积分: 23794
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-22 09:38
个人简介

HI,movno1

文章分类

全部博文(1956)

文章存档

2022年(1)

2021年(8)

2020年(2)

2019年(12)

2018年(2)

2016年(2)

2015年(1)

2014年(2)

2013年(19)

2012年(8)

2011年(41)

2010年(388)

2009年(122)

2008年(385)

2007年(259)

2006年(704)

我的朋友

分类: LINUX

2006-04-08 18:40:46

grub简单应用

一旦选择了grub为引导程序,下面我们来了解一下它的配置.
/boot/grub/grub.conf是grub产生一个引导选择菜单以及设置一些选项.下面是我的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,6)
# kernel /vmlinuz-version ro root=/dev/hda10
# initrd /initrd-version.img
#boot=/dev/hda
default=0
timeout=10
splashimage=(hd0,6)/grub/splash.xpm.gz
# --> Redhat Linux 8.0 <--
title Red Hat Linux (2.4.18-14)
root (hd0,6)
kernel /vmlinuz-2.4.18-14 ro root=LABEL=/
initrd /initrd-2.4.18-14.img
# --> Microsoft Windows XP <--
title Microsoft Windows XP
rootnoverify (hd0,0)
chainloader +1
#===========例子结束==========

配置选项解释:
以"#"开头的是注释行.
我这里有两个操作系统,分别是Red Hat Linux和Microsoft Windows XP.
其中 timeout标识默认等待时间,我这设置为10秒,超过10秒用户还没作出选择的话,将自动选择默认的操作系统(我这里默认的是Redhat linux 8.0)
默认的操作系统是由default一项来控制的,default后的数字表明第几个是默认的,这里0表示第一个,1表示第二个.所以如果你想修改默认的操作系统,就修改default后的数字.
title一项是设置操作系统的名称,grub不支持中文(有点遗憾).
splashimage一项指定grub界面的背景图片,有兴趣的朋友可以修改grub的背景哦!
root (hd0,6)标识从第一个硬盘,第7个分区来启动搜索引导内核.注意这儿的root与linux的root分区不同,此root非彼root也!grub的硬盘标识方法与linux的有点不同.在linux中第一个主分区为hda1,第二个主分区为hda1,第一个逻辑分区为hda5,而在grub中是以(hdx,y)来标识的,如第一个主分区为(hd0,0)第一个逻辑分区为(hd0,1)依此类推.所以这儿root后面的是你的/boot所在分区标识.
知道了内核在哪儿,还要具体指出哪个文件是内核文件,这就是kernel的工作。
kernel /vmlinuz-2.2.18-14 ro root=LABEL=/.说明/boot/vmlinuz-2.2.18-14 就是要载入的内核。后面的都是传递给内核的参数。ro是以readonly的意思。注意我这里内核前面的路径是"/",因为我的boot单独分了一个区,如果你没有为boot单独分区,那么内核前面的路径就是"/boot".
initrd用来初始的linux image,并设置相应的参数
再来看一看windows的定义段吧。
这里,我添加了一项来引导 WindowsXP。要完成此操作,GRUB 使用了"链式装入器"(chainloader)。链式装入器从分区 (hd0,0) 的引导记录中装入 winXP 自己的引导装入器,然后引导它。这就是这种技术叫做链式装入的原因 -- 它创建了一个从引导装入器到另一个的链。这种链式装入技术可以用于引导任何版本的 DOS 或 Windows。如果你在计算机中装有win98,winme,win2k,winxp的话,chainloader会把引导权交与win的NTLoader来引导.
(三)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
现在,引导盘完成了。
(四).恢复被windows破坏的grub.
如果你用grub来引导linux和windows,当windows出毛病重新安装后,会破坏MBR中的grub,这时需要恢复grub.
1.把linux安装光盘的第一张放到光驱,然后重新启动机器,在BOIS中把系统用光驱来引导。
2.等安装界面出来后,按[F4]键,也就是linux rescue模式。
3.一系列键盘以及几项简单的配制,过后就[继续]了。。。这个过程,我不说了,比较简单。
4.然后会出现这样的提示符:
sh#
5.我们就可以操作GRUB了.输入grub:
sh#grub
会出现这样的提示符:
grub>
我们就可以在这样的字符后面,输入:
grub>root (hdX,Y)
grub>setup (hd0)
如果成功会有一个successful......
这里的X,如果是一个盘,就是0,如果你所安装的linux的根分区在第二个硬盘上,那X就是1了;Y,就是装有linux系统所在的根分区。 setup (hd0)就是把GRUB写到硬盘的MBR上。
(五).用NTLoader来引导linux.
如果你在安装linux时没有选择安装grub,不必着急,现在我们来看看如何在安装linux后安装grub.并用windows的NTLoader来引导linux.
1. 安装grub
我用的grub是Redhat8.0带的grub安装包: grub-0.92-7.rpm
安装: rpm -ivh grub-0.92-7.rpm
其他安装方式也一样,只要你安装上grub就行了.RH8缺省用的grub, 1,2步骤可以省了.
2. 建立grub的环境
cp /usr/share/grub/i386-pc/* /boot/grub
3. 生成grub的配置文件/boot/grub/menu.conf
按照上面所讲的grub.conf来生成一个配置文件.
注意了, 这里我的linux在/dev/hda4,所以menu.conf那些分区位置为(hd0,3),
你的可能不一样了,不能完全照着"画瓢"噢! 下面第3步install的中的分区位置也应该和你的系统一致.
3. 安装grub至Linux分区boot
将grub的stage1安装到/dev/hda4的boot扇区(hd0,3). 过程如下:
/sbin/grub (运行grub)
grub> install (hd0,3)/boot/grub/stage1 d (hd0,3) (hd0,3)/boot/grub/stage2 p (hd0,3)/boot/grub/menu.conf
(注意,上面"grub>"为grub的提示符,其后内容写在一行上.)
4. 取得grub的boot信息
过程如下:
dd if=/dev/hda4 of=/grub.lnx bs=512 count=1
这样得到grub的引导信息,只要用NT Loader来加载它就行了.
5. 将上面得到的grub.lnx弄到Windows的C盘根目录下
可以先把grub.lnx弄得软盘上,然后启动windows,拷贝到C:\; 情况允许也可以直接在Linux下拷贝到C:了. 我的C盘(即设备/dev/hda1)为FAT32, 可以直接从Linux下弄过去了. 如下:
mount -t vfat /dev/hda1 /mnt/c
cp /grub.lnx /mnt/c
umount /mnt/c
6. 修改NT Loader的boot.ini
在其中加入一行: C:\grub.lnx="Redhat Linux - GRUB"
加入后boot.ini的内容如下:
[boot loader]
timeout=15
default=C:\boot.lnx
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect
[VGA mode]" /basevideo /sos
C:\grub.lnx="Redhat Linux - GRUB"
OK. 可以用NT Loader加载Linux了, 其实上面过程基本上和用NT Loader加载LILO一样.其基本思想就是用NT Loader来加载LILO或grub的引导区(grub.lnx), 其中的关键就是LILO或grub的引导区的获取.
(六)活用grub的交互功能
grub具有强大的交互功能.学会了将会使你受益非浅!
1.grub没有显示菜单怎么办?
当开机后进入grub界面但没了菜单,只剩下一个grub>提示符,怎么启动呢?别急,看下面:
grub>cat (hd0,6)/boot/grub/grub.conf (为了看参数)
grub>root (hd0,6)
grub>kernel (hd0,6)/vmlinuz-2.4.18-14 ro root=LABEL=/
grub>initrd (hd0,6)/initrd-2.4.18-14.img
grub>boot
OK!启动了吧!以上有些数字要根据你的实际情况更改.
以上这个方法也可以用于测试新编译的内核.
2.进入单用户模式.
有时不小心把root用户密码忘了,只能进入单用户模式来重新设置root密码.方法如下:
开机进入grub界面,按C进入命令行模式,然后按照上面的方法进行,只是在第三步要在后面加入single参数.

 

以上转载于中国IT实验室,再次表示感谢
什么是 GRUB?

GRUB 是引导装入器 -- 它负责装入内核并引导 Linux 系统。GRUB 还可以引导其它操作系统,如 FreeBSD、NetBSD、OpenBSD、GNU HURD 和 DOS,以及 Windows 95、98、NT 和 2000。尽管引导操作系统看上去是件平凡且琐碎的任务,但它实际上很重要。如果引导装入器不能很好地完成工作或者不具有弹性,那么就可能锁住系统,而无法引导计算机。另外,好的引导装入器可以给您灵活性,让您可以在计算机上安装多个操作系统,而不必处理不必要的麻烦。
GRUB 是一个很棒的引导装入器。它有许多功能,可以使引导过程变得非常可靠。例如,它可以直接从 FAT、minix、FFS、ext2 或 ReiserFS 分区读取 Linux 内核。(AIX、SUN的系统?我还不知道能不能支持)这就意味着无论怎样它总能找到内核。另外,GRUB 有一个特殊的交互式控制台方式,可以让您手工装入内核并选择引导分区。这个功能是无价的:假设 GRUB 菜单配置不正确,但仍可以引导系统。哦,对了 -- GRUB 还有一个彩色引导菜单
Linux 世界在很长一段时间里一直使用 LILO 引导装入器,而且它可以让上百万的 Linux 用户引导系统。是的,的确是这样,LILO 很有效。但是,LILO 的维修率很高,而且很不灵活。与其花很多时间来描述 GRUB 的优点,还不如演示如何创建自己的 GRUB 引导盘以及如何使用它来引导系统。然后,我将说明 GRUB 的一些很“酷”的技术细节,并指导您完成将 GRUB 安装到 MBR(主引导记录)的过程,以使它成为缺省引导装入器。
如果您有点胆小,不必害怕。可以学习前半部分,创建 GRUB 引导盘,尝试使用 GRUB 而不必弄乱现有的引导装入器。或者,可以用其安全的“驻留”方式来熟悉 GRUB。那么,让我们立即开始吧。

下载 GRUB

要开始探究 GRUB 的精妙之处,首先需要下载、编译和安装它。但不要害怕 -- 根本不会修改您的引导记录 -- 我们只是要编译和安装 GRUB,就像其它程序一样,在此过程中我们可以创建 GRUB 引导盘。请不要担心;在修改引导过程之前,我会告诉您。
现在开始。访问

并下载可以找到的最新版本的 GRUB tar 压缩包。我编写本教程时,最新的 tar 压缩包是 grub-0.5.96.1.tar.gz。下载了最新版本后,就可以安装了。

安装期

这里是从 tar 压缩包安装 GRUB 所需输入的命令。我将在 /tmp 中编译源文件,并将所有部分都安装到硬盘的 /usr 目录下。从 root 用户,输入以下命令:
# cd /tmp
# tar zxvf /path/to/archive/here/grub-0.5.96.1.tar.gz
# cd grub-0.5.96.1
# ./configure --prefix=/usr
# make
# make install

现在已经安装了 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 /usr/share/grub/i386-pc/stage1 /mnt/floppy/boot/grub
# cp /usr/share/grub/i386-pc/stage2 /mnt/floppy/boot/grub
只需要再有一个步骤,就能得到可用的引导盘。


制作引导盘,第三部分

解压、编译和安装 GRUB 源 tar压缩包时,会将程序 grub 放到 /usr/sbin 中。该程序非常有趣并值得注意,因为它实际上是 GRUB 引导装入器的半功能性版本。是的,尽管 Linux 已经启动并正在运行,您仍可以运行 GRUB 并执行某些任务,而且其界面与使用 GRUB 引导盘或将 GRUB 安装到硬盘 MBR 时看到的界面完全相同。
这是有趣的设计策略,现在该使用驻留版本的 GRUB 来设置引导盘的引导扇区了。从 root 用户,输入 "grub"。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> 提示符处,输入:

grub> root (fd0)
grub> setup (fd0)
grub> quit

现在,引导盘完成了。在继续下一步骤之前,在看一下刚才输入的命令。第一个 "root" 命令告诉 GRUB 到哪里查找辅助文件 stage1 和 stage2。缺省情况下,GRUB 会在指定的分区或磁盘上的 /boot/grub 目录中进行查找。在安装引导盘时,也就是几分钟以前,我们已将这些文件复制到正确的位置。接着,输入了 setup 命令,它告诉 GRUB 将引导装入器安装到软盘的引导记录上;我们将在以后详细讨论这一过程。然后退出。现在,已经制作好引导盘,可以开始使用 GRUB 了。


使用 GRUB 引导系统之前,需要知道一些信息。首先,应知道哪个分区保存了 Linux 内核,以及 root 文件系统的分区名称。然后,应查看现有 LILO 配置来寻找需要传递给内核的变量,如 "mem=128M"。一旦获取了这些信息,就可以开始了。
要启动 GRUB,需要关闭系统并退出引导盘。如果由于某些原因而不能立即关闭系统(比如上班时在部门的服务器上测试 GRUB),那么只要在提示中输入 "grub" 并继续操作。所有程序的运行情况都不会改变,只是您不能执行引导(因为 Linux 正在运行)。
装入引导盘时,在屏幕顶部将出现一条消息,告诉您正在装入第一阶段和第二阶段。几秒后,将会出现一个熟悉的屏幕,显示如下:
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>
可以看到,这些内容与在 Linux 中以驻留方式运行 GRUB 时出现的消息完全相同 -- 只不过现在我们是使用 GRUB 来引导 Linux。
在 Linux 中,当谈到 "root" 文件系统时,通常是指主 Linux 分区。但是,GRUB 有它自己的 root 分区定义。GRUB 的 root 分区是保存 Linux 内核的分区。这可能是您的正式 root 文件系统,也可能不是。例如,在 Gentoo Linux 中,有一个单独的小分区专用于保存 Linux 内核与引导信息。大多数情况下,我们不安装这个分区,这样在系统意外崩溃或重新引导时,就不会把它弄乱。
这些,我们讨论的是 GRUB,需要指定 GRUB 的 root 分区。进入 root 分区时,GRUB 将把这个分区安装成只读型,这样就可以从该分区中装入 Linux 内核。GRUB 的一个很“酷”的功能是它可以读取本机的 FAT、FFS、minix、ext2 和 ReiserFS 分区,我们很快就会讨论这个功能。但现在,让我们输入 root 分区。在提示中输入 root,但不要按 Enter 键:
grub> root (
现在,按一次 Tab 键。如果系统中有多个硬盘,GRUB 将显示可能完成的列表,从 "hd0" 开始。如果只有一个硬盘,GRUB 将插入 "hd0,"。如果有多个硬盘,继续进行,在 ("hd2") 中输入名称并在名称后紧跟着输入逗号,但不要按 Enter 键。部分完成的 root 命令看起来如下:
grub> root (hd0,
现在,继续操作,再按一次 Tab 键。GRUB 将显示特定硬盘上所有分区的列表,以及它们的文件系统类型。在我的系统中,按 Tab 键时得到以下列表:
grub> root (hd0, (tab)
Possible partitions are:
Partition num: 0, Filesystem type is ext2fs, partition type 0x83
Partition num: 1, Filesystem type unknown, partition type 0x82
Partition num: 2, Filesystem type unknown, partition type 0x7
Partition num: 4, Filesystem type is reiserfs, partition type 0x83
Partition num: 5, Filesystem type is reiserfs, partition type 0x83
如您所见,GRUB 的交互式硬盘和分区名称实现功能非常有条理。这些,只需要好好理解 GRUB 新奇的硬盘和分区命名语法,然后就可以继续操作了。

GRUB 命名约定
到目前为止,您可能会感到一点困惑,因为 GRUB 所使用的硬盘/分区命名约定与 Linux 使用的命名约定不同。在 Linux 中,第一个硬盘的第五个分区称作 "hda5"。而 GRUB 把这个分区称作 "(hd0,4)"。GRUB 对硬盘和分区的编号都是从 0 开始计算。另外,硬盘和分区都用逗号分隔,整个表达式用括号括起。现在,回来看一下 GRUB 提示,可以发现如果要引导 Linux 硬盘 hda5,应输入 "root (hd0,4)"。如果已经明白了 GRUB 硬盘/分区命名,您也许要调整当前 root 命令行,以使它指向保存 Linux 内核的分区。按以下格式输完命令,然后按 Enter 键:
grub> root (hd0,4) (hit enter)
Filesystem type is reiserfs, partition type 0x83

装入内核

现在已安装了 root 文件系统,到装入内核的时候了。在 GRUB 提示中,依次输入 "kernel"、空格、到内核的路径、空格、内核参数,如 root 参数(GRUB 将自动插入适当的 "mem=" 参数)。我在我的系统中输入:
grub> kernel /boot/bz2.4 root=/dev/hda5
[Linux-bzImage, setup=0x1200, size=0xe1a30]
请留意 "root=" 内核参数,它非常重要。它应该指向保存 root 文件系统的 Linux 分区。您也许要写下到目前为止输入的命令,这样在教程后面讲述如何创建 GRUB 引导菜单时,就可以迅速找到它们。

Root,内核,引导!
您已经安装了 root 文件系统并装入了内核。现在,可以引导了。只要输入 "boot",Linux 引导过程就将开始。

重新调查引导软盘
如果一切正常,就可以使用使用 GRUB 引导盘来引导当前 Linux 发行版。如您所见,GRUB 是功能非常强大的引导装入器,它让您可以随意动态配置以进行引导。我将向您介绍如何创建 GRUB 引导菜单,这样就可以从菜单中进行 OS 选择,而不是输入三行命令来引导 Linux。但在动手之前,现在是深入了解 GRUB 幕后是如何工作的好时机。我将说明引导盘引导过程的工作原理,这样您就可以对 GRUB 有一个更好的评价和了解。

两阶段过程
要制作引导软盘,需要做两件事 -- 将文件复制到软盘的 ext2 文件系统的 /boot/grub 目录中,运行 GRUB 的安装程序。运行 GRUB 安装程序时,GRUB 将 "stage 1" 装入器安装到软盘的引导记录中。它还将 stage 1 装入器配置成从 ext2 文件系统直接装入 stage2。通常,GRUB 通过在包含 stage2 数据的软盘上创建一列块来完成此操作,这样 stage1 装入 stage2 时不必知道 ext2 文件系统的任何情况。
但是,大多数情况下,GRUB 在安装完 stage1 之后,会立即将 stage1.5 装入器安装到引导记录中。这个特殊的 stage1.5 允许无需使用原始块列表就能从 ext2 文件系统装入 stage2,却要更灵活的标准基于路径的方法。GRUB 理解文件系统结构的这一能力使 GRUB 比 LILO 更强壮。例如,如果正好在整理引导盘文件系统的碎片,stage1 就可以找到 stage2(归功于 ext2 stage1.5)。而 LILO 就不能完成此项操作。因为 LILO 只能依赖于映射文件,每次更新内核或在磁盘上物理移动数据时,即使不更改路径,也需要重新运行它。

阶段 1、1.5 和 2 第 3 页
您也许会想知道:如果使用 FAT 而不是 ext2 文件系统创建引导盘,GRUB 是否可以工作。是的,它可以工作,因为在输入 "setup (fd0)" 时,GRUB 会安装与 root 文件系统类型匹配的 stage1.5。即使没有没有空间可以安装 stage1.5,GRUB 仍可以通过追溯到更原始的块列表,来装入 stage2

搜索和恢复
在继续讨论之前,先研究一个与引导软盘相关的实用提示。由于 GRUB 的交互式性质,它为恢复软盘生成了一个很好的引导装入器。但是,如果将好的内核复制到引导盘上,那它就更好了。那样,即使硬盘上的内核坏了或者被意外删除了,也可以追溯到引导盘内核,并启动和运行系统。要将备用内核复制到引导盘,执行以下操作:
# mount /dev/fd0 /mnt/floppy
# cp /path/to/bzImage /mnt/floppy/boot
# umount /dev/fd0
现在,软盘已包含备用内核,可以在 GRUB 中使用它来引导 Linux 发行版,操作如下:
grub> root (fd0)
grub> kernel /boot/bzImage root=/dev/hda5 (将 /dev/hda5 更改成想要引导的分区名称)
grub> boot

硬盘引导
好,现在如何将 GRUB 安装到硬盘上?这个过程几乎与引导盘安装过程一样。首先,需要决定哪个硬盘分区将成为 root GRUB 分区。在这个分区上,创建 /boot/grub 目录,并将 stage1 和 stage2 文件从 /usr/share/grub/i386-pc 复制到该目录中。可以通过重新引导系统并使用引导盘,或者使用驻留版本的 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)。现在,应创建引导菜单,这样就不必在每次引导系统时都输入那些命令。

引导菜单

要创建菜单,只需在 /boot/grub 中创建一个简单的文本文件 menu.lst。如果将它放在正确位置,它将在 root GRUB 驱动器的 stage1 和 stage2 文件的旁边。这里是一个样本 menu.lst 文件,可以将它作为一个您的菜单的基础:
default 0
timeout 30
color white/blue blue/green

title=Boot Linux
root (hd0,4)
kernel /boot/bzImage root=/dev/hda5

title=Boot Linux using initrd
root (hd0,5)
kernel /boot/bzImage root=/dev/loop0 init=/initdisk.gz
initrd /initdisk.gz

title=Windows NT
root (hd0,3)
chainloader +1

我将在以下的屏面中说明 menu.lst 格式。

理解引导菜单
引导菜单很容易理解。前三行设置缺省菜单项(项目号 0,第一个)、设置超时值(30 秒),并选择整个菜单的一些颜色。
接着的三行配置 "Boot Linux" 菜单项。要创建手工引导命令系列之外的菜单项,只要添加一行 "title=" 作为第一行,并从最后一行中除去 "boot" 命令(GRUB 会自动添加这个命令)。
接着的四行显示了如何使用 GRUB 来引导 initrd(初始 root 磁盘),如果您愿意的话。现在,讨论最后三行……

链式装入器

这里是示例 menu.lst 的最后三行……
title=Windows NT
root (hd0,3)
chainloader +1
这里,我添加了一项来引导 Windows NT。要完成此操作,GRUB 使用了“链式装入器”。链式装入器从分区 (hd0,3) 的引导记录中装入 NT 自己的引导装入器,然后引导它。这就是这种技术叫做链式装入的原因 -- 它创建了一个从引导装入器到另一个的链。这种链式装入技术可以用于引导任何版本的 DOS 或 Windows。

GRUB 的弹性
GRUB 最好的优点之一就是其强健的设计 -- 在不断使用它时请别忘了这点。如果更新内核或更改它在磁盘上的位置,不必重新安装 GRUB。事实上,如有必要,只要更新 menu.lst 文件即可,一切将保持正常。
只有少数情况下,才需要将 GRUB 引导装入器重新安装到引导记录。首先,如果更改 GRUB root 分区的分区类型(例如,从 ext2 改成 ReiserFS),则需要重新安装。或者,如果更新 /boot/grub 中的 stage1 和 stage2 文件,由于它们来自更新版本的 GRUB,很有可能要重新安装引导装入器。其它情况下,可以不必理睬!

 

GRUB多重启动管理器

1. 什么是grub
  grub 是一个多重启动管理器。grub是GRand Unified Bootloader的缩写,它可以在
多个操作系统共存时选择引导哪个系统。它可以引导的操作系统包括Linux,FreeBSD,So
laris,NetBSD,BeOSi,OS/2,Windows95/98,Windows NT,Windows2000。它可以载入操作系
统的内核和初始化操作系统(如Linux,FreeBSD),或者把引导权交给操作系统(如Win
dows 98)来完成引导。
2. grub的特点
  grub可以代替lilo来完成对Linux的引导,特别适用于linux与其它操作系统共存情
况,与lilo相比,它有以下特点:
支持大硬盘
  现在大多数Linux发行版本的lilo都有同样的一个问题:根分区(/boot分区)不能分
在超过1024柱面的地方,一般是在8.4G左右的地方,否则lilo不能安装,或者安装后不
能正确引导系统。而grub就不会出现这种情况,只要安装时你的大硬盘是在LBA模式下,
grub就可以引导根分区在8G以外的操作系统。
支持开机画面
  grub支持在引导开机的同时显示一个开机画面。对于玩家来说,这样可以制作自己
的个性化开机画面;对于PC厂商,这样可以在开机时显示电脑的一些信息和厂商的标志
等。grub支持640x480,800x600,1024x768各种模式的开机画面,而且可以自动侦测选择
最佳模式,与Windows那320x400的开机画面不可同日而语。
两种执行模式
  grub不但可以通过配置文件进行例行的引导,还可以在选择引导前动态改变引导时
的参数,还可以动态加载各种设备。例如你在Linux下编译了一个新的核心,但不能确定
它能不能工作,你就可以在引导时动态改变grub的参数,尝试装载这个新的核心进行使
用。Grub的命令行有非常强大的功能,而且支持如bash或doskey一样的历史功能,你可
以用上下键来寻找以前的命令。
菜单式选择
  在lilo下,你需要手工输入操作系统的名字来引导不同的操作系统。而grub使用一
个菜单来选择不同的系统进行引导。你还可以自己配置各种参数,如延迟时间,默认操
作系统等。
分区位置改变后不必重新配置
  lilo是通过读取硬盘上的绝对扇区来装入操作系统,因此每次分区改变都必须重新
配置lilo,例如你用PQ magic调整了分区的大小,那lilo在你重新配置好之前就不能引
导这个分区的操作系统了。而grub是通过文件系统直接把核心读取到内存,因此只要操
作系统核心的路径没有改变,grub就可以引导系统。 除此之外,Grub还有许多非常强大
的功能。例如支持多种外部设备,动态装载操作系统内核,甚至可以通过网络装载操作
系统核心。Grub支持多种文件系统,支持多种可执行文件格式,支持自动解压,可以引
导不支持多重引导的操作系统等。
3. grub的使用
安装grub
  如果已经安装了蓝点Linux2.0则grub是默认安装的。要把grub重新安装到主引导扇
区上,只需要简单打入makebootable命令就可以了。
制作grub启动盘
  首先确定grub已经安装,然后进入grub的目录,键入:
  #cd /boot/grub
  放入一张软盘,然后敲入命令:
  #dd if=stage1 of=/dev/fd0 bs=512 count=1
  #dd if=/stage2 of=/dev/fd0 bs512 seek=1
  这样就可以做好一张启动盘了。
开机
  安装了grub开机后会出现一个菜单,列出所有的启动选项。如果设置了启动画面则
会显示启动画面,按Esc键则可以取消启动画面显示菜单选项。蓝点Linux所带的grub的
命令提示是全中文的,在菜单下面详细列出如按e是编辑启动命令,按c是使用命令行等
。用上下键可以选择菜单项,按回车启动所选项。按e键可以编辑所选项的启动命令,你
可以用这个功能临时改变你的系统的启动参数,参见配置grub一节。按c键则进入命令行
模式。   
  在命令行模式下可以打入命令直接执行,例如你可以敲入poweroff关闭计算机。按
Tab键可以列出所有支持的命令。蓝点Linux已经把grub汉化了,其中一部分命令敲入名
字后会给出中文提示,显示命令的用法和参数。
4. 配置grub
  grub启动时会在/boot/grub/中寻找一个名字为menu.lst的配置文件,如果找不到此
文件则不进入菜单模式而直接进入命令行模式。
  menu.lst 是一个文本文件,你可以用任何一个文本编辑器来打开它。每一行代表一
个配置命令,如果一行的第一个字符为井号"#"则这一行为注释,你可以简单地用增加或
减少注释行来改变配置。
编辑menu.lst,一般会有以下各行
timeout second
设定在second秒之后引导默认的操作系统。
蓝点Linux默认是timeout 5,就是5秒没有其他指令就引导系统,如果设成-1,则grub会
一直等待直到用户选择一个选项为止。
default num
默认启动第num+1行选项,也就说default=0则默认启动菜单第一行的操作系统,defaul
t=1则启动第2行的系统,如此类推。
splash pathname/filename
指出开机画面的文件所存放的路径和文件名,如 splash /boot/logo/800x600x8.img 是
指用在/boot/logo路径下的800x600.img文件作为开机画面
title OSname title
后面的字符就是你在菜单项上所看见的选项,你可以写上操作系统的名字和描述,如用
title BluePoint Linux, Single Mode 代表这一选项是引导蓝点Linux的单用户模式。
下面结合两个系统引导描述来解释几个引导选项的意义
title BluePoint Linux, Default Mode
root (hd0,1)
kernel /boot/vmlinuz vga=auto root=/dev/hda2
hd0是指第一个硬盘(主硬盘) (hd0,1)是指第一个硬盘的第二个分区。 kernel /boot/v
mlinuz 是指出Linux核心的路径在/boot/vmlinuz中。vga=auto 是设定显示模式,root
=/dev/hda2是指把第一个硬盘的第二个分区作为根挂载点("/")。
title Microsoft Windows
root (hd1,0)
chainloader (hd1,0)+1
root (hd1,0)这是指第二个硬盘(从硬盘)上第一个分区
chainloader (hd1,0)+1 装入一个扇区的数据然后把引导权交给它。
5. 从软盘启动grub
  制作启动盘后可以用软盘启动引导硬盘上的操作系统 插入制作好的启动软盘,进入
BIOS设定软盘启动。软盘启动成功后就会进入grub的命令行模式
grub>
  要启动一个操作系统,首先指定引导哪个分区上的系统,例如要引导指第一个硬盘
上的第一个分区的操作系统,先键入
grub>root (hd0,0)
  接着如果要启动的是Windows系统,键入
grub>chainloader (hd0,0)+1
  注意(hd0,0)要随着硬盘和分区的不同而改变数字。 如果要引导Linux或其他系统,
应键入
grub>kernel (hd0,0)/boot/vmlinuz root=/dev/hda1
  注意hda1参数也要随着硬盘和分区的不同而改变,如从第二个硬盘的第一个分区引
导则用hdb1。
  最后敲入boot就可以启动系统了。
  在任何时候不能确定命令或者命令的参数都可以按Tab获得相关的帮助。用上下键可
以获得命令的历史记录。 其实这些命令就是menu.lst的启动描述,您也可以根据那些描
述来自己键入启动命令,最后敲入boot就可以引导系统了。
 

GRUB使用说明

从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文档。

  有用的一些站点

  · - GNU GRUB 项目的主页。这个站点包含了GRUB发展状态的信息以及一个FAQ。
  · - 在这个项目被脱管到自由软件基金会进一步发展前的最初的GRUB文档。
  · - 研究GRUB各种不同的用法,包括引导非Linux操作系统。
  · - 一篇介绍性的文章,讨论在一个系统上GRUB配置,包括GRUB命令行选项的概述。

用安装盘来修复GRUB

一、本解决方案所要解决的问题:

我们可能在安装WIN时,把GRUB或者LILO从MBR上清除。如果在没有系统引导软盘只有安装盘的情况下,所采取的解决解决办法。

常用恢复MBR的办法还有一种是用升级系统的办法,这种办法经过验证,是极不可靠的。我们经过近二三十次的实践,证明效果几乎很少,这个办法用于没有安装GRUB的还是可行的。如果已经把GRUB安装上,后来就重装WINDOW或者别的操作系统而带的LILO,而导致系统不能正常引导,这种办法就失效了。所以说,本方案最适合GRUB的恢复。

二、解决过程[以RedHat 7.3为例]
1.把安装盘的第一张放到光驱,然后重新启动机器,在BOIS中把系统用光驱来引导。
2.等安装界面出来后,按[F4]键,也就是linux rescue模式。
3.一系列键盘以及几项简单的配制,过后就[继续]了。。。这个过程,我不说了,比较简单。
4.然后会出现这样的字符
sh#
5.我们就可以操作GRUB了。。。哈。。。只要能出现这样的,以后都是小KISS了,我就是不说 ,谁也能明白,地球人都知道了。。。。
sh#grub
会出现这样的字符
grub>
我们就可以在这样的字符后面,输入
grub>root (hdX,Y)
grub>setup (hd0)
如果成功会有一个successful......
这里的X,如果是一个盘,就是0,如果你所安装的linux的根分区在第二个硬盘上,那X就是1了;Y,就是装有linux系统所在的根分区。 setup (hd0)就是把GRUB写到硬盘的MBR上。

我来举个例子吧,如果以我的硬盘为例。我在第一个硬盘上装了XP,在第一个硬盘的hda9个装了RH73.我总共有两个硬盘。如果我把GRUB丢了,就用这种办法找回来。 如果你不知道你的linux安装到哪个分区上,也就是说,不知道这个Y是多少,这也不要紧,先输入root (hdX,然后用[TAB]来查看,一下就明白了...

操作如下:[前面开机启动的上面有说明]

sh# grub

会出现下面的字样的

grub>

然后再这样操作,如果我知道我的linux装在第一个硬盘上,但我不知道装在哪个分区上,就可以先输入root (hd0,然后用[TAB]键来补齐,然后就明白了。
代码:

grub>root (hd0,8)
grub>setup (hd0)


请弟兄们结合文章及这个例子,仔细想一想。

我的第一个硬盘的分区情况是这样的。。
/dev/hda1 主分区 NTFS
/dev/hda2 扩展分区
/dev/hda5 NTFS
/dev/hda6 FAT
/dev/hda7 FAT
/dev/hda8 /boot ext3
/dev/hda9 / ext3
/dev/hda10 /swap ext3


最后就是按一下[RESET]键,重新启动,就OK了。。。。这步应该是最简单的吧。。。哈。。。。
 

比LILO更强劲的多操作系统引导程序GNU GRUB

多引导是目前大家讨论的比较热门的一个话题,随着LINUX和INTERNET的热潮席卷全世界,个人电脑已经不再是M$的天下,对于操作系统我们拥有了更多的选择机会,FREEBSD,LINUX....一个硬盘上安装两到三个操作系统已经非常普遍,但是由于各个操作系统的引导过程机制不同,使我们在安装多系统时遇到了不少问题。我们面临着选择什么样的多引导程序的问题。
  LILO的确是一个选择,现在很多人也都是采用LILO解决多引导的问题。但是LILO并不易于使用,仍然不够灵活,而且从技术角度而言LILO仍然只是一个linux loader,它并不直接支持其他的操作系统,LILO对除LINUX外其他操作系统所做的只是将其引导块装入,而并不是将这些操作系统的内核装入,这样做的危险之处在于如果某个操作系统分区的引导块不小心被破坏了,那就可能导致这整个系统无法进入,甚至不得不重新安装,GRUB的推出就是企图改善这种一块硬盘上存在多个引导块的混乱局面。
  GNU针对多引导的问题推出了一个更加灵活和强大的多引导程序GRUB,提出了将引导程序和操作系统分离的解决方法,当然这主要是针对自由操作系统,但是GRUB仍然能够通过chainload引导其它非自由的操作系统。如果你仅仅安装LINUX和WINDOWS的话,的确,LILO已经足够使用,但是GRUB强于LILO之处在于还对GNU Mach,FreeBSD, NetBSD和OpenBSD的直接支持,而且更加灵活。GRUB能够直接引导上述的几个操作系统,装入内核,不需要那些各自为政的引导块, 这样我们只要拥有GRUB,在安装上述那些操作系统时就可以更加放心,不用再被什么引导块被覆盖的问题大伤脑筋。GRUB灵活之处还在于提供了一个引导时功能强大的命令行模式,我们可以举一个例子来说明这样做给我们带来的灵活性:你只需要做一张带GRUB的引导软盘,不需要任何配置,你就可以用这张软盘引导,然后可以通过几条简单指令启动任意一台计算机上的绝大部分操作系统。显然这种灵活信是任何其他引导软件无法比拟的。
  首先,先大概了解一下计算机操作系统的引导过程:
  众所周知,计算机的最初启动是由BIOS控制的,在对一些硬件(如:内存、键盘等)初始化之后,它会试图加载硬盘的主引导记录(MBR)或软盘的引导扇区。MBR可通过两种方式运行,其一是定位到活动分区并加载相应的引导扇区,然后将控制权移给此引导扇区,由引导扇区完成该分区内操作系统的基本组件的加载;其二是直接从一指定分区中加载信息,并通过它装入任一分区的操作系统,诸如LILO、OS/2 boot loader等引导加载程序都可以配置成这种方式。
  和LILO一样,GRUB能够识别文件系统,GRBU能够理解内核的可执行文件格式,这样就可以不用关心内核文件的磁盘定位,而只需通过文件系统便可以找到内核文件,GRUB比LILO能够理解更多的文件系统类型,更多内核可执行文件格式,这样它就能够直接定位和引导不同操作系统的内核。
  GRBU最早是在1995年由Erich Boleyn编写的,其最初目的是为了能够从Utah Mach4微内核系统(即是现在的GNU Mach)中启动引导GNU Hurd操作系统。现在GRUB的基本目的是用于引导符合Multiboot标准的操作系统,Multiboot是一个用于定义符合多引导标准的操作系统规范,这个标准十分全面,但是目前支持它的操作系统仍不多,主要是GNU Hurd,所以现在仍不能达到GRUB所设想的操作系统引导界面大一统的局面,虽然这一天似乎很遥远,但是我们现在仍然可以享受GRUB给我们带来的强大功能和高度的灵活性。

  下面我们来看看GRUB的特点和安装使用方法:

一. GRUB的技术特点:
  1. 支持多可执行文件格式
   GRUB支持各种a.out格式和ELF格式。
  2. 支持不符合Multiboot标准的内核
   GRUB能够直接支持多种并不符合Multiboot标准的自由操作系统内核(主要是FreeBSD,NetBSD,OpenBSD和 linux)。也能通过chainload间接引导非开放的其他操作系统。
  3. 支持操作系统模块装载。
  4. 提供文本格式可手工修改的配置文件。
  5. 菜单界面
  6. 灵活的命令行界面
  7. 多文件系统识别
  能够透明地识别多种文件系统,现在能够识别的文件系统有BSD FFS,DOS FAT16,FAT32,Minix fs和Linux ext2fs.这个范围仍然在扩展。
  8. 支持压缩文件的解压缩。
   能够解压缩被gzip压缩的文件,并且这个识别和解压过程是自动的和对用户透明的,这个功能大大地减少了文件的大小,减少了load的时间,这个功能对于软盘上的系统尤其有用。
   可能有些内核模块在装载时就要求是压缩状态,这时解压此模块可能会画蛇添足,所以GRUB提供了另一个不进行解压缩的模块装载命令。
  9. 可以读取任何已安装的设备上的数据
   支持读取软盘,硬盘上的数据,不依赖于根设备上任何的设置。
  10. 和磁盘定位的表示方法无关。
  11. 能够使用BIOS所检测到的所有RAM.
   GRUB通常能够找到PC兼容机上的全部RAM,它采用一种先进的BIOS查询技术来找到所有的内存空间。
  12. 支持硬盘的LBA模式
   GRUB通过支持LBA模式,突破1024柱面的限制,能够访问8GB以外的全部硬盘空间。
  13. 支持网络
   虽然GRUB是一个基于磁盘的引导程序,但是它也支持网络功能,你可以通过TFTP协议从网络上得到操作系统映象文件并引导。

  GRUB的后继版本可能会包括一个内置的可编程语言来支持各种内核的引导参数,这还只是一个操作系统引导器吗?;),并且计划加入对非PC体系结构的支持。

二. 如何在LINUX下安装和使用GRUB

1. 下载并安装GRUB包:
  你可以到<>得到GRUB,然后:


  # zcat grub-0.5.94.tar.gz | tar xvf -
  会生成一个目录grub-0.5.94,再:
  # cd grub-0.5.94
  # ./configure
  # make install
  这样GRUB就安装好了,下面你需要在你的硬盘或者软盘引导区上安装GRUB引导代码。
  a. 制作GRUB引导软盘:
  # cd /boot/grub
  # dd if=stage1 of=/dev/fd0 bs=512 count=1
  # dd if=stage2 of=/dev/fd0 bs=512 seek=1
  b. 制作GRUB硬盘引导:
  重启动用GRUB引导软盘引导,或者你不想重启动也可以执行/usr/sbin/grub。两种情况都会进入命令行界面。 然后,我们首先要设置GRUB的“根设备”,也就是告诉GRUB安装所在的分区:
  grub> root (hd0,0)
  这里牵涉到GRUB的设备命名规则,将在下面介绍,此处(hd0,0)是指第一块硬盘的第一个分区。
  如果你不能够确定安装GRUB所在的分区号的话,可以通过find指令查找:
  grub> find /boot/grub/stage1
  GRUB将会查找文件/boot/grub/stage1并显示包含这个文件的设备名,当然就是我们安装GRUB所在的分区。下面就可以写引导记录了:
  grub> setup (hd0)
  这条命令将会在第一块硬盘的MBR安装GRUB引导,如果你不想在MBR安装GRUB,而是希望将GRUB安装在分区的引导扇区的话,你可以用下面指令指定安装设备:
  grub> setup (hd0,0)
  这将会在第一块硬盘的第一个分区的引导扇区安装GRUB。
  OK,现在你就可以重新启动由GRUB引导你的系统。

2. GRUB的设备命名规则:
  首先GRUB对设备的命名必须包含在小括号内,GRUB不区分IDE硬盘和SCSI硬盘,统一使用hdx,其中x指定BIOS中硬盘的编号,从零开始计数,而且通常计算机内的IDE硬盘编号在SCSI硬盘前。GRUB用fdx指定软盘设备,x是软盘驱动器号。具体命名规则如下:
  (fd0):第一软驱,GRUB还可以引导软盘上的操作系统
  (hd0,1): 第一块硬盘的第二个分区。
  (hd1,4): 第二块硬盘的第一个扩展分区,扩展的分区是从4开始编号的。
  (hd0,2,a): 专用于FreeBSD,FreeBSD有一个slice概念,把一个分区进一步分为几个slice,此处指明是第一块硬盘的第三个分区中的slice a。你也可以用(hd0,a),这样GRUB就会在第一块硬盘上找到第一个FreeBSD分区的slice a。
  让我们再来看看GRUB对于磁盘文件的命名方法:
  (hd0,1)/vmlinuz,很简单只要指定分区号和文件的绝对路径名就可以了。

3. 现在来看看如何用GRUB引导我们的多操作系统,用GRUB引导后可以进入命令行模式或者菜单模式,你可以通过灵活的命令行模式选择引导各个分区的操作系统,指定引导参数。
  GRUB支持三种引导方法,第一种是直接引导操作系统内核,第二种是通过chainload进行间接引导。
  对于GRUB能够支持的LINUX,FreeBSD,OpenBSD,NetBSD,GUN Mach可以通过直接引导完成,不需要其他的引导扇区了,但是对于GRUB不直接支持的操作系统,需要用第二种方法chainload来完成。另外GRUB还支持网络引导,我们分别来看看这几种引导方法:
  (a) 直接引导:
  通常步骤如下:
  1.用root命令设置包含操作系统内核的根设备
  2.用kernel命令装载内核映象文件,如果这个内核引导的时候有参数的话,可以直接将参数加在内核文件名的后面。
  3.用module或modulenounzip装载内核模块。
  4.boot开始引导。

  (b) chainload引导:
  1.首先设置GRUB的根设备,用:
   grub> rootnoverify (hdx,y)
  2.开始引导
   grub> chainloader +1
   此处'+1'是指示GRUB读入分区的第一个扇区的引导记录。
  3.执行boot开始引导
  以上是一般的chainloader方式,对于DOS和WINDOWS,可以简单地用两条指令进行引导:
  chainloader (hdx,y)+1,然后boot,其中x,y用来指明所在分区号。

  (c) 从网络引导:
  为了使GRUB能够支持从网络引导,你需要在编译时打开网络支持选项,关于这个你可以参考源文件目录里的`netboot/README.netboot为了从网络引导,你首先要在网络设置两个服务,首先是动态IP配置服务,可以是BOOTP,DHCP或RARP服务器,另一个是TFTP服务。
  然后分别针对不同的服务器BOOTP,DHCP或RARP(三个选一个)运行bootp,dhcp,rarp。如果一切设置无误的话GRUB就会给出IP,IP netmask和TFTP服务器的IP和网关的IP地址。最后,从网上得到操作系统的映象文件,网络的设备名称是(nd).如下例:
  grub> bootp
  Probing... [NE*000]
  NE2000 base ...
  Address: 192.168.110.23 Netmask: 255.255.255.0
  Server: 192.168.110.14 Gateway: 192.168.110.1

  grub> root (nd)
  grub> kernel /tftproot/gnumach.gz root=sd0s1
  grub> module /tftproot/serverboot.gz
  grub> boot

4. 多操作系统引导实例:
GNU/Hurd
--------
因为GNU/Hurd是符合Multiboot规范的操作系统,所以非常容易引导:
grub> root (hd0,2)
如果你不记得Hurd所在的分区号的话,可以用find /boot/gnumach查找。
grub> kernel /boot/gnumach root=hd0s1
grub> module /boot/serverboot
grub> boot

GNU/Linux
---------
grub> root (hd1,3)
grub> kernel /vmlinuz root=/dev/hda1
如果你需要指定内核启动参数的话,可以直接加到命令的最后面如:
grub> kernel /vmlinuz root=/dev/hda1 vga=ext
如果你使用initrd的话,在kernel命令之后执行:
grub> initrd /initrd
grub> boot

FreeBSD
-------
GRUB能够直接装载.ELF和a.out两种格式的内核,但是由于FreeBSD的内核引导接口有时有较大的变动,
所以,对FreeBSD最安全的引导方法是引导/boot/loader
grub> root (hd0,a)
grub> kernel /boot/loader
grub> boot

NetBSD,OpenBSD,NetBSD
-------------------------------------
这三种系统的引导指令序列一样,如下:
  1. 'root'设置根设备.
  2. `kernel'装载内核.
  3. `boot'引导.

DOS/Windows
-----------
grub> rootnoverify (hd0,0)
grub> chainloader +1
grub> boot

SCO UnixWare
------------
grub> rootnoverify (hd1,0)
grub> chainloader --force +1
grub> makeactive //注意这条指令将设置UnixWare分区为活动分区,这样要求你的GRUB安装在MBR,否则下次启动时将直接进入UnixWare而不会进入GRUB grub> boot

  当然,如果每次引导都需要敲入命令的话实在是太麻烦了,因此,类似于LILO,GRUB提供了一个菜单方式,你需要一个配置文件将这些命令放入配置文件中就可以实现菜单方式的多引导,当然在菜单方式下你可以切换到命令模式下。GRUB引导时查找/boot/grub/menu.lst,如果存在这个文件的话,就根据这个文件生成一个引导菜单,menu.lst文件格式很简单,如下示例:

5. 菜单设置文件格式
# 等待用户选择菜单项的时间(以秒计),超时则引导默认的选项
timeout 30

# 默认选项,第一项
default 0

# 如果第一项出错,则启动下面的后备选项
fallback 1

# 引导 GNU Hurd,其中title就是菜单中显示的提示字符串
title GNU/Hurd
root (hd0,0)
kernel /boot/gnumach.gz root=hd0s1
module /boot/serverboot.gz

# 引导 Linux
title GNU/Linux
root (hd1,0)
kernel /vmlinuz root=/dev/hdb1

# 引导Mach (kernel映象文件放在软盘)
title Utah Mach4 multiboot
root (hd0,2)
pause Insert the diskette now!!
kernel (fd0)/boot/kernel root=hd0s3
module (fd0)/boot/bootstrap

# 引导 FreeBSD
title FreeBSD 3.4
root (hd0,2,a)
kernel /boot/loader

# 引导 OS/2
title OS/2
root (hd0,1)
makeactive
chainloader +1

# 引导 Windows NT 或者 Windows95,98
title Windows NT / Windows 95,98 boot menu
rootnoverify (hd0,0)
chainloader +1

# 安装 GRUB 到硬盘MBR
title Install GRUB into the hard disk
root (hd0,0)
setup (hd0)

# 改变显示菜单的颜色
title Change the colors
color light-green/brown blink-red/blue

6. GRUB的用户界面介绍
  GRUB的用户界面有三种:命令行模式,菜单模式和菜单编辑模式
  (a) 命令行模式:
  进入命令行模式后GRUB会给出一个命令提示符`grub>`,此时就可以键入命令,按回车执行。此模式下可执行的命令是在menu.lst中可执行的命令的一个子集。此模式下允许类似于Bash shell的命令行编辑功能:
或<右箭头键> 光标右移一个字符

或<左箭头键> 光标左移一个字符

到这一行的开头

到行尾

删除光标处的字符

删除光标左边的字符

删除光标右边的所有字符(包括光标处的字符)

删除光标左边的所有字符(包括光标处的字符)

恢复上次删除的字符串到光标位置

或<向上键> 历史记录中的上一条命令

或<向下键> 历史记录中的下一条命令

  在命令行模式下键有补全命令的功能,如果你敲入了命令的前一部分,键入系统将列出所有可能以你给出的字符串开头的命令。如果你给出了命令,在命令参数的位置按下键,系统将给出这条命令的可能的参数列表,具体的可用命令集将在后面给出。

  (b) 菜单模式
  当存在文件/boot/grub/menu.lst文件时系统启动自动进入此模式。菜单模式下用户只需要用上下箭头来选择他所想启动的系统或者执行某个命令块,菜单的定义在menu.lst文件中,你也可以从菜单模式按键进入命令行模式,并且可以按键从命令行模式返回菜单模式。菜单模式下按键将进入菜单编辑模式。

  (c) 菜单编辑模式
  菜单编辑模式用来对菜单项进行编辑改变,其界面和菜单模式的界面十分类似,不同的是菜单中显示的是对应某个菜单项的命令列表。如果在编辑模式下按下,则取消所有当前对菜单的编辑并回到菜单模式下。在编辑模式下选中一个命令行,就可以对这条指令进行修改,修改完毕后按下,GRUB将提示你确认并完成修改。如果你想在当前命令列表中增加一条命令,按在当前命令的下面增加一条指令,按在当前命令前处增加一条指令。按删除一条指令。

三. 可用的命令列表

  下面是GRUB的可用命令列表:

  仅用于菜单的命令(不包括菜单项内部的启动命令)
==========================================

default num
设置菜单中的默认选项为num(默认为0,即第一个选项),超时将启动这个选项

fallback num
如果默认菜单项启动失败,将启动这个num后援选项。

password passwd new-config-file
关闭命令行模式和菜单编辑模式,要求输入口令,如果口令输入正确,将使用new-config-file
作为新的配置文件代替menu.lst,并继续引导。

timeout sec
设置超时,将在sec秒后自动启动默认选项。

title name ...
开始一个新的菜单项,并以title后的字串作为显示的菜单名。

在菜单(不包括菜单项内部的命令)和命令行方式下都可用的命令
======================================================

bootp
以BOOTP协议初始化网络设备

color normal [highlight]
  改变菜单的颜色,normal是用于指定菜单中非当前选项的行的颜色,highlight是用于指定当前菜单选项的颜色。如果不指定highlight,GRUB将使用normal的反色来作为highlight颜色。指定颜色的格式是“前景色/背景色”,前景色和背景色的可选列表如下:
* black
* blue
* green
* cyan
* red
* magenta
* brown
* light-gray
下面的颜色只能用于背景色
* dark-gray
* light-blue
* light-green
* light-cyan
* light-red
* light-magenta
* yellow
* white
你可以在前景色前加上前缀"blink-",产生闪烁效果,你可以在menu.lst中加上下面这个选项来改变颜色效果:
title OS-BS like
color magenta/blue black/magenta

device drive file
在GRUB命令行中,把BIOS中的一个驱动器drive映射到一个文件file。你可以用这条命令创建一个磁盘映象或者当GRUB不能真确地判断驱动器时进行纠正。如下
grub> device (fd0) /floppy-image
grub> device (hd0) /dev/sd0
这条命令只能在命令行方式下使用,;) 是个例外。

dhcp
用DHCP协议初始化网络设备。目前而言,这条指令其实就是bootp的别名,效果和bootp一样。

hide partition
这条指令仅仅对DOS和WINDOWS有用,当在一个硬盘上存在多个DOS/WIN的主分区时,有时需要这条指令隐藏其中的一个或几个分区,即在分区表中设置“隐藏”位。

rarp
用RARP协议初始化网络设备。

setkey to_key from_key
改变键盘的映射表,将from_key映射到to_key,注意这条指令并不是交换键映射,如果你要交换两个键的映射,需要用两次setkey指令,如下:
grub> setkey capslock control
grub> setkey control capslock

其中的键必须是字母,数字或者下面的一些代表某一键的字符串:
`escape', `exclam', `at', `numbersign', `dollar', `percent',
`caret', `ampersand', `asterisk', `parenleft', `parenright',
`minus', `underscore', `equal', `plus', `backspace', `tab',
`bracketleft', `braceleft', `bracketright', `braceright', `enter',
`control', `semicolon', `colon', `quote', `doublequote',
`backquote', `tilde', `shift', `backslash', `bar', `comma',
`less', `period', `greater', `slash', `question', `alt', `space',
`capslock', `FX' (`X' is a digit), and `delete'.
下面给出了它们和键盘上的键的对应关系:
`exclam'=`!'
`at'=
`numbersign'=`#'
`dollar'=`$'
`percent'=`%'
`caret'=`^'
`ampersand'=`&'
`asterisk'=`*'
`parenleft'=`('
`parenright'=`)'
`minus'=`-'
`underscore'=`_'
`equal'=`='
`plus'=`+'
`bracketleft'=`['
`braceleft'=`{'
`bracketright'=`]'
`braceright'=`}'
`semicolon'=`;'
`colon'=`:'
`quote'=`''
`doublequote'=`"'
`backquote'=``'
`tilde'=`~'
`backslash'=`\'
`bar'=`|'
`comma'=`,'
`less'=`<'
`period'=`.'
`greater'=`>'
`slash'=`/'
`question'=`?'
`space'=` '

unhide partition
仅仅对DOS/WIN分区有效,清除分区表中的“隐藏”位。

仅用于命令行方式或者菜单项内部的命令
=======================================

blocklist file
显示文件file在所占磁盘块的列表。

boot
仅在命令行模式下需要,当参数都设定完成后,用这条指令启动操作系统

cat file
显示文件file的内容,可以用来得到某个操作系统的根文件系统所在的分区,如下:
grub> cat /etc/fstab

chainloader [`--force'] file
把file装入内存进行chainload,除了能够通过文件系统得到文件外,这条指令也可以用磁盘块列表的方式读入磁盘中的数据块,如'+1`指定从当前分区读出第一个扇区进行引导。如果指定了`--force`参数,则无论文件是否有合法的签名都强迫读入,当你在引导SCO UnixWare时需要用这个参数。

cmp file1 file2
比较文件的内容,如果文件大小不一致,则输出两个文件的大小,如下:
Differ in size: 0x1234 [foo], 0x4321 [bar]
如果两个文件的大小一致但是在某个位置上的字节不同,则打印出不同的字节和他们的位移:
Differ at the offset 777: 0xbe [foo], 0xef [bar]
如果两个文件完全一致,则什么都不输出。

configfile FILE
将FILE作为配置文件替代menu.lst。

embed stage1_5 device
如果device是一个磁盘设备的话,将Stage1_5装入紧靠MBR的扇区内。如果device是一个FFS文件系统分区的话,则将Stage1_5装入此分区的第一扇区。如果装入成功的话,输出写入的扇区数。

displaymem
显示出系统所有内存的地址空间分布图。

find filename
在所有的分区中寻找指定的文件filename,输出所有包含这个文件的分区名。参数filename应该给出绝对路径。

fstest
启动文件系统测试模式。打开这个模式后,每当有读设备请求时,输出向底层例程读请求的参数和所有读出的数据

阅读(1696) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~