%general-entities; ]> grub &grub-version;
&grub-url;
使用 GRUB 设定引导过程 概述 如果您不小心错误地配置了 GRUB,而且没有 CD-ROM 之类的备用引导设备,可能会导致您的系统完全无法使用。 本节不是引导您的 LFS 系统的唯一方案, 您可能只要修改现有的启动加载器(如 Grub-Legacy、GRUB2 或 LILO) 配置即可引导 LFS。 您务必保证自己拥有一个紧急引导磁盘,它在计算机不可用(无法引导) 时能够 救援 计算机。如果您现在还没有引导设备, 您可以执行以下命令创建一个。在运行下列命令前,您需要跳到 BLFS, 安装包含 xorrisolibisoburn 软件包: 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 的的详细信息, 可以参阅 GRUB 命名惯例 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 的工作方式是,将数据写入硬盘的第一个物理磁道。 这里不属于任何文件系统,在启动时, 第一个物理磁道中的程序从引导分区加载 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 如果系统是使用 UEFI 引导的, grub-install 会试图为 x86_64-efi 目标安装文件, 但它们并未在第 6 章中安装。如果出现了这类问题,请在以上命令中添加 选项。 创建 GRUB 配置文件 生成 /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 &linux-version;-lfs-&version;" { linux /boot/vmlinuz-&linux-version;-lfs-&version; root=/dev/sda2 ro } EOF 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 &linux-version;-lfs-&versiond;" { linux /boot/vmlinuz-&linux-version;-lfs-&versiond; root=/dev/sda2 ro } EOF GRUB的视角来看, 内核文件的位置相对于它使用的分区。如果您使用了单独的 /boot 分区,需要从上面的 linux 行删除 /boot, 然后修改 set root 行, 指向 /boot 分区。 GRUB 是一个很强大的程序,它提供了非常多的选项, 可以支持多种设备、操作系统和分区类型,还有很多用于定制启动屏幕、 声音、鼠标输入等的选项。这些选项的细节超过了本书的范围, 不予讨论。 有一个命令 grub-mkconfig 被用于自动创建配置文件。它使用 /etc/grub.d 中的脚本创建新配置文件,这会覆盖您手动编写的 grub.cfg。 这些脚本主要是为非源代码发行版设计的, 在 LFS 中不推荐使用。但是,如果您安装了商业发行版, 它很可能在发行版中被运行,记得备份 grub.cfg 以防它被覆盖。