GRUB多系统启动引导.docx
《GRUB多系统启动引导.docx》由会员分享,可在线阅读,更多相关《GRUB多系统启动引导.docx(10页珍藏版)》请在冰豆网上搜索。
GRUB多系统启动引导
GRUB
目录
1什么是GRUB?
2下载GRUB
3制作引导盘
4GRUB命名约定
5装入内核
6重新调查引导软盘
7两阶段过程
8搜索和恢复
9硬盘引导
10引导菜单
11理解引导菜单
12GRUB的弹性
GRUB-什么是GRUB?
GRUB是引导装入器--它负责装入内核并引导Linux系统。
GRUB还可以引导其它操作系统,如FreeBSD、NetBSD、OpenBSD、GNU、HURD和DOS,以及Windows95、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引导盘。
请不要担心;在修改引导过程之前,我会告诉您。
现在开始。
访问ftp:
//alpha.gnu.org/gnu/grub/并下载可以找到的最新版本的GRUBtar压缩包。
最新的tar压缩包是grub-0.5.96.1.tar.gz。
下载了最新版本后,就可以安装了。
安装期
这里是从tar压缩包安装GRUB所需输入的命令。
我将在/tmp中编译源文件,并将所有部分都安装到硬盘的/usr目录下。
从root用户,输入以下命令:
#cd/tmp
#tarzxvf/path/to/archive/here/grub-0.5.96.1.tar.gz
#cdgrub-0.5.96.1
#./configure--prefix=/usr
#make
#makeinstall
现在已经安装了GRUB,准备开始使用它。
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控制台将启动,显示如下:
GRUBversion0.5.96.1(640Klower/3072Kuppermemory)
[MinimalBASH-likelineeditingissupported.Forthefirstword,TAB
listspossiblecommandcompletions.AnywhereelseTABliststhepossible
completionsofadevice/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正在运行)。
装入引导盘时,在屏幕顶部将出现一条消息,告诉您正在装入第一阶段和第二阶段。
几秒后,将会出现一个熟悉的屏幕,显示如下:
GRUBversion0.5.96.1(640Klower/3072Kuppermemory)
[MinimalBASH-likelineeditingissupported.Forthefirstword,TAB
listspossiblecommandcompletions.AnywhereelseTABliststhepossible
completionsofadevice/filename.]
grub>;
可以看到,这些内容与在Linux中以驻留方式运行GRUB时出现的消息完全相同--只不过现在我们是使用GRUB来引导Linux。
在Linux中,当谈到"root"文件系统时,通常是指主Linux分区。
但是,GRUB有它自己的root分区定义。
GRUB的root分区是保存Linux内核的分区。
这可能是您的正式root文件系统,也可能不是。
例如,在GentooLinux中,有一个单独的小分区专用于保存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)
Possiblepartitionsare:
Partitionnum:
0,Filesystemtypeisext2fs,partitiontype0x83
Partitionnum:
1,Filesystemtypeunknown,partitiontype0x82
Partitionnum:
2,Filesystemtypeunknown,partitiontype0x7
Partitionnum:
4,Filesystemtypeisreiserfs,partitiontype0x83
Partitionnum:
5,Filesystemtypeisreiserfs,partitiontype0x83
如您所见,GRUB的交互式硬盘和分区名称实现功能非常有条理。
这些,只需要好好理解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)(hitenter)
Filesystemtypeisreiserfs,partitiontype0x83
GRUB-装入内核
现在已安装了root文件系统,到装入内核的时候了。
在GRUB提示中,依次输入"kernel"、空格、到内核的路径、空格、内核参数,如root参数(GRUB将自动插入适当的"mem="参数)。
我在我的系统中输入:
grub>;kernel/boot/bz2.4root=/dev/hda5
[Linux-bzImage,setup=0x1200,size=0xe1a30]
请留意"root="内核参数,它非常重要。
它应该指向保存root文件系统的Linux分区。
您也许要写下到目前为止输入的命令,这样在教程后面讲述如何创建GRUB引导菜单时,就可以迅速找到它们。
Root,内核,引导!
您已经安装了root文件系统并装入了内核。
现在,可以引导了。
只要输入"boot",Linux引导过程就将开始。
GRUB-重新调查引导软盘
如果一切正常,就可以使用使用GRUB引导盘来引导当前Linux发行版。
如您所见,GRUB是功能非常强大的引导装入器,它让您可以随意动态配置以进行引导。
我将向您介绍如何创建GRUB引导菜单,这样就可以从菜单中进行OS选择,而不是输入三行命令
来引导Linux。
但在动手之前,现在是深入了解GRUB幕后是如何工作的好时机。
我将说明引导盘引导过程的工作原理,这样您就可以对GRUB有一个更好的评价和了解。
GRUB-两阶段过程
要制作引导软盘,需要做两件事--将文件复制到软盘的ext2文件系统的/boot/grub目录中,运行GRUB的安装程序。
运行GRUB安装程序时,GRUB将"stage1"装入器安装到软盘的引导记录中。
它还将stage1装入器配置成从ext2文件系统直接装
入stage2。
通常,GRUB通过在包含stage2数据的软盘上创建一列块来完成此操作,这样stage1装入stage2时不必知道ext2文件系统的任何情况。
但是,大多数情况下,GRUB在安装完stage1之后,会立即将stage1.5装入器安装到引导记录中。
这个特殊的stage1.5允许无需使用原始块列表就能从ext2文件系统装入stage2,却要更灵活的标准基于路径的方法。
GRUB理解文件系统结构的这一能力使GRUB比LILO更强壮。
例如,如果正好在整理引导盘文件系统的碎片,stage1就可以找到stage2(归功于ext2stage1.5)。
而LILO就不能完成此项操作。
因为LILO只能依赖于映射文件,每次更新内核或在磁盘上物理移动数据时,即使不更改路径,也需要重新运行它。
阶段1、1.5和2第3页
您也许会想知道:
如果使用FAT而不是ext2文件系统创建引导盘,GRUB是否可以工作。
是的,它可以工作,因为在输入"setup(fd0)"时,GRUB会安装与root文件系统类型匹配的stage1.5。
即使没有没有空间可以安装stage1.5,GRUB仍可以通过追溯到更原始的块列表,来装入stage2
GRUB-搜索和恢复
在继续讨论之前,先研究一个与引导软盘相关的实用提示。
由于GRUB的交互式性质,它为恢复软盘生成了一个很好的引导装入器。
但是,如果将好的内核复制到引导盘上,那它就更好了。
那样,即使硬盘上的内核坏了或者被意外删除了,也可以追溯到引导盘内核,并启动和运行系统。
要将备用内核复制到引导盘,执行以下操作:
#mount/dev/fd0/mnt/floppy
#cp/path/to/bzImage/mnt/floppy/boot
#umount/dev/fd0
现在,软盘已包含备用内核,可以在GRUB中使用它来引导Linux发行版,操作如下:
grub>;root(fd0)
grub>;kernel/boot/bzImageroot=/dev/hda5(将/dev/hda5更改成想要引导的分区名称)
grub>;boot
GRUB-硬盘引导
好,现在如何将GRUB安装到硬盘上?
这个过程几乎与引导盘安装过程一样。
首先,需要决定哪个硬盘分区将成为rootGRUB分区。
在这个分区上,创建/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)。
现在,应创建引导菜单,这样就不必在每次引导系统时都输入那些命令。
GRUB-引导菜单
要创建菜单,只需在/boot/grub中创建一个简单的文本文件menu.lst。
如果将它放在正确位置,它将在rootGRUB驱动器的stage1和stage2文件的旁边。
这里是一个样本menu.lst文件,可以将它作为一个您的菜单的基础:
default0
timeout30
colorwhite/blueblue/green
title=BootLinux
root(hd0,4)
kernel/boot/bzImageroot=/dev/hda5
title=BootLinuxusinginitrd
root(hd0,5)
kernel/boot/bzImageroot=/dev/loop0init=/initdisk.gz
initrd/initdisk.gz
title=WindowsNT
root(hd0,3)
chainloader+1
我将在以下的屏面中说明menu.lst格式。
GRUB-理解引导菜单
引导菜单很容易理解。
前三行设置缺省菜单项(项目号0,第一个)、设置超时值(30秒),并选择整个菜单的一些颜色。
接着的三行配置"BootLinux"菜单项。
要创建手工引导命令系列之外的菜单项,只要添加一行"title="作为第一行,并从最后一行中除去"boot"命令(GRUB会自动添加这个命令)。
接着的四行显示了如何使用GRUB来引导initrd(初始root磁盘),如果您愿意的话。
现在,讨论最后三行……
链式装入器
这里是示例menu.lst的最后三行……
title=WindowsNT
root(hd0,3)
chainloader+1
这里,我添加了一项来引导WindowsNT。
要完成此操作,GRUB使用了“链式装入器”。
链式装入器从分区(hd0,3)的引导记录中装入NT自己的引导装入器,然后引导它。
这就是这种技术叫做链式装入的原因--它创建了一个从引导装入器到另一个的链。
这种链式装入技术可以用于引导任何版本的DOS或Windows。
GRUB-GRUB的弹性
GRUB最好的优点之一就是其强健的设计--在不断使用它时请别忘了这点。
如果更新内核或更改它在磁盘上的位置,不必重新安装GRUB。
事实上,如有必要,只要更新menu.lst文件即可,一切将保持正常。
只有少数情况下,才需要将GRUB引导装入器重新安装到引导记录。
首先,如果更改GRUBroot分区的分区类型(例如,从ext2改成ReiserFS),则需要重新安装。
或者,如果更新/boot/grub中的stage1和stage2文件,由于它们来自更新版本的GRUB,很有可能要重新安装引导装入器。
其它情况下,可以不必理睬!
在这里只是介绍了GRUB的一部分。
如需所有GRUB功能的完整描述,请阅读GRUB出色的GNU文档。
只要在bash提示中输入
"infogrub"就可以阅读该文档。