如果您不小心错误地配置了 GRUB,而且没有 CD-ROM 之类的备用引导设备,可能会导致您的系统完全无法使用。 本节不是引导您的 LFS 系统的唯一方案, 您可能只要修改现有的启动加载器(如 Grub-Legacy、GRUB2 或 LILO) 配置即可引导 LFS。
您务必保证自己拥有一个紧急引导磁盘,它在计算机不可用(无法引导) 时能够 “救援” 计算机。如果您现在还没有引导设备, 您可以执行以下命令创建一个。在运行下列命令前,您需要跳到 BLFS, 安装包含 xorriso 的 libisoburn 软件包:
cd /tmp grub-mkrescue --output=grub-img.iso xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed grub-img.iso
为了在使用 UEFI 的宿主系统上引导 LFS ,在构建内核时, 需要启用 CONFIG_EFI_STUB 功能,正如上一节所述。 不过,可以使用 GRUB2 在没有该功能的情况下引导 LFS, 前提是在系统 BIOS 设定中关闭 UEFI 模式和安全引导 (Secure Boot)功能。关于在 UEFI 环境下引导 LFS 的的详细信息, 可以参阅 http://www.linuxfromscratch.org/hints/downloads/files/lfs-uefi.txt。
以上 hint 版本较老,译者维护了它的更新版本,参阅 http://svn.linuxfromscratch.org/hints/trunk/lfs-uefi-20180409.txt />。
GRUB 使用一种独特的命名结构,为驱动器和分区命名。 分区名的形式为 (hdn,m),这里 n 是硬盘驱动器编号,m 是分区编号。硬盘驱动器编号从 0 开始,但分区号对于主分区来说从 1
开始,而对于扩展分区来说从 5 开始。例如,分区 sda1
在 GRUB
中的名字是 (hd0, 1),而
sda3
的名字是 (hd1, 3)。和 Linux 不同, GRUB 不认为 CD-ROM
驱动器属于硬盘驱动器。例如,如果在 hdb
上有一个 CD-ROM
驱动器, 而 hdc
上有一个次要硬盘驱动器,则第二个驱动器仍然名为
hd1。
GRUB 的工作方式是,将数据写入硬盘的第一个物理磁道。 这里不属于任何文件系统,在启动时, 第一个物理磁道中的程序从引导分区加载 GRUB 模块, 默认在 /boot/grub 中查找模块。
引导分区的位置由负责进行配置的用户自己决定, 作者推荐创建一个小的(建议大小为 100 MB)分区, 专门存放引导信息。这样,不同的
Linux 系统(无论是 LFS 还是商业发行版)在启动时和启动后都能访问相同的引导文件。
如果您选择这样做,您需要挂载这个单独的分区,将 /boot 中已有的文件(例如上一节中构建的内核)移动到新的分区中。
之后,解除该分区的挂载,并将它挂载为 /boot
, 而且还要注意更新
/etc/fstab
。
直接使用 LFS 分区也是可以的,但这样在配置多系统启动时比较麻烦。
根据以上信息,确定 LFS 根分区(或 boot 分区)的名称。 下面假设 LFS 根分区(或 boot 分区)是
sda2
。
将 GRUB 文件安装到/boot/grub
并设定引导磁道:
以下命令会覆盖当前启动引导器,如果这不是您希望的, 不要运行该命令。例如,如果您使用第三方启动引导器管理主引导记录 (MBR)。
grub-install /dev/sda
生成 /boot/grub/grub.cfg
:
cat > /boot/grub/grub.cfg << "EOF"
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5
insmod ext2
set root=(hd0,2)
menuentry "GNU/Linux, Linux 4.18.5-lfs-8.3" {
linux /boot/vmlinuz-4.18.5-lfs-8.3 root=/dev/sda2 ro
}
EOF
从 GRUB的视角来看, 内核文件的位置相对于它使用的分区。如果您使用了单独的 /boot 分区,需要从上面的 linux 行删除 /boot, 然后修改 set root 行, 指向 /boot 分区。
GRUB 是一个很强大的程序,它提供了非常多的选项, 可以支持多种设备、操作系统和分区类型,还有很多用于定制启动屏幕、 声音、鼠标输入等的选项。这些选项的细节超过了本书的范围, 不予讨论。
有一个命令 grub-mkconfig 被用于自动创建配置文件。它使用 /etc/grub.d 中的脚本创建新配置文件,这会覆盖您手动编写的 grub.cfg。 这些脚本主要是为非源代码发行版设计的, 在 LFS 中不推荐使用。但是,如果您安装了商业发行版, 它很可能在发行版中被运行,记得备份 grub.cfg 以防它被覆盖。