4.2. 配置 GRUB 引导加载程序

GRUB 是一款引导加载程序,旨在从各种文件系统引导各种操作系统。由于 Linux 可以驻留的根文件系统数量不断增加,GRUB 正变得越来越流行。

GRUB 的文档记录在一个 GNU info 文件中。键入 info grub 以查看文档。

GRUB 配置文件是/boot/grub/menu.lst。有些发行版使用另一个配置文件;例如,Red Hat Linux 使用的文件是/boot/grub/grub.conf.

GRUB 配置文件是解释执行的。语法错误直到机器重启后才会被检测到,因此请注意不要犯输入错误。

编辑 GRUB 配置文件并删除任何 splashimage 条目。如果未删除这些条目,GRUB 0.90 的行为会非常奇怪,会在串行控制台和连接的显示器及键盘之间转移控制权。

如果 GRUB 配置文件中还没有 password 命令,则创建一个哈希密码,请参见图 4-4。密码应该足够安全,因为它可用于获得 root 访问权限。

图 4-4. 使用 md5cryptGRUB 创建哈希密码

grub> md5crypt
Password: **********
Encrypted: $1$U$JK7xFegdxWH6VuppCUSIb.

GRUB 配置文件中使用该哈希密码,如图 图 4-5 所示。

图 4-5. 需要密码的 GRUB 配置

password --md5 $1$U$JK7xFegdxWH6VuppCUSIb.

定义串行端口并配置 GRUB 以使用串行端口,如图 图 4-6 所示。

图 4-6. 用于串行控制台的 GRUB 配置

serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1
terminal serial

--unit是串行端口的编号,从零开始计数,单元 0 为COM1.

请注意,以下的值--parity是完整拼写的no, evenodd。常用的缩写n, eo是不被接受的。

如果串行端口上神秘地没有输出,则怀疑 serialterminal 命令中存在语法错误。

如果您还想使用连接的显示器和键盘以及串行端口来控制 GRUB 引导加载程序,请使用图 4-7 中的替代配置。

图 4-7. 用于串行控制台以及连接的显示器和键盘控制台的 GRUB 配置

password --md5 $1$U$JK7xFegdxWH6VuppCUSIb.
serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1
terminal --timeout=10 serial console

当串行端口和连接的显示器及键盘都配置好后,它们都会要求按下任意键,直到超时到期。如果按下了一个键,则引导菜单将显示在该设备上。令人不安的是,另一个设备什么也看不到。

如果未按下任何键,则引导菜单将显示在以下设备之一上serialconsoleterminal 命令中首先列出的。在 timeout 设置的超时之后,将引导由 default 设置的默认选项。

图 4-8. 当配置为串行和连接的显示器输出时,GRUB 输出到默认设备

Press any key to continue.
Press any key to continue.
Press any key to continue.
Press any key to continue.
Press any key to continue.
Press any key to continue.
Press any key to continue.
Press any key to continue.
Press any key to continue.
Press any key to continue.

    GRUB  version 0.90  (639K lower / 162752K upper memory)

 +-------------------------------------------------------------------------+
 | [ Red Hat Linux (2.4.9-21)   ]                                          |  
 |                                                                         |
 |                                                                         |
 +-------------------------------------------------------------------------+
      Use the ^ and v keys to select which entry is highlighted.
      Press enter to boot the selected OS or 'p' to enter a
      password to unlock the next set of features.

   The highlighted entry will be booted automatically in 10 seconds.

如果您没有使用 VT100 终端,则光标键可能无法用于选择 GRUB 菜单项。图 图 4-8 中显示的说明从字面上看是正确的:“使用 ^ 和 v 键” 表示插入符号键 (Shift-6) 向上移动光标,字母 v 键 (V) 向下移动光标。

请注意,在配置 GRUB 时,涉及到两个超时。按任意键继续会打印 terminal --timeout=10 秒,等待键盘或终端上的人按下任意键以获得输入焦点。然后在 timeout 10 秒内显示菜单,之后采用默认的引导选项。

如果连接到串行端口的终端不是真实的或模拟的 VT100,则强制 GRUB 使用其命令行界面。此界面比 GRUB 的菜单界面难用得多;但是,命令行界面不假定 VT100 的终端语言。

图 4-9. 用于 VT100 以外终端的命令行界面的 GRUB 配置

terminal --timeout=10 --dumb serial console

HOWTO 不讨论 GRUB 命令行界面的使用。它太复杂且容易出错,不建议在生产机器上使用。高手们会知道查阅 GRUBinfo 手册,以了解引导内核所需的命令。

在按下 P 键并提供密码后,可以交互式地编辑 GRUB 的菜单。更好的方法是添加菜单项,以将机器引导到备用运行级别。图 图 4-10 显示了一个示例配置,其中显示了默认运行级别的菜单项以及单用户模式(运行级别 s)的备用菜单项。请记住使用 lock 命令来要求单用户模式的密码,因为单用户模式不要求输入 Linux 密码。

图 4-10. 向 GRUB 菜单添加单用户模式选项

password --md5 $1$U$JK7xFegdxWH6VuppCUSIb.
default 0
title Red Hat Linux (2.4.9-21)
        root (hd0,0)
        kernel /vmlinuz-2.4.9-21 ro root=/dev/hda6
        initrd /initrd-2.4.9-21.img
title Red Hat Linux (2.4.9-21) single user mode
        lock
        root (hd0,0)
        kernel /vmlinuz-2.4.9-21 ro root=/dev/hda6 s
        initrd /initrd-2.4.9-21.img

kernelinitrd 命令中的文件名相对于 GRUB 安装目录,通常是/boot/grub。所以/vmlinuz-2.4.9-21实际上是文件/boot/grub/vmlinuz-2.4.9-21.

GRUB 现在已配置为使用串行控制台。从 GRUB 引导的内核尚待配置为使用串行控制台。