个人工具
登录
查看“GRUB入门教程”的源代码 - Ubuntu中文
页面
讨论
查看源代码
历史
搜索
导航
首页
最近更改
随机页面
页面分类
帮助
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息
查看“GRUB入门教程”的源代码
来自Ubuntu中文
←
GRUB入门教程
跳转至:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
原文出处:未知 原文作者:未知 授权许可:[http://www.creativecommons.cn/licenses/by-nc-sa/1.0/ 创作共用协议] 翻译人员:未知 编辑人员:rApJtR 校对人员:无 适用版本: 文章状态:尚待完善 备注:从论坛的翻译区整理过来,帖子作者millenniumdark 却不能确定是否是他翻译的,另外原文来源不明,等待核实。 引用地址:http://forum.ubuntu.org.cn/viewtopic.php?t=2475 ---- === 教程提示 === ==== 我应该学习这门教程吗? ==== 本教程向您显示如何安装和使用 GRUB (Grand Unified Boot Loader)。就像 LILO 一样,GRUB 允许引导 Linux 系统,它负责装入和引导内核。但与 LILO 不同,GRUB 的功能非常多,更易于使用,更可靠和灵活,而且非常小巧。 如果已经有些熟悉 LILO,并了解了磁盘分区的基本知识,那么您就掌握了学习本教程应具备的预备知识。通过学习本教程和安装 GRUB 之后,您将改进 Linux 系统的可靠性和可用性。 如果只是想尝试 GRUB,可以学习本教程的前半部分,并制作 GRUB 引导盘,然后练习使用它来引导系统。这样做以后,您将学会在紧急情况下如何使用 GRUB 来引导系统。 但是,如果想更深入地体验 GRUB,可以学完整个教程,它将为您演示如何将 GRUB 设置成缺省引导装入器。 === GRUB 基础 === ==== 什么是 GRUB? ==== GRUB 是引导装入器 -- 它负责装入内核并引导 Linux 系统。GRUB 还可以引导其它操作系统,如 FreeBSD、NetBSD、OpenBSD、GNU HURD 和 DOS,以及 Windows 95、98、NT 和 2000。尽管引导操作系统看上去是件平凡且琐碎的任务,但它实际上很重要。如果引导装入器不能很好地完成工作或者不具有弹性,那么就可能锁住系统,而无法引导计算机。另外,好的引导装入器可以给您灵活性,让您可以在计算机上安装多个操作系统,而不必处理不必要的麻烦。 ==== GRUB 很棒 ==== GRUB 是一个很棒的引导装入器。它有许多功能,可以使引导过程变得非常可靠。例如,它可以直接从 FAT、minix、FFS、ext2 或 ReiserFS 分区读取 Linux 内核。这就意味着无论怎样它总能找到内核。另外,GRUB 有一个特殊的交互式控制台方式,可以让您手工装入内核并选择引导分区。这个功能是无价的:即使 GRUB 菜单配置不正确,你仍可以引导系统。哦,对了 -- 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/ (当前可用的ftp地址为:ftp://ftp.gnu.org/gnu/grub) 并下载可以找到的最新版本的 GRUB tar 压缩包。我编写本教程时,最新的 tar 压缩包是 grub-0.5.96.1.tar.gz。下载了最新版本后,就可以安装了。 也可以使用git来安装:git clone git://git.savannah.gnu.org/grub.git ==== 安装步骤 ==== 这里是从 tar 压缩包安装 GRUB 所需输入的命令。我将在 /tmp 中编译源文件,并将所有部分都安装到硬盘的 /usr 目录下。 <pre><nowiki> cd /tmp tar xzvf /path/to/archive/here/grub-0.5.96.1.tar.gz cd grub-0.5.96.1 sudo ./configure --prefix=/usr sudo make sudo make install </nowiki></pre> 现在已经安装了 GRUB,准备开始使用它。 注意:如果在运行./configure --prefix=/usr 时出现提示 configure: error: xxxxx is not found (表示缺少xxxxx组件,配置中止) 可以用sudo apt-get install xxxxx 安装相应组件,然后再执行配置工作。 如果你使用grub-2.00在运行make时出现 make[4]: *** argp-fmtstream.o] Error 1 make[3]: *** [all-recursive] Error 1 等等的错误提示,请不要慌张,这是glibc-2.16.0的问题,你可以用一个命令来绕过去: sed -i -e '/gets is a security/d' grub-core/gnulib/stdio.in.h ==== 制作引导盘 ==== ===== 准备开始 ===== 要制作引导盘,需执行一些简单的步骤。首先,在新的软盘上创建 ext2 文件系统。然后,将其安装,并将一些 GRUB 文件复制到该文件系统,最后运行 "grub" 程序,它将负责设置软盘的引导扇区。 ===== 准备磁盘 ===== 好,将一张空盘插入 1.44MB 软驱,输入: <pre><nowiki> sudo mke2fs /dev/fd0 </nowiki></pre> 创建了 ext2 文件系统后,需要安装该文件系统: <pre><nowiki> sudo mount /dev/fd0 /mnt/floppy </nowiki></pre> 现在,需要创建一些目录,并将一些关键文件(原先安装 GRUB 时已安装了这些文件)复制到软盘: <pre><nowiki> sudo mkdir /mnt/floppy/boot sudo mkdir /mnt/floppy/boot/grub sudo cp /usr/share/grub/i386-pc/stage1 /mnt/floppy/boot/grub sudo cp /usr/share/grub/i386-pc/stage2 /mnt/floppy/boot/grub </nowiki></pre> 只需要再有一个步骤,就能得到可用的引导盘。 ===== 启动GRUB ===== 解压、编译和安装 GRUB 源 tar压缩包时,会将程序 grub 放到 /usr/sbin 中。该程序非常有趣并值得注意,因为它实际上是 GRUB 引导装入器的半功能性版本。是的,尽管 Linux 已经启动并正在运行,您仍可以运行 GRUB 并执行某些任务,而且其界面与使用 GRUB 引导盘或将 GRUB 安装到硬盘 MBR 时看到的界面完全相同。 这是有趣的设计策略,现在该使用驻留版本的 GRUB 来设置引导盘的引导扇区了。从 root 用户,输入 "grub"。GRUB 控制台将启动,显示如下: <pre><nowiki> 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> </nowiki></pre> 欢迎使用 GRUB 控制台。现在,研究命令。 ===== 完成引导盘 ===== 在 grub> 提示符处,输入: <pre><nowiki> grub> root (fd0) grub> setup (fd0) grub> quit </nowiki></pre> 现在,引导盘完成了。在继续下一步骤之前,在看一下刚才输入的命令。第一个 "root" 命令告诉 GRUB 到哪里查找辅助文件 stage1 和 stage2。缺省情况下,GRUB 会在指定的分区或磁盘上的 /boot/grub 目录中进行查找。在安装引导盘时,也就是几分钟以前,我们已将这些文件复制到正确的位置。接着,输入了 setup 命令,它告诉 GRUB 将引导装入器安装到软盘的引导记录上;我们将在以后详细讨论这一过程。然后退出。现在,已经制作好引导盘,可以开始使用 GRUB 了。 === 使用 GRUB === ==== 准备 ==== 使用 GRUB 引导系统之前,需要知道一些信息。首先,应知道哪个分区保存了 Linux 内核,以及 root 文件系统的分区名称。然后,应查看现有 LILO 配置来寻找需要传递给内核的变量,如 "mem=128M"。一旦获取了这些信息,就可以开始了。 ==== 启动 GRUB ==== 要启动 GRUB,需要关闭系统并退出引导盘。如果由于某些原因而不能立即关闭系统(比如上班时在部门的服务器上测试 GRUB),那么只要在提示中输入 "grub" 并继续操作。所有程序的运行情况都不会改变,只是您不能执行引导(因为 Linux 正在运行)。 ==== 首次接触 ==== 装入引导盘时,在屏幕顶部将出现一条消息,告诉您正在装入第一阶段和第二阶段。几秒后,将会出现一个熟悉的屏幕,显示如下: <pre><nowiki> 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> </nowiki></pre> 可以看到,这些内容与在 Linux 中以驻留方式运行 GRUB 时出现的消息完全相同 -- 只不过现在我们是使用 GRUB 来引导 Linux。 ==== "root" ==== 在 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 键: <pre><nowiki> grub> root ( </nowiki></pre> 现在,按一次 Tab 键。如果系统中有多个硬盘,GRUB 将显示可能完成的列表,从 "hd0" 开始。如果只有一个硬盘,GRUB 将插入 "hd0,"。如果有多个硬盘,继续进行,在 ("hd0") 中输入名称并在名称后紧跟着输入逗号,但不要按 Enter 键。部分完成的 root 命令看起来如下: <pre><nowiki> grub> root (hd0, </nowiki></pre> 现在,继续操作,再按一次 Tab 键。GRUB 将显示特定硬盘上所有分区的列表,以及它们的文件系统类型。在我的系统中,按 Tab 键时得到以下列表: <pre><nowiki> 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 </nowiki></pre> 如您所见,GRUB 的交互式硬盘和分区名称实现功能非常有条理。这些,只需要好好理解 GRUB 新奇的硬盘和分区命名语法,然后就可以继续操作了。 ==== GRUB 命名约定 ==== 到目前为止,您可能会感到一点困惑,因为 GRUB 所使用的硬盘/分区命名约定与 Linux 使用的命名约定不同。在 Linux 中,第一个硬盘的第五个分区称作 "hda5"。而 GRUB 把这个分区称作 "(hd0,4)"。GRUB 对硬盘和分区的编号都是从 0 开始计算。另外,硬盘和分区都用逗号分隔,整个表达式用括号括起。现在,回来看一下 GRUB 提示,可以发现如果要引导 Linux 硬盘 hda5,应输入 "root (hd0,4)"。如果已经明白了 GRUB 硬盘/分区命名,您也许要调整当前 root 命令行,以使它指向保存 Linux 内核的分区。按以下格式输完命令,然后按 Enter 键: <pre><nowiki> grub> root (hd0,4) (hit enter) Filesystem type is reiserfs, partition type 0x83 </nowiki></pre> === GRUB 内幕 === ==== 重新调查引导软盘 ==== 如果一切正常,就可以使用使用 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 ==== 您也许会想知道:如果使用 FAT 而不是 ext2 文件系统创建引导盘,GRUB 是否可以工作。是的,它可以工作,因为在输入 "setup (fd0)" 时,GRUB 会安装与 root 文件系统类型匹配的 stage1.5。即使没有没有空间可以安装 stage1.5,GRUB 仍可以通过追溯到更原始的块列表,来装入 stage2。 ==== 搜索和恢复 ==== 在继续讨论之前,先研究一个与引导软盘相关的实用提示。由于 GRUB 的交互式性质,它为恢复软盘生成了一个很好的引导装入器。但是,如果将好的内核复制到引导盘上,那它就更好了。那样,即使硬盘上的内核坏了或者被意外删除了,也可以追溯到引导盘内核,并启动和运行系统。要将备用内核复制到引导盘,执行以下操作: <pre><nowiki> sudo mount /dev/fd0 /mnt/floppy sudo cp /path/to/bzImage /mnt/floppy/boot sudo umount /dev/fd0 </nowiki></pre> 现在,软盘已包含备用内核,可以在 GRUB 中使用它来引导 Linux 发行版,操作如下: <pre><nowiki> grub> root (fd0) grub> kernel /boot/bzImage root=/dev/hda5 (将 /dev/hda5 更改成想要引导的分区名称) grub> boot </nowiki></pre> ==== 硬盘引导 ==== 好,现在如何将 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): <pre><nowiki> grub> setup (hd0) </nowiki></pre> 如果要将 GRUB 安装到 /dev/hda5 的引导记录中,应输入: <pre><nowiki> grub> setup (hd0,4) </nowiki></pre> 现在,已安装 GRUB。引导系统时,应该立即以 GRUB 的控制台方式结束(如果安装到 MBR)。现在,应创建引导菜单,这样就不必在每次引导系统时都输入那些命令。 ==== 引导菜单 ==== 要创建菜单,只需在 /boot/grub 中创建一个简单的文本文件 menu.lst。如果将它放在正确位置,它将在 root GRUB 驱动器的 stage1 和 stage2 文件的旁边。这里是一个样本 menu.lst 文件,可以将它作为一个您的菜单的基础: <pre><nowiki> 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 </nowiki></pre> 我将在以下的屏面中说明 menu.lst 格式。 ==== 理解引导菜单 ==== 引导菜单很容易理解。前三行设置缺省菜单项(项目号 0,第一个)、设置超时值(30 秒),并选择整个菜单的一些颜色。 接着的三行配置 "Boot Linux" 菜单项。要创建手工引导命令系列之外的菜单项,只要添加一行 "title=" 作为第一行,并从最后一行中除去 "boot" 命令(GRUB 会自动添加这个命令)。 接着的四行显示了如何使用 GRUB 来引导 initrd(初始 root 磁盘),如果您愿意的话。现在,讨论最后三行…… 链式装入器(chainloader) 这里是示例 menu.lst 的最后三行…… <pre><nowiki> title=Windows NT root (hd0,3) chainloader +1 </nowiki></pre> 这里,我添加了一项来引导 Windows NT。要完成此操作,GRUB 使用了“链式装入器”。链式装入器从分区 (hd0,3) 的引导记录中装入 NT 自己的引导装入器,然后引导它。这就是这种技术叫做链式装入的原因 -- 它创建了一个从引导装入器到另一个的链。这种链式装入技术可以用于引导任何版本的 DOS 或 Windows。 === 总结 === ==== GRUB 的弹性 ==== GRUB 最好的优点之一就是其强健的设计 -- 在不断使用它时请别忘了这点。如果更新内核或更改它在磁盘上的位置,不必重新安装 GRUB。事实上,如有必要,只要更新 menu.lst 文件即可,一切将保持正常。 只有少数情况下,才需要将 GRUB 引导装入器重新安装到引导记录。首先,如果更改 GRUB root 分区的分区类型(例如,从 ext2 改成 ReiserFS),则需要重新安装。或者,如果更新 /boot/grub 中的 stage1 和 stage2 文件,由于它们来自更新版本的 GRUB,很有可能要重新安装引导装入器。其它情况下,可以不必理睬! ubuntu 10.10 以后的版本,如果修改了grub.cfg 文件,需要执行 update-grub 命令 才能起作用。 ==== 优秀的 GRUB 参考资料 ==== 我们在这里只是介绍了 GRUB 的一部分。例如,可以使用 GRUB 来执行网络引导,引导 BSD 文件系统,或更多操作。另外,GRUB 有许多配置和安全性命令也很有用。如需所有 GRUB 功能的完整描述,请阅读 GRUB 出色的 GNU 文档。只要在 bash 提示中输入 "info grub" 就可以阅读该文档。 希望您喜欢本教程,喜欢 GRUB (Grand Unified Boot Loader) 的强大功能和灵活性!
返回至
GRUB入门教程
。