📄 系统引导管理器grub学习笔记 linuxsir_org.htm
字号:
(hd1,0)+1<BR>makeactive<BR>boot</CODE></DIV><BR><FONT
size=4><B><BR>二、解读grub.conf文件<BR></B></FONT>
<P></P>
<P>我们将来看看grub.conf文件内语句,(注:...)内的东西是我们的解读内容.</P>
<P># grub.conf generated by anaconda<BR>#<BR># Note that you do not have
to rerun grub after making changes to this file<BR># NOTICE: You do not
have a /boot partition. This means that<BR># all kernel and initrd paths
are relative to /, eg.<BR># root (hd0,0)<BR># kernel /boot/vmlinuz-version
ro root=/dev/hda1<BR># initrd /boot/initrd-version.img<BR>#boot=/dev/hda
(注:以上以符号井"#"开头的行表示被注释掉,没有任何意义)<BR>default=0
(注:默认的操作系统就是由default控制的。default后加一个数字n,表明是第
n+1个。需要注意的是,GRUB中,计数是从0开始的,第一个硬盘是hd0,第一 个软驱是fd0,等等。所以,default 0
表示默认的操作系统在这儿是 Red Hat Linux (2.4.18-14)如果你修改成1就是WinXP了)<BR>timeout=3
(注:timeout表示默认等待的时间,这儿是3秒钟。超过3秒,用户还没有作出选
择的话,系统将自动选择默认的操作系统;当然你可以改成任何你乐意的时间)<BR>splashimage=(hd0,0)/boot/grub/splash.xpm.gz
(注:指定开机画面文件splash.xpm.gz的位置)<BR>title Red Hat Linux (2.4.18-14) (注:表示Red
Hat Linux的菜单项)<BR>root (hd0,0) (注:表示第一个硬盘第一个分区,这里的root和系
统内的root不是一码事!详细如下说明)<BR>kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
(注:指定内核的位置,详细说明如下 文)<BR>initrd /boot/initrd-2.4.18-14.img (注:初始化)<BR>title
Microsoft Windows XP (注:表示Microsoft Windows XP的菜单项)<BR>map (hd0) (hd1)
(注:map是命令,详细如下)<BR>map (hd1) (hd0)<BR>root (hd1,0)
(注:这是指第二个硬盘(从硬盘)上第一个分区)<BR>chainloader (hd1,0)+1 (注:链式装入器,装入一个扇区的数据然后把引导
权交给它。详细说明如下)<BR>makeactive<BR>boot</P>
<P>(注:在 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)"。<BR>知道了内核在哪儿,还要具体指出哪个文件是内核文件,这就是kernel的工作。<BR>kernel
/boot/vmlinuz-2.4.18-14 ro
root=LABEL=/说明/boot/vmlinuz-2.4.18-14就是要载入的内核。后面的都是传递给内核的参数。root=LABEL=/
就是linux的硬盘分区表示法,ro是readonly的意思。initrd用来初始的linux
image,并设置相应的参数。<BR>命令map:当你有两块硬盘,一个无法从第二块硬盘启动的操作系统,例如Windowsxp,就可以使用map命令.你能够将hd0映射为hd1,将hd1映射为hd0。换句话说,你可以虚拟的交换两个硬盘而启动所需要的操作系统
。命令形式如下:<BR>grub> map (hd0) (hd1)<BR>grub> map (hd1) (hd0)<BR>GRUB
使用了“链式装入器”(chainloader)。链式装入器从分区 (hd1,0)
的引导记录中装入winxp自己的引导装入器,然后引导它。这就是这种技术叫做链式装入的原因 --
它创建了一个从引导装入器到另一个的链。这种链式装入技术可以用于引导任何版本的 DOS 或
Windows。<BR>GRUB的配置文件要简单就这么简单,如果你要更个性化一点,试一试把“color light-gray/blue
”加在default语句的下面,下一次启动GRUB时,看看有什么变化,再试一试“color light-blue/red",惊喜吗? 有趣吧!
)<BR><FONT size=4><B><BR>三、如何使用grub?<BR></B></FONT></P>
<P>1、安装<BR>你可以从ftp://alpha.gnu.org/pub/gnu/grub
下载GRUB的源代码。<BR>得到文件grub-0.97.tar.gz,所以这样做:<BR>
<DIV class=codeblock><CODE># tar -xvzf
grub-0.97.tar.gz</CODE></DIV><BR>这个命令将解开的文件和目录放在一个名为grub-0.97的目录中。现在运行如<BR>下命令:<BR>
<DIV class=codeblock><CODE>#cd grub-0.97<BR># ./configure</CODE></DIV>
<P></P>
<P>如果你想定制GRUB,使之包含流行的文件系统和对网卡的支持,或者删除你不需要的网卡,可以运行如下命令:<BR>
<DIV class=codeblock><CODE># ./configure --help</CODE></DIV>
<P></P>
<P>这个命令将输出所有的命令选项。现在可以使用—enable和—disable选项增加或<BR>删除对特定网卡的支持。(注意:GRUB支持网络启动)<BR>为了开始编译过程,键入如下命令:<BR>
<DIV class=codeblock><CODE># make<BR># make install</CODE></DIV>
<P></P>
<P>至此你已经为安装GRUB真正做好了准备。<BR>将GRUB的相关文件保存在诸如/boot/grub的目录中是一个好主意。为此,按如下步骤:<BR>1)默认状态下,GRUB所有文件将安装在/usr/share/grub/i386-pc(或者在<BR>/usr/local/share/grub/i386-pc目录下,这只取决于你的shell变量的设置。)<BR>2)建立一个叫做/boot/grub的目录,然后拷贝下列文件到这个目录:<BR>stage1
stage2 * stage1
5<BR>稍候将解释这些文件。同时也要把GRUB(可能在/usr/sbin或者/usr/local/sbin<BR>目录下)拷贝到/boot/grub目录下。<BR>安装GRUB可以分为三个单独的步骤:<BR>1]将“stage1”安装到MBR中。<BR>2]设置“stage2”的地址或者位置。<BR>3]设置一个菜单或选项,用来决定启动哪一个操作系统。</P>
<P>使用下面的命令开始安装GRUB。<BR>
<DIV class=codeblock><CODE>#cd /boot/grub<BR># ./grub</CODE></DIV>
<P></P>
<P>这个命令根据BIOS的设置检测硬件设备,同时产生一些输出信息。这会花较长的时间。<BR>
<DIV class=codeblock><CODE>end_request: I/O error, dev 02:00 (floppy),
sector 0<BR>GRUB version 0.5.96.1 (640K lower / 3072K upper
memory)</CODE></DIV><BR>TAB键可列出可能的命令列表。其它情况下TAB会列出设备或文件名。类似下面的提示会出现:<BR>
<DIV class=codeblock><CODE>grub></CODE></DIV>
<P></P>
<P>现在,假设你将Linux安装在了第一块硬盘的第一个分区中或者/dev/hda1中。记住GRUB的命名规则,将上面的名字改为(hd0,0)。键入下面的命令:<BR>
<DIV class=codeblock><CODE>grub> install (hd0,0)/boot/grub/stage1 (hd0)
(hd0,0)/boot/grub/stage2<BR>p (hd0,0)/boot/grub/menu.conf</CODE></DIV>
<P></P>
<P>现在分析一下这个命令的细节。</P>
<P>install<BR>一个内置的命令,它告诉GRUB将(hd0,0)/boot/grub/stage1安装到hd0的主引导纪录中。<BR>(hd0,0)/boot/grub/stage2<BR>告诉GRUB
stage2映象的位置。<BR>p with the the following options:
(hd0,0)/boot/grub/menu.conf<BR>为菜单的显示设置配置文件。</P>
<P>下面是对这个命令用法的总结:<BR>1.install<BR>2.ource_of_stage1<BR>3.where_to_install<BR>4.source_of_stage2<BR>5.p
source_of_configuration_file</P>
<P>现在,你完成了硬盘上的基本安装工作。</P>
<P>2、在软盘上的安装:</P>
<P>为了在软盘上安装GRUB,你要会用“dd”命令,并且了解它是如何工作的。为了做一张GRUB启动盘,你要将stage1和stage2文件放到软盘的开始扇区中。<BR>安装stage1到软盘上:<BR>插入一张已格式化的软盘,键入命令:<BR>
<DIV class=codeblock><CODE># dd if=stage1 of=/dev/fd0 bs=512
count=1</CODE></DIV>
<P></P>
<P>命令的详细说明如下:<BR>
<DIV class=codeblock><CODE>if=input file<BR>i.e., stage1<BR>of=output
file<BR>i.e., floppy drive (this may be different on your
computer)<BR>bs=bytes to read and write<BR>Here it is 512
bytes.<BR>count=how many times to perform this operation</CODE></DIV>
<P></P>
<P>每次拷贝“bs”数目的块到目标地址。<BR>安装stage2到软盘<BR>
<DIV class=codeblock><CODE># dd if=stage2 of=/dev/fd0 bs=512
seek=1</CODE></DIV><BR>这里的步骤同stage1的相同,除了一个seek选项外。Seek选项将调过一个“bs”。例如,在上面的命令中bs的值是512,这样seek=1意味着将跳过软盘上前512个字节
,从513字节开始。这将使得第一步操作不会覆盖stage1的前512字节。<BR>现在你完成了基本的软盘驱动器安装。
<P></P>
<P>如果已经安装了grub要把grub重新安装到主引导扇区上,只需要简单打入makebootable命令就可以了。<BR><FONT
size=4><B><BR>四、 配置grub<BR></B></FONT></P>
<P>grub启动时会在/boot/grub/中寻找一个名字为menu.lst的配置文件,如果找不到此文件则不进入菜单模式而直接进入命令行模式。<BR>现在,我们来看一下如何在启动后进入各种操作系统,如何建立menu.conf文件。我们就从GRUB支持的启动过程开始。可以有两种方法来完成启动过程:<BR>·A.通过调用内核本地启动<BR>·B.连续启动或者将控制转给另一个引导器<BR>A模式启动过程<BR>1.配置跟设备或者告诉GRUB你的根文件系统。<BR>2.告诉GRUB你的内核影像的位置,然后将参数传送给内核。<BR>3.重新启动,试一下。<BR>为了启动Linux,将内核以bzImage的文件名放在/boot/目录中,跟文件系统是<BR>/dev/hda1,或者GRUB中的(hd0,0)。启动过程如下:<BR>1.root
(hd0,0) [This sets the root partition]<BR>2.kernel /boot/bzImage
root=/dev/hda1 [This sets the
kernel]<BR>B模式启动过程(这种模式假设当前的分区中安装了另一个启动管理器,例如LILO<BR>或者NTLDR):<BR>1.设置根分区但不要安装它<BR>2.激活这个分区<BR>3.配置需要启动的分区的第一个扇区<BR>4.重新启动,看一下效果。<BR>我们在试试启动安装在/dev/hdc1或者(hd1,0)的widows。启动windows的过程如下:<BR>1.rootnoverify
(hd1,0)<BR>2.makeactive<BR>3.chainloader +1 [+1 sets the first sector of
the current root<BR>partition]<BR>4.boot [transfers the control and quits
GRUB]<BR>menu.conf文件:它用于建立启动多操作系统时的菜单。建立menu.conf并不难。它使用简单的英语,就象你在这一节看到的那样。<BR>所有的菜单项目都以没有逗号分隔的“title
TITLENAME”开头。你可以随意设置<BR>TITLENAME。<BR>设置Linux启动菜单步骤如下:<BR>1.设置标题<BR>2.设置根分区<BR>3.设置内核的相应参数<BR>4.启动<BR>一个菜单例子:<BR>
<DIV class=codeblock><CODE>title Red Hat Linux (2.4.18-14)<BR>root
(hd0,0)<BR>kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/<BR>initrd
/boot/initrd-2.4.18-14.img</CODE></DIV>
<P></P>
<P>前面有#的行是一个注释。<BR>建立启动Windows 或者 DOS的菜单:<BR><CODE><BR>title
Windoze<BR>rootnoverify (hd0,0)<BR>makeactive<BR>chainloader
+1<BR>boot<BR>#----<BR></CODE></P>
<P>又或者:<BR>
<DIV class=codeblock><CODE>title Microsoft Windows XP<BR>map (hd0)
(hd1)<BR>map (hd1) (hd0)<BR>root (hd1,0)<BR>chainloader
(hd1,0)+1<BR>makeactive<BR>boot</CODE></DIV>
<P></P>
<P>----<BR>注意:root和rootnoverify都是一样的,把rootnoverify改成root也行。不过经过实践来看。有时引导win时,系统安装好后,是rootnoverify
(hdX.Y)这样形式的,这样会出现windows起不来,出现什么windows什么文件损坏的情况。这时,我们就要把在grub中,引导
windows的那段中的rootnoverify改为root<BR>root英文的意思就是根的意思,在这里是让linux知道自己所处的位置,也就是我们所安装linux的/根分区所在的位置
。<BR>----<BR>如果你安装了两个版本的Windows—一个是你自己用的,另一个给你的家人用的—这样第二个就无法安装,因为有提示说Windows已经安装了。<BR>有一种简单的方法可以安装两个版本的Windows,即在启动时隐藏一个分区而使用另一个。你甚至可以为你的分区设置密码保护,这样可以避免别人错误的加载你的分区。下面介绍如何完成两个Windows的安装,hda1和hda2
或者 (hd0,0) 和(hd0,1),用到的命令有lock, password, hide 和 unhide。<BR>建立windows
项目"My Entry":</P>
<P>
<DIV class=codeblock><CODE>title My Entry<BR>lock<BR>unhide
(hd0,0)<BR>hide (hd0,1)<BR>rootnoverify
(hd0,0)<BR>makeactive<BR>chainloader
+1<BR>boot</CODE></DIV><BR>#----<BR>为了更好的使用lock命令,你需要在配置文件开头使用password命令。Password命令的语法如下:password
secret(“secret”就是密码)。任何时候你都可以通过按p键儿输入密码。<BR>建立Windows 项目"Family Entry"<BR>
<DIV class=codeblock><CODE>title Family Entry<BR>unhide (hd0,1)<BR>hide
(hd0,0)<BR>rootnoverify (hd0,1)<BR>makeactive<BR>chainloader
+1<BR>boot</CODE></DIV><BR>任何人都可以启动这个项目,而无须输入密码。<BR>这有一个使用password命令的有趣的窍门。为了在缺省菜单列表或配置文件中隐藏某些项目,你可以使用下面的命令加载一个定制的列表:<BR>password
secret<BR>在这个命令中,“secret”是密码,而/boot/grub/secret-list.conf是密码文件。这样做之前,你要先进入到根目录或者给出全路径名。例如:<BR>
<DIV class=codeblock><CODE>password secret
(hd0,4)/boot/grub/secret-list.conf</CODE></DIV><BR>还有一个更重要的命令是“map”。当你有两块硬盘,一个无法从第二块硬盘启动的操作系统,例如Windows,就可以使用map命令。例如,你能够将
hd0映射为hd1,将hd1映射为hd0。换句话说,你可以虚拟的交换两个硬盘而启动所需要的操作系统 。命令形式如下:<BR>
<DIV class=codeblock><CODE>grub> map (hd0) (hd1)<BR>grub> map (hd1)
(hd0)</CODE></DIV>
<P></P>
<P>启动FreeBSD:<BR>
<DIV class=codeblock><CODE>title FreeBSD 4.0<BR>root (hd0,4,a)<BR>kernel
/boot/loader<BR>boot</CODE></DIV><BR>#----<BR>这里我们调用了FreeBSD的启动管理器。Root
(hd0,4,a)由四个参数,是因为<BR>FreeBSD对一个单独分区进行了虚拟分割。我们称根分区为“a”。如果FreeBSD占<BR>据了整个第二块硬盘,这里就应该是root
(hd0,a)。这样,就不是调用内核而是调用FreeBSD的启动管理器,它要比调用内核更易使用。<BR>(注意:推荐在使用OpenBSD和GNU/Hurd之前,要先试一下链式加载。)<BR>现在你已经完成了基本的GRUB编译、安装和配置。你对GRUB了解的越多,就越会发现GRUB是一种控制启动的易用和高效的方法。<BR>各种GRUB命令:<BR>
<DIV class=codeblock><CODE>default xx</CODE></DIV>
<P></P>
<P>表明xx是缺省的启动项目<BR>
<DIV class=codeblock><CODE>timeout yy</CODE></DIV>
<P></P>
<P>表明在yy秒后缺省启动项目将启动<BR>
<DIV class=codeblock><CODE>fallback
zz</CODE></DIV><BR>在第一个启动项目失败后,过了timeout时间后,就将启动zz项目。<BR>color<BR>这个命令将生成彩色菜单。它的语法是:color
normal current_selection。这两个域都可以有两个值,形如foreground/background。例如:<BR>
<DIV class=codeblock><CODE>color green/black or
light-gray/blue</CODE></DIV>
<P></P>
<P>你也可以使用相关的数字。<BR>记住:所有的值都是从0开始,所以0是第一个</P>
<P><FONT size=4><B><BR>六、 GRUB启动盘<BR></B></FONT></P>
<P>要制作引导盘,需执行一些简单的步骤。首先,在新的软盘上创建 ext2 文件系统。然后,将其安装,并将一些 GRUB
文件复制到该文件系统,最后运行 "grub" 程序,它将负责设置软盘的引导扇区。<BR>将一张空盘插入 1.44MB 软驱,输入:<BR>
<DIV class=codeblock><CODE># mke2fs /dev/fd0</CODE></DIV>
<P></P>
<P>创建了 ext2 文件系统后,需要安装该文件系统:<BR>
<DIV class=codeblock><CODE># mount /dev/fd0 /mnt/floppy</CODE></DIV>
<P></P>
<P>现在,需要创建一些目录,并将一些关键文件(原先安装 GRUB 时已安装了这些文件)复制到软盘:<BR>
<DIV class=codeblock><CODE># mkdir /mnt/floppy/boot<BR># mkdir
/mnt/floppy/boot/grub<BR># cp /boot/grub/stage1 /mnt/floppy/boot/grub<BR>#
cp /boot/grub/stage2 /mnt/floppy/boot/grub</CODE></DIV>
<P></P>
<P>再有一个步骤,就能得到可用的引导盘。<BR>在linux bash中,从 root
用户运行“grub”,该程序非常有趣并值得注意,因为它实际上是GRUB 引导装入器的半功能性版本。尽管 Linux 已经启动并正在运行,您仍可以运行
GRUB 并执行某些任务,而且其界面与使用 GRUB 引导盘或将 GRUB 安装到硬盘 MBR 时看到的界面(即GRUB控制台)完全相同。<BR>在
grub> 提示符处,输入:<BR>
<DIV class=codeblock><CODE>grub> root (fd0)<BR>grub> setup
(fd0)<BR>grub> quit</CODE></DIV>
<P></P>
<P>现在,引导盘完成了。<BR>如果要把GRUB装到硬盘上,也很容易。这个过程几乎与引导盘安装过程一样。首先,需要决定哪个硬盘分区将成为 root
GRUB 分区。在这个分区上,创建 /boot/grub 目录,并将 stage1 和 stage2
文件复制到该目录中,可以通过重新引导系统并使用引导盘,或者使用驻留版本的 GRUB 来执行后一步操作。在这两种情况下,启动 GRUB,并用 root
命令指定 root 分区。例如,如果将 stage1 和 stage2 文件复制到 hda5 的 /boot/grub 目录中,应输入 "root
(hd0,4)"。接着,决定在哪里安装 GRUB -- 在硬盘的 MBR,或者如果与 GRUB
一起使用另一个“主”引导装入器,则安装在特定分区的引导记录中。如果安装到 MBR,则可以指定整个磁盘而不必指定分区,如下(对于 hda):<BR>
<DIV class=codeblock><CODE>grub> setup (hd0)</CODE></DIV>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -