Monday, April 30, 2007

[zz]引导过程概述

注:以下资料节选自《LPI 证书 101 考试准备: Linux 安装与包管理》from IBM developerWorks。

引导过程概述

在我们研究 LILO 和 GRUB 之前,先看看 PC 是如何启动(即 引导)的。BIOS(表示 Basic Input Output Service, 基本输入输出服务)代码被存储在非易失内存中,比如 ROM、EEPROM 或闪存。当打开或者重新启动 PC 时,执行此代码。它常常执行一次开机自检(power-on self test,POST),对计算机进行检查。最后,它从引导驱动器上的主引导记录装载第一个扇区。

正如前面的小节 “分区” 所提到的,MBR 还包含分区表,所以 MBR 中的可执行代码量少于 512 字节,这非常少。注意,每个硬盘(甚至软盘)都在它的 MBR 中包含可执行代码,即使这些代码只够输出“Non-bootable disk in drive A:”这样的一条消息。BIOS 从第一个扇区装载的代码被称为第一阶段引导装载程序 或者阶段 1 引导装载程序

MS DOS、PC DOS 和 Windows 操作系统使用的标准硬盘驱动器 MBR 会检查分区表,寻找引导驱动器上标为活动 的主分区,从这个分区装载第一个扇区,并且将控制传递到装载的代码的开头。这个新的代码段也称为分区引导记录(partition boot record)。分区引导记录实际上是另一个第一阶段引导装载程序,但是它能够从这个分区装载一组代码块。这些新代码称为第二阶段引导装载程序。在 MS-DOS 和 PC-DOS 中,第二阶段引导装载程序直接装载操作系统的其余部分。这就是操作系统通过引导自举使自己启动的过程。

对于只有一个操作系统的系统,这种过程工作得很不错。如果有多个操作系统(比如 Windows 98、Windows XP 和三个不同的 Linux 发行版),那么应该怎样做?您 可以 使用某些程序(比如 DOS FDISK 程序)改变活动分区并且重新引导。但这太麻烦了。另外,一个硬盘只能有四个主分区,而且标准 MBR 只能引导一个主分区。但是我们假想的例子有五个操作系统,每个都需要一个分区。天啦!

解决方案就是使用某些特殊代码,让用户选择要引导的操作系统。这种代码包括:

  1. Loadlin,一个 DOS 可执行程序,可以从正在运行的 DOS 系统调用它来引导 Linux 分区。在建立多重引导系统还很复杂而且有风险的年代里,这个程序曾经流行过。
  2. OS/2 Boot Manager,一个安装在专用的小分区中的程序。这个分区被标为“活动的”并且标准 MBR 引导过程启动 Boot Manager,这个程序显示一个菜单,让用户选择要引导的操作系统。
  3. 智能引导装载程序,这种程序可以驻留在一个操作系统分区上,可以由活动分区的分区引导记录或者主引导记录调用。这些程序包括:
    • BootMagic™,即 Norton PartitionMagic™ 的组成部分
    • LILO,即 LInux LOader
    • GRUB,即 GRand Unified Boot loader

很明显,如果能够将系统控制传递给一个代码量超过 512 字节的程序,就不难允许从逻辑分区进行引导,或者从不在引导驱动器上的分区进行引导。这些解决方案都提供了这些可能性,因为它们能够从任意分区装载引导记录,或者因为它们了解为了启动引导过程要装载哪些文件。

从 现在开始,我们将主要关注 LILO 和 GRUB,因为在大多数 Linux 发行版中都有这两种引导装载程序。在发行版的安装过程中,可能会让您选择要安装哪一种。这两种引导装载程序都可以用于大多数现代硬盘。硬盘技术发展得很 快,所以应该确保您选择的引导装载程序、Linux 发行版(或其他操作系统)以及系统的 BIOS 可以支持新硬盘。否则就可能导致数据丢失。

LILO 和 GRUB 中使用的第二阶段装载程序允许在几种操作系统或版本之中选择要装载哪一个。但是,LILO 和 GRUB 的显著差异在于,在修改系统(比如升级内核或做其他修改)之后,需要使用一个命令重新创建 LILO 引导设置,而 GRUB 能够通过一个可编辑的配置文本文件来完成设置更新。LILO 的历史比较长,GRUB 比较新。原来的 GRUB 现在成了 GRUB Legacy,GRUB 2 正在 Free Software Foundation 的赞助下进行开发。


No comments: