主要更新包括 GRUB 2 小节中的 GRUB 2 新信息,以及 GRUB 2 的恢复镜像 小节的 GRUB 2 恢复镜像和闪存驱动器的使用。LPI 已经从目标中删除了 LILO,所以 LILO 小节出现在了本文的后半部分。其他小节包含一些反映 GRUB 2 的微小更新,它们是目标和修订内容订单的一部分。
在本文中,学习为一个 Linux 系统选择、安装和配置引导管理器。您将学习:
配置多个引导位置和备份引导选项 安装和配置一个启动加载程序,比如 GRUB、GRUB 2 或 LILO 在启动时添加引导参数或运行启动加载程序命令 恢复常见引导问题 使用 GRUB Legacy 引导 GRUB 2 系统
本文将讨论 PC 启动过程和 Linux 中使用的 3 个主要启动加载程序:GRUB、GRUB 2 和 LILO,它们可以帮助您准备 Linux ">Professional Institute's Junior Level Administration (LPIC-1) 考试 101 中主题 102 下的目标 102.2。 该目标的权值为 2。请注意,LPIC-1 不再要求掌握 LILO。本文包含 LILO 内容以便于您对其有所了解。
先决条件
为了最有效地利用本系列中的文章,您应该具有基本的 Linux 知识,并准备一个 Linux 系统,用于练习本文介绍的命令。您还应该熟悉文章 “学习 Linux 101:硬盘布局” 中讨论的硬盘驱动器布局。有时候不同版本的程序输出格式不同,因此您所得到的结果未必总是与这里所示的清单和图相同。
注意:本文中的图像是从启动过程初期采集的屏幕截图。如果您正在使用一个屏幕读取器阅读本文,您可能会发现拥有对应的配置文件以便参考的好处;从本文后面的 下载 部分下载它们。
启动过程概述
在深入了解具体启动加载程序之前,先回顾一下如何启动或引导 PC。名为 BIOS(表示 Basic Input Output Service)的代码存储在一个非临时内存中,比如 ROM、EEPROM 或闪存。当打开或重新启动 PC 时,会执行这个代码。通常,它执行一个启动自测 (POST) 来检查机器。最后,它从引导驱动器上的主引导记录(MBR)加载第一个扇区。
正如文章 “学习 Linux 101:硬盘布局” 所述,MBR 还包含分区表,因此 MBR 中的可执行代码小于 512 字节,这个代码量不算多。注意,每个磁盘(甚至是软盘))都在它的 MBR 中包含可执行代码,即使这个代码只够输出一条消息,比如 “Non-bootable disk in drive A:(驱动器 A 中没有可引导磁盘:)”。这个由 BIOS 从第一扇区加载的代码称为第一阶段启动加载程序 或阶段 1 启动加载程序。
MS DOS、PC DOS 和 Windows® 操作系统使用的标准硬盘驱动器 MBR 会检查分区表,以查找标记为 active 的引导驱动器上的主分区,从该分区加载第一个扇区,然后将控制权交给已加载的代码。这个新的代码片段也称为分区引导记录。分区引导记录实际上是阶段 1 的另一个启动加载程序,但它只能从分区加载一组块。该新组块中的代码称为阶段 2 启动加载程序。MS-DOS 和 PC-DOS 使用的阶段 2 加载程序直接继续加载操作系统其余部分。以上就是操作系统启动并运行的引导进程。
这个引导进程对于单操作系统很适用。但是,如果您想要使用多个操作系统,比如 OS/2、Windows XP 和 3 个不同的 Linux 发行版,那么会出现什么样的情况呢?您可以 使用某个程序(比如 DOS FDISK 程序)来更改活动分区并重新启动,但这种方法比较笨拙。此外,一个磁盘只能拥有 4 个主分区,而标准 MBR 只能拥有一个主分区;系统不能从逻辑分区引导。但我们假设的示例提到了 5 种操作系统,每个系统都需要一个分区。
该问题的解决方案是使用一些特殊代码,允许用户选择引导哪个操作系统。此类程序包括:
Loadlin 一个 DOS 可执行程序,可以在一个正在运行的 DOS 系统中调用它来引导一个 Linux 分区。如果多引导系统的设置过程很
复杂且存在风险,那么这个代码就能够派上用场。 OS/2 Boot Manager 这个程序安装在一个专用小分区上,分区被标记为 active,标准 MBR 引导进程启动 OS/2 Boot Manager,该程序显示一个菜单,允许选择要启动的操作系统。 智能启动加载程序 该程序可以驻留在操作系统的分区上,通过一个活动分区的分区引导记录或主引导记录进行调用。这类程序包括: BootMagic,Norton PartitionMagic 的一部分 LILO,即 LInux LOader GRUB,即 GRand Unified Boot 加载程序 (现在称为 GRUB Legacy) GRUB 2,最近才在常用发行版中出现的一个新的启动加载程序
显然,如果能够将系统控制权交给某个包含超过 512 字节代码的程序来完成其任务,那么允许从逻辑分区引导或从位于引导驱动器之外的分区引导应该不太难。上述解决方案都支持这些可能性,这是因为它们都能从任意分区加载引导记录,或者是因为它们都对启动引导过程需要加载哪个或哪些文件有所理解。
链式加载
当一个引导管理器获得控制权时,它可能做的一件事就是加载另一个引导管理器。这种现象称为链式加载 (chain loading),通常发生在位于主引导记录 (MBR) 中的引导管理器加载一个分区引导记录中的启动加载程序的时候。当一个 Linux 启动加载程序被请求引导一个 Windows 或 DOS 分区时总是需要进行链式加载,或者当一个 Linux 系统(比如 Fedora)的 Linux 启动加载程序被配置来加载另一个 Linux 系统(比如 Ubuntu)的启动加载程序时,可能也需要链式加载。例如,您可能需要使用一个分区中的 GRUB 启动另一个分区引导记录中的 GRUB 启动加载程序,以便在该分区中启动 Linux 系统。 这是并不常见,我们只是列举了这种可能性。
Linux 启动加载程序
从现在开始,我们将主要关注 GRUB、GRUB 2 和 LILO,因为它们是大多数 Linux 发行版包含的启动加载程序。LILO 已经存在一段时间了,而 GRUB 比较新。最初的 GRUB 现在已成为了 GRUB Legacy,GRUB2 正在 Free Software Foundation 的赞助下进行开发。我们先讨论 GRUB、然后讨论 GRUB2,让您对 GRUB 和 GRUB2 之间的主要区别以及二者如何能够共存有一些了解。在本文其余部分中,我们假设 GRUB 是指 GRUB Legacy,除非上下文特别暗指 GRUB 2。LILO 也有一个新版本,称为 ELILO(设计用于引导使用 Intel 而非 BIOS 的 Extensible Firmware Interface 或 EFI)。
您的发行版的安装过程可能支持选择设置哪个启动加载程序。无论 GRUB、GRUB 2 还是 LILO,都能适应大多数现代磁盘,但是有些版本(最著名的 Fedora)不再包含 LILO。别忘了,磁盘技术已经飞速发展,因此您应该总是确保所选的启动加载程序、Linux 版本(或其他操作系统)以及您的系统 BIOS 适用于您的新磁盘。否则,就有可能导致数据丢失。同样,向现有系统添加新版本时,可能需要确保您的 MBR 中拥有最新的 LILO、GRUB 或 GRUB 2。如果打算从 LVM 或 RAID 磁盘引导,还需要一个较新的启动加载程序版本。
LILO 和 GRUB 中使用的阶段 2 加载程序允许从几个操作系统或版本中选择一个。但是,LILO 和 GRUB 差别很大:只要升级内核或对系统进行其他更改,就需要使用一条命令重新创建 LILO 引导设置;而 GRUB 支持通过一个可编辑配置文本文件来完成这项任务。GRUB2 还需要从一个通常存储在 /etc 中的配置文件执行重构。