8.4. 使 LFS 系统可引导

你闪亮的新 LFS 系统几乎完成了。最后要做的事情之一是确保系统可以正确引导。以下说明仅适用于 IA-32 架构的计算机,即主流 PC。关于其他架构的“引导加载”信息应在这些架构常用的特定资源位置找到。

引导加载可能是一个复杂的领域,因此有必要说几句警示语。请熟悉当前的引导加载程序以及硬盘驱动器上存在的任何其他需要可引导的操作系统。确保已准备好紧急启动盘,以便在计算机变得无法使用(无法启动)时“拯救”计算机。

之前,我们编译并安装了 GRUB 引导加载程序软件,为这一步做准备。此过程包括将一些特殊的 GRUB 文件写入硬盘驱动器上的特定位置。我们强烈建议创建一个 GRUB 启动软盘作为备份。插入一张空白软盘并运行以下命令

dd if=/boot/grub/stage1 of=/dev/fd0 bs=512 count=1
dd if=/boot/grub/stage2 of=/dev/fd0 bs=512 seek=1

取出软盘并将其存放在安全的地方。现在,运行 grub shell

grub

GRUB 使用自己的命名结构来表示驱动器和分区,形式为 (hdn,m),其中 n 是硬盘驱动器号,m 是分区号,两者都从零开始。例如,分区hda1在 GRUB 中是 (hd0,0),而hdb3(hd1,2)。与 Linux 不同,GRUB 不将 CD-ROM 驱动器视为硬盘驱动器。例如,如果在hdb上使用 CD,并在hdc上使用第二个硬盘驱动器,那么第二个硬盘驱动器仍然是 (hd1)

使用以上信息,确定根分区(或单独的引导分区,如果使用了单独的分区)的适当指示符。在以下示例中,假设根分区(或单独的引导分区)是hda4.

告诉 GRUB 在哪里搜索其stage{1,2}文件。Tab 键可以在任何地方使用,使 GRUB 显示备选项

root (hd0,3)
[Warning]

警告

以下命令将覆盖当前的引导加载程序。如果不需要这样做,请不要运行该命令,例如,如果使用第三方引导管理器来管理主引导记录 (MBR)。在这种情况下,将 GRUB 安装到 LFS 分区的“引导扇区”中会更有意义。在这种情况下,下一个命令将变为 setup (hd0,3)

告诉 GRUB 将其自身安装到hda:

setup (hd0)

的 MBR 中 如果一切顺利,GRUB 将报告在其文件中找到/boot/grub。 这就是全部内容。退出 grub shell

quit

创建一个“菜单列表”文件,定义 GRUB 的启动菜单

cat > /boot/grub/menu.lst << "EOF"
# Begin /boot/grub/menu.lst

# By default boot the first menu entry.
default 0

# Allow 30 seconds before booting the default.
timeout 30

# Use prettier colors.
color green/black light-green/black

# The first entry is for LFS.
title LFS 6.1.1
root (hd0,3)
kernel /boot/lfskernel-2.6.11.12 root=/dev/hda4
EOF

如果需要,为宿主发行版添加一个条目。它可能看起来像这样

cat >> /boot/grub/menu.lst << "EOF"
title Red Hat
root (hd0,2)
kernel /boot/kernel-2.6.5 root=/dev/hda3
initrd /boot/initrd-2.6.5
EOF

如果双启动 Windows,以下条目将允许启动它

cat >> /boot/grub/menu.lst << "EOF"
title Windows
rootnoverify (hd0,0)
chainloader +1
EOF

如果 info grub 没有提供所有必要的资料,有关 GRUB 的更多信息请访问其网站:https://gnu.ac.cn/software/grub/

FHS 规定 GRUB 的menu.lst文件应该符号链接到/etc/grub/menu.lst。 为了满足此要求,请发出以下命令

mkdir -v /etc/grub &&
ln -sv /boot/grub/menu.lst /etc/grub