3.1.2. 第二阶段:引载加载程序

引导加载程序是启动过程的第二阶段,由 BIOS 启动。引导加载程序将系统内核映像和 initrd 映像加载到内存并将控制权交给它们。initrd 映像是根文件系统映像,其支持程度依赖于所使用的引导加载程序。

Debian 系统通常使用 Linux 内核作为其默认的系统内核。当前 2.6/3.x 版本 Linux 内核的 initrd 镜像从技术上说是 initramfs(初始化 RAM 文件系统)镜像。基本的 initrd 镜像是 root 文件系统中各个文件使用 cpio 压缩得到的。 内核可以在启动流程中非常早的阶段,在加载基本的 initrd 镜像之前即更新微码。 以未压缩 cpio 格式存储微码二进制文件的 initrd 镜像和基本 initrd 镜像两部分可以联合组成一个 initrd 镜像,从而帮助实现上述功能。

[提示]提示

您可以使用 lsinitramfs(8) 和 unmkinitramfs(8) 这两个工具检查 initrd 镜像文件的内容,它们由 initramfs-tools-core软件包提供。 另见 https://wiki.debian.org/initramfs 以了解更多信息。

Debian 系统默认将 PC 平台的 GRUB 引导加载程序的第一阶段代码安装在 MBR 中。可用的引导加载程序和配置选项如下。

表 3.1. 引导加载程序列表

软件包流行度大小initrd引导加载程序说明
grub-legacyV:0, I:2729支持传统 GRUB可智能识别磁盘分区和文件系统(例如 vfat、ext3…)。
grub-pcV:27, I:825532支持GRUB 第 2 版可智能识别磁盘分区和文件系统(例如 vfat、ext4…)。(默认安装)
grub-rescue-pcV:0, I:16286支持GRUB 第 2 版此为 GRUB 第 2 版的可引导修复映像(CD 和软盘)(PC / BIOS 版本)
liloV:0, I:3693支持Lilo依赖于数据在硬盘上的扇区位置。(较老)
syslinuxV:4, I:54344支持Isolinux可识别 ISO9660 文件系统。引导 CD 使用此项。
syslinuxV:4, I:54344支持Syslinux可识别 MSDOS 文件系统(FAT)。引导软盘使用此项。
loadlinV:0, I:183支持Loadlin新系统从 FreeDOS 或 MSDOS 中启动。
mbrV:0, I:949不支持Neil Turton 的 MBR此为取代 MSDOS MBR 的自由软件。只可识别硬盘分区。
[警告]警告

假如没有从 grub-rescue-pc 软件包中的映像制作出来的可引导修复盘(U盘、CD 或软盘),请勿玩弄引导加载程序。即使硬盘上没有可正常工作的引导加载程序,可引导修复盘也能引导你的系统。

传统 GRUB 的菜单配置文件位于 /boot/grub/menu.lst。例如,文件中有如下的配置条目。

  1. title Debian GNU/Linux
  2. root (hd0,2)
  3. kernel /vmlinuz root=/dev/hda3 ro
  4. initrd /initrd.img

GRUB 第 2 版的菜单配置文件位于 /boot/grub/grub.cfg。此文件由 /usr/sbin/update-grub 根据 “/etc/grub.d/*“ 中的模板及 “/etc/default/grub“ 中的设置自动生成。例如,文件中有如下的配置条目。

  1. menuentry "Debian GNU/Linux" {
  2. set root=(hd0,3)
  3. linux /vmlinuz root=/dev/hda3
  4. initrd /initrd.img
  5. }

这些示例中,GRUB 参数的含义如下。

表 3.2. GRUB 参数的含义

GRUB 参数说明
root使用主磁盘的第 3 个分区,在传统 GRUB 中将此参数设置为 “(hd0,2)“,在 GRUB 第 2 版中将此参数设置为 “(hd0,3)
kernel使用位于 “/vmlinuz“ 的内核,同时将 “root=/dev/hda3 ro“ 作为参数传递给内核
initrd使用位于 “/initrd.img“ 的 initrd/initramfs 映像
[注意]注意

传统 GRUB 使用的分区号为 Linux 内核及各种实用工具使用的分区号减 1。GRUB 第 2 版修复了这个问题。

[提示]提示

在标识一个块设备时,可能需要使用 UUID(参见第 9.5.3 节 “使用 UUID 访问分区”)而不是类似 “/dev/hda3“ 这样的文件名,例如 “root=UUID=81b289d5-4341-4003-9602-e254a17ac232 ro“。

[提示]提示

如果使用了 GRUB,内核的启动参数可以在 /boot/grub/grub.cfg 里面设置。在 Debian 系统里,你不应该直接编辑 /boot/grub/grub.cfg。你可以通过编辑 /etc/default/grub 文件中 GRUB_CMDLINE_LINUX_DEFAULT 的值并运行 update-grub(8) 来更新 /boot/grub/grub.cfg

[提示]提示

通过使用链式引导技术,你可以在一个引导装载程序中启动另一个引导装载程序。

参见 “info grub” 及 grub-install(8)。