Grub 术语

在分区概念章节里,我们已经介绍了 Linux 系统中表示分区的方法 /dev/sda5

  1. /dev/sdMN M a 起始的小写字母,表示硬盘序号;N 1 起始的数字,表示分区序号

Grub 中使用的表示方法为 hd0,1

  1. hdX,Y X 0 起始的数字,表示硬盘序号;Y 0 起始的数字,表示分区序号

留意它们之间的区别:

  • N 从 1 开始计数,X 和 Y从 0 开始计数
  • N 为 1~4,它是一个主分区;N 为 5 或大于 5,它是第(N-4)个逻辑分区。Y 按分区在硬盘上排列的顺序排列,无论它表示的是主分区还是逻辑分区。

举例来说:

分区分布主分区主分区逻辑分区逻辑分区主分区
/dev/sdMNsda1sda2sda5sda6sda3
hdX,Yhd0,0hd0,1hd0,2hd0,3hd0,4

现在我们来看 rootsetup 命令的使用,sudo grub进入 Grub 交互模式:

  1. grub>root (hd0,1)
  2. grub>setup (hd0)

1

这个命令将 Grub 的根分区定位为 “(hd0,1)”

2

这个命令表示将 Grub 安装在“(hd0)”,因为没有指定安装的分区,所以安装位置为 MBR

Grub 的根分区

为 Grub 配置文件 grub/menu.lststage[[39]($73562f067bd2c4e0.md#ftn.grub-stage)]文件所在分区。假如您单独为 /boot 目录挂载了一个分区,那么 Grub 的根分区通常为您系统中 /boot 目录所在的分区。

搞错了根分区,Grub 就不能正确读取配置文件,自然不能正确引导。[40]

系统根目录所在分区

Linux 根目录 / 的挂载分区。Linux 系统的分区挂载信息保存在文件系统分配表 /etc/fstab 文件中

Grub 首先读取根分区[41]中的 /boot/grub/menu.lst 文件,并转到引导分区,如果是 Windows 等系统,则将控制权移动分区引导扇区中的启动管理器。如果是 Linux 系统,则加载内核和设备,并根据 /etc/fstab 文件的内容挂载文件系统。

看这个例子:(假设 Grub 安装在 MBR 中,Grub 的安装位置为 (hd0)

  1. title Linux
  2. root (hd0,0)
  3. kernel (hd0,1)/vmlinuz-2.6.15-25-686 root=/dev/sda3 ro splash vga=0x31b
  4. initrd (hd0,1)/initrd.img-2.6.15-25-686
  5. boot

1

这一行表示引导分区为第一块硬盘的第一个分区 (hd0,0)。如果下面也指定了这个参数,那么下面的优先

2

表示当前系统的 /boot 目录挂载到第一块硬盘的第二个分区 (hd0,1),它是引导分区。一般情况下在 “root”项中指定

3

表示当前系统的 / 目录挂载到第一块硬盘的第三个分区 (hd0,2) ,内核根据该分区中的 /etc/fstab 文件来挂载文件系统

4

同2

[40] Windows 等系统的引导分区为它的安装分区,Linux 系统的引导分区为它的 /boot 目录所在的分区,也就是 Grub 根分区

[41] 配置文件中并不能指定 Grub 根分区,它要在 Grub 安装过程中指定