扫盲行动之四:GRUB三步通

扫盲行动之四:GRUB三步通

朋友,你装好 linux 后是不是每次启动后系统就默认进入到 linux ,想让它变成 windows 吗?请修改你的引导装入器吧(当然它不止这个功能)!由于现在的 linux 都喜欢用 GRUB 来引导, LILO 已越来越少用了,所以我在这里主要给大家讲讲 GRUB 这个东东!!

##################
# GRUB
的优点 #
##################
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,8)
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,8)
现在已安装了 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" 就可以阅读该文档
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值