GRUB2

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page GRUB2 and the translation is 50% complete.

Outdated translations are marked like this.
Other languages:
English • ‎español • ‎français • ‎polski • ‎português do Brasil • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어

GRUB2(GRand Unified Bootloader版本2)是原始GRUB引导程序的替代品(现在被称作“GRUB Legacy”)。GRUB2与GRUB Legacy具有完全独立的代码库,并具有新的类似shell的语法,可用于高级脚本编写功能。

要获取大体上的了解, 请查看 GRUB2 Quick Start.

如果从GRUB Legacy迁移,请查看GRUB2 Migration

安装

sys-boot/grub软件包已经纳入Gentoo系统中。你可以同时安装 grub-0.97 (GRUB Legacy) 和 grub-2.02,但是,一次只能在硬盘驱动器的主引导记录(MBR)中安装一个版本。

准备

要控制GRUB2将安装的平台,请在make.conf中设置GRUB_PLATFORMS变量。amd64体系结构包含适用于大多数系统的配置文件默认值。

FILE /etc/portage/make.conf设置 GRUB_PLATFORMS 变量以支持 EMU, EFI, 和 PC 平台
GRUB_PLATFORMS="emu efi-32 efi-64 pc"

对于不同的 CPU,所支持的平台如下表所示:

Target
Platform i386 ia64 mips mipsel powerpc spac64 x86_64
arc No No No Yes No No No
coreboot Yes No No No No No 32-bit
efi Yes Yes No No No No Yes
emu Yes Yes Yes Yes Yes Yes Yes
ieee1275 Yes No No No Yes Yes 32-bit
loongson No No No Yes No No No
multiboot Yes No No No No No 32-bit
qemu Yes No No No No No 32-bit
qemu-mips No No Yes No No No No
pc Yes No No No No No 32-bit
Note
Whenever the values in the GRUB_PLATFORMS variable are adjusted GRUB2 will need to be re-emerged in order to build the changed binary. Be sure to use the --newuse --deep options as shown in the emerge section below.

The amd64 profiles enable support for (U)EFI functionality by default. When using a BIOS-based system, set GRUB_PLATFORMS variable to pc to avoid unneeded dependencies.

USE flags

USE flags for sys-boot/grub GNU GRUB boot loader

device-mapper Enable support for device-mapper from sys-fs/lvm2
efiemu Build and install the efiemu runtimes
fonts Build and install fonts for the gfxterm module
libzfs Enable support for sys-fs/zfs
mount Build and install the grub-mount utility
themes Build and install GRUB themes (starfield)
truetype Build and install grub-mkfont conversion utility

Emerge

使用一般的 emerge 指令安装 GRUB2 的语法:

root #emerge --ask --newuse sys-boot/grub:2

Additional software

你也可以选择通过安装 os-prober 工具(通过sys-boot/os-prober 包提供),使得 GRUB2 可以在运行 grub2-mkconfig 命令时探测其他操作系统。在大多数情况下,这样可以让 GRUB2 自动探测到各类常见的操作系统(比如Windows 7, Windows 8.1, 等等)。

root #emerge --ask --newuse sys-boot/os-prober

GRUB2(以及可选包 sys-boot/os-prober)的安装程序不会自动启用引导程序,它仅仅完成操作系统相关软件的安装。要将引导程序安装到系统并负责引导操作系统启动,仍需要执行其他一些相关步骤,相关说明在 配置 章节中有详细描述。

配置

配置 GRUB2 有两个主要的工作:

  1. 将 GRUB2 作为引导程序安装到系统上。
  2. 对 GRUB2 的引导程序进行配置。
  1. Installation of GRUB2 software as the boot loader of the system.
  2. Configuration of the GRUB2 boot loader.

GRUB2 软件的安装过程与系统的类型有关,相关描述请参考 安装引导程序。我们这里先来看看 GRUB2 引导程序自己的配置。

主要配置文件

grub2-mkconfig 脚本用于生成 grub 的配置。它综合使用 /etc/grub.d/*/etc/default/grub 中的相关配置文件生成最终的 /boot/grub/grub.cfg - GRUB2 所使用的唯一配置文件。

文件 格式 推荐修改? 描述
/usr/sbin/grub2-mkconfig POSIX shell script No 作为一部分随 sys-boot/grub:2 包同时安装看。完成下面所列文件的配置后,运行该脚本以生成最终的 /boot/grub/grub.cfg
/boot/grub/grub.cfg GRUB2 shell script No grub2-mkconfig 生成的文件。该文件由 GRUB2 内置的脚本解释器解析,不完全支持所有的 POSIX 命令或语法。参考 GRUB 手册中的scripting reference 可以获知它所支持的相关特性。要注意,对该文件的修改将在下一次运行 grub2-mkconfig 脚本时被覆盖。
/etc/grub.d/* POSIX shell scripts Maybe /etc/grub.d/* 目录下的脚本各自分别依次运行,其输出重定向到最终的 /boot/grub/grub.cfg 文件(或者用户通过 grub2-mkconfig -o 选项所指定的文件)。这些脚本文件均使用当前系统外壳程序执行,因此可以使用任何外壳程序所支持的语法。理想情况下,它们都应该是 POSIX 兼容的脚本,并且输出的脚本应该与 GRUB2 解释器兼容。如果有必要,可以禁用或增加某些脚本。例如,可以增加一些不能自动生成的菜单项。
/etc/default/grub POSIX shell script Yes 在大多数情况下,这是唯一应该直接修改的文件。它主要是用来为/etc/grub.d 中的脚本生成配置文件提供变量赋值。涉及的变量请参考 GRUB2 configuration variablesofficial reference

使用 GRUB2 无需管理员手动维护启动选项配置(像 GRUB LegacyLILO 等引导程序所需要那样)。相反,它可以通过使用 grub2-mkconfig 命令自动生成配置文件 (/boot/grub/grub.cfg)。该工具会综合利用 /etc/grub.d/ 中的脚本文件和 /etc/default/grub 中的配置参数。

Warning
在使用软件 RAID 的情况下, grub2-mkconfig 不能正常工作。这种情况下就有必要手动配置 /etc/grub.d/ 中的脚本文件,否则完成安装后系统将停留在没有引导程序的状态下。

如果修改了一个或多个设置,在运行grub2-mkconfig 工具时请使用 -o 选项将输出指定到 /boot/grub/grub.cfg (这是 GRUB2 默认的输出位置):

root #grub2-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.3.0-gentoo
done

每运行一次 grub2-mkconfig 工具都会生成一个新的配置文件。

Warning
如果 grub2-mkconfig 没有显示任何找到的操作系统入口,那么说明该工具没有找到任何可用操作系统。 这种情况下, 启动计算机时 GRUB2 将不会提供任何启动选项,这种情况相当棘手,将会耗费大量时间用于排除问题。所以,请在重启机器前确保该工具的输出中包含了合适的引导入口信息。

设置配置参数

以下列出了 /etc/default/grub 中最常用的变量,通过设置这些变量,可以控制 GRUB2 的行为:

变量 说明 默认值
GRUB_DEFAULT 定义启动菜单中的默认操作系统选项。可以是数字索引、菜单标题或者 "saved"。 默认设置为首个检测到的操作系统入口。
GRUB_TIMEOUT 在启动默认操作系统之前的延迟时间(按秒计)。设置为 0 时表示立即启动,设置成 -1 时表示无限期等待用户输入。 默认值为 5 秒钟。
GRUB_CMDLINE_LINUX 需要传递给内核的参数,对所有 Linux 系统入口起作用。例如,如需支持休眠功能,用户应该设置 GRUB_CMDLINE_LINUX="resume=/dev/sdXY" ,其中的 /dev/sdXY 是交换分区。
GRUB_CMDLINE_LINUX_DEFAULT 需要传递给内核命令行的参数,仅对非恢复 Linux 菜单项起作用。
GRUB_DEVICE 初始根设备 (类似于内核 root= 参数)。设置该参数,可以覆盖 grub2-mkconfig命令自动探测到的根设备。例如,GRUB_DEVICE=/dev/ram0 将强制在内核命令行中使用 root=/dev/ram0 作为根设备。

需获取更为完整的参数列表,请参考 GRUB2 configuration variables

配置完参数后,使用 grub2-mkconfig 命令重新生成 GRUB2 配置文件。

启用或禁用配置脚本

/etc/grub.d/ 目录中包含了 grub2-mkconfig 用来生成 grub.cfg 配置文件的一系列脚本。默认情况下,该目录中看起来应该类似于下面的内容:

user $ls /etc/grub.d/
00_header  10_linux  20_linux_xen  30_os-prober  40_custom  41_custom README

GRUB2 将会执行该目录中所有标记为可执行的脚本文件(默认情况下,该目录中所有脚本都被标记为可执行文件)。要禁用其中某些脚本,可以直接使用 chmod 命令清除它们的可执行权限位。 下面给出的例子中,禁用了除 00_header10_linux 之外的其他脚本:

root #chmod -x /etc/grub.d/{20_linux_xen,30_os-prober,40_custom,41_custom}

修改完这些脚本(或者通过清除可执行权限禁用这些脚本)后,请使用 grub2-mkconfig 重新生成配置文件。

调整配置脚本

一些 GRUB2 的功能或特性只能通过修改配置脚本来获得。例如,要支持 FreeBSD 的双启动,应该对脚本作出如下调整。

/etc/grub.d/40_custom 脚本修改为:

FILE /etc/grub.d/40_custom增加双启动
menuentry "FreeBSD" --class freebsd --class bsd --class os {
 insmod ufs2
 insmod bsd
 set root=(hd0,1)
 kfreebsd /boot/kernel/kernel
 kfreebsd_loadenv /boot/device.hints
 set kFreeBSD.vfs.root.mountfrom=ufs:/dev/ada0s1a
 set kFreeBSD.vfs.root.mountfrom.options=rw
 set kFreeBSD.hw.psm.synaptics_support=1
}

在上面的脚本中,/dev/sda1 或者 (hd0,1) FreeBSD 是系统所驻留的分区。 如果正常安装了 UFS 文件系统用于 FreeBSD 系统分区,那么 /dev/sda1 就成为了一个容器 (有点像一个逻辑分区)。 这个容器由根分区和交换分区组成。接着使用 ls -la /etc/grub.d/40_custom 命令确认40_custom 脚本是可执行文件。如果该脚本没有可执行权限,请使用 chmod u+x 40_custom 命令设置。

Note
Users familiar with how GRUB Legacy numbered partitions should note that GRUB2 numbers partitions starting from 1, not 0.

下一步,将使用 grub2-install 命令安装 GRUB2 并更新配置文件:

root #grub2-install /dev/sda
root #grub2-mkconfig -o /boot/grub/grub.cfg

安装引导程序

安装 GRUB2 作为系统的引导程序,重点考虑操作系统通过何种方式启动(通过 BIOS 还是 UEFI),以及准备安装引导程序的磁盘的分区格式是什么样的(是使用 MBR 还是 GPT 分区布局)。

本文讨论以下情况:

为操作系统选择适当的安装指令。

BIOS 引导,使用 MBR

Note
如果系统需要安装 Microsfot Windows 的双启动引导程序,请确定该系统本身"不是"EFI 固件。因为即使该系统使用传统的 'legacy BIOS' 模式启动, Microsoft Windows 也会拒绝启动。

确认 /boot 可用 - 如果该目录使用了单独的分区,请确保该分区已经挂载。

root #mount /boot

通过运行 grub2-install 命令将相关文件复制到 /boot/grub 目录中。在 PC 平台上,这将同时安装一个引导镜像文件到主引导记录 (MBR) 或某个分区的启动扇区中。如果一切顺利,在运行了 grub2-install 之后,应该会有如下输出信息:

root #grub2-install /dev/sda
Installation finished. No error reported.

可以为 grub2-install 指定 --target 选项来设置 CPU 架构和系统平台。如果未明确指定, grub2-install 会尝试猜测适当的值;对于 amd64/x86 系统 它将默认采用 i386-pc 。还可以为 grub2-install 指定 --boot-directory 选项来告诉 GRUB2 安装器在哪里寻找 GRUB2 的启动文件。该值默认为 /boot ,但是如果准备移动根分区,这个参数就变得非常有用了。

为 BIOS 引导程序设置 MBR 分区

应确保在首个分区前预留足够的磁盘空间。可以将第一个分区设置为从2048扇区开始,以便为主引导记录预留至少 1 MiB 空间。一般建议(但并非强制性要求)为 GRUB 创建一个称作“BIOS boot partitoin”的额外分区。该分区只需要定义,无需格式化。


如果是按照 Gentoo installation instructions 中的步骤进行操作,那么该 BIOS boot partition 应该已经创建好。

BIOS 引导,使用 GPT

Note
如果系统需要安装 Microsfot Windows 的双启动引导程序,请确定该系统本身"不是"EFI 固件。因为即使该系统使用传统的 'legacy BIOS' 模式启动, Microsoft Windows 也会拒绝启动。同时,老版本的 Microsoft Windows 系统可能不支持 GPT。此种情况下可以考虑使用 MBR-GPT 混合模式,请参考 Hybrid partition table.

如果需要使用 /boot 分区,首先请挂载该 /boot 分区:

root #mount /boot

如果一切顺利,在运行完 grub2-install 命令之后,应该会出现类似于以下的信息提示:

root #grub2-install /dev/sda
Installation finished. No error reported.

可以为 grub2-install 指定 --target 选项来设置 CPU 架构和系统平台。如果未明确指定, grub2-install 会尝试猜测适当的值;对于 amd64/x86 系统 它将默认采用 i386-pc 。还可以为 grub2-install 指定 --boot-directory 选项来告诉 GRUB2 安装器在哪里寻找 GRUB2 的启动文件。该值默认为 /boot ,但是如果准备移动根分区,这个参数就变得非常有用了。

为 BIOS 引导程序设置 GPT 分区

当系统使用的分区表为 GPT 时,需要设置一个类型为 EF02 小体量BIOS 引导分区(不同于 EFI 系统分区 (ESP)EF00类型)。该分区有 1 MiB 空间足矣,但建议使用 2-4 MiB 空间会更加可靠。 该 BIOS 引导分区主要用于存储引导程序的 stage 2 代码。它无需格式化为某类文件系统, grub2-install 命令会用自己的文件系统覆盖掉该分区上面预置的任何文件系统。

Important
BIOS 引导分区与常规情况下挂载的/boot 不是 同一个分区。/boot 和 BIOS 引导区是不同的分区,应该分别处理。BIOS 引导分区一般 不应该 挂载到系统中(就是说它“不应该”在 /etc/fstab 中被定义)。而 /boot 分区毫无疑问 “可以” 常态地挂载到系统上,因此可以在 /etc/fstab 文件中添加其定义。

要将某个分区设置为 BIOS 分区,可以使用命令行工具 parted (sys-block/parted),执行以下指令即可(把其中的 1 修改为拟作为 BIOS 引导分区的相应编号):

(parted)set 1 bios_grub on

在使用 sys-apps/gptfdisk 包的 cgdisk 工具时,完成这项工作,需要通过设置该分区类型为 0xEF02 并为其设置 gptbios 标签。

使用 EFI 系统分区并非必要的,但比较明智的做法是确保该 BIOS 引导分区空间足够大,确保能够随时转换成 EFI 分区以支持将来升级到 EFI 板卡的主板。

下面是在对一个 GPT 格式磁盘使用 gdisk 工具按下p 后的输出信息,该磁盘同时包含 BIOS 引导分区 [0xEF02] 和 EFI 分区 [0xEF00] :

root #gdisk /dev/sdc
GPT fdisk (gdisk) version 0.8.1
 
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
 
Found valid GPT with protective MBR; using GPT.
 
Command (? for help): p
Disk /dev/sdc: 976773168 sectors, 465.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): AA369F4D-37A4-4C0D-A357-DC24B99A6337
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
 
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048       828377087   395.0 GiB   8E00  Linux LVM
   2       828377088       891291647   30.0 GiB    0700  Microsoft basic data
   3       891291648       975177727   40.0 GiB    0700  Microsoft basic data
   4       975177728       976754687   770.0 MiB   8300  Linux filesystem
   5       976754688       976756735   1024.0 KiB  EF02  BIOS boot partition
   6       976756736       976773134   8.0 MiB     EF00  EFI System
 
Command (? for help): 
Note
如果是使用 fdisk,那么无需为 GPT 类型码输入十六进制前缀 0x

对于相同的设置, parted 工具的输出会稍微有些不同之处:

root #parted /dev/sdc
GNU Parted 3.0
Using /dev/sdc
(parted) print
...
Sector size (logical/physical): 512B/512B
Partition Table: gpt
  
Number  Start   End    Size    File system  Name                  Flags
 1      1049kB  424GB  424GB                Linux LVM             lvm
 2      424GB   456GB  32.2GB               Microsoft basic data
 3      456GB   499GB  42.9GB               Microsoft basic data
 4      499GB   500GB  807MB   ext2         Linux filesystem
 5      500GB   500GB  1049kB               BIOS boot partition   bios_grub
 6      500GB   500GB  8396kB               EFI System            boot
  
(parted)

对于那些已经熟悉 fdisk 磁盘分区工具的用户而言,通过 gdisk 创建磁盘分区显得更为直接。启动 gdisk,在主菜单下输入 n (创建新分区),指定开始和结束的扇区(如果需要),然后设置磁盘类型为 EF00 ,即 EFI 系统分区。

按照 Gentoo 安装说明 操作的用户,应该已经按照要求正确地设置好了磁盘分区结构。

UEFI 引导,使用 GPT

首先确保 /boot 目录可用 - 如果是使用一个单独的分区,请确保已经正确挂载到 /boot

root #mount /boot

运行 grub2-install 命令复制相关文件到 /boot/grub 中。这个命令将把 Grub2 安装到 /boot/grub 目录中,同时复制核心镜像文件到位置 /boot/efi/EFI/gentoo/grubx64.efi,然后调用 efibootmgr 来增加一个引导入口。

root #grub2-install --efi-directory=/boot/efi
Installation finished. No error reported.

以上命令假定 vfat 格式的 EFI 系统分区(ESP)是挂载在 /boot/efi 目录下,如果该 ESP 直接挂载到了 /boot 下,则需要在命令中使用 --efi-directory=/boot 参数替换相应部分。

grub2-install 命令可通过设置 --target 选项来设置 CPU 架构和系统平台。忽略该选项的情况下,grub2-install 将会试图猜测适当的值;在一个 AMD64 EFI-booted 系统上,它会默认使用 x86_64-efigrub2-install 也可设置 --boot-directory 选项来告知 GRUB2 安装程序在何处查找 GRUB2 的引导文件,该参数默认为 /boot ,在试图移动根分区时该参数的用处将体现出来。

为 UEFI 引导程序设置 GPT 分区

使用 GRUB2 引导 UEFI GPT 系统时, 系统 必须 有一个包含 FAT 文件系统的独立 EFI 分区。

可以使用一个挂载在 /dev/sda1 上的 /boot/efi分区来 替代 挂载在/dev/sda1上的 /boot 分区。 这即是说使用 GRUB2 可以通过两个分区(如果把 swap 分区也算在内就是三个)来成功实现 EFI 引导:一个根分区和一个 EFI 分区。 使用这种配置方法时, /boot 目录 将位于 / 分区中 (位于路径 /boot下),同时 EFI 分区 将会挂载 boot 目录 中(在路径 /boot/efi下)。查阅下面的 /etc/fstab 文件实例有助于进一步弄清这中配置方式。

FILE /etc/fstabExample of an UEFI capable /etc/fstab file with a swap partition:
/dev/sda1		/boot/efi	vfat		noauto,noatime	1 2
/dev/sda2		none		swap		sw		0 0
/dev/sda3		/		ext4		noatime		0 1

创建一个100MB的 /boot/efi 分区将会有足够的空间容纳下多个

  • .efi 文件(当然,大部分系统只会使用一个入口,多个入口并非必须的)。

创建分区时,可以参考 tool of choice 介绍的可选工具。 其中,gdisk (sys-apps/gptfdisk) 和 parted (sys-block/parted) 工具已经足以完成此项任务。在使用 gdisk 工具时,请确保为分区指定了 EF00 类型代码。

紧接着,请使用 mkdosfs 在 EFI 系统分区上创建 FAT 文件系统,并参照以下示例将该分区加入 /etc/fstab 配置文件。

root #mkdosfs -F 32 -n efi-boot /dev/sda1
root #mkdir /boot/efi
FILE /etc/fstabAdding the /boot/efi mount entry
/dev/sda1		/boot/efi	vfat		noauto,noatime	1 2
root #mount /boot/efi
Note
/etc/portage/make.conf 文件中设置 GRUB_PLATFORMS 变量将会非常有用。 这个变量将会协助 GRUB2 在探测合适的 EFI 目标时确定使用何种选项。对于 32-bit EFI 系统请使用 efi-32。对于 64-bit 系统请使用 efi-64.
Important
为正确安装 GRUB2, EFI 目录 必须 正确挂载 并且 必须在 grub2-install 命令运行之前完成 efivars 内核模块的加载。

备选方案: 使用默认的 UEFI 固件位置

如果系统的 UEFI 固件未能成功找到 GRUB2 的引导文件,请使用the default boot loader location should provide a working solution. This circumvents the boot menu managed by efibootmgr and thus offers reduced functionality, but is less error prone. To do this, verify the EFI partition is mounted at /boot/efi then copy the file grubx64.efi located at /boot/efi/EFI/gentoo/grubx64.efi to /boot/efi/EFI/BOOT/BOOTX64.EFI. This example assumes a 64-bit EFI system, adjust accordingly for 32-bit EFI systems.

扩展特性

GRUB2有很多特性使得其成为非常强大的启动引导器。它支持:

  • 从UEFI平台引导。
  • 从GPT分区的磁盘引导,不需要hybrid MBR (hybrid MBR可以出于兼容性和便携性的需求而被使能)。
  • btrfs 格式的 /boot 引导分区引导。
  • 直接从btrfs磁盘陈列引导而不需要initramfs服务于早期的挂载设置。
  • 直接从逻辑管理卷引导,(如LVM2)。
  • 引导并支持DM-RAID (RAID 0, 1, 4, 5, 6, 9和10)。
  • 从加密的设备引导(LUKS)。

一些特殊的特性在下面将被详细的解释。

Chainloading

与传统的GRUB相比,GRUB2被构建成为更好地支持了chainload模式。如要chain load另外一个启动引导器,您可以使用chainloader 选项。

FILE /boot/grub/grub.cfgChainloading another bootloader
menuentry "Custom Super Bootloader Example" {
     insmod part_msdos
     insmod chain
     chainloader (hd1,1)+1
}

要想了解chainloading的更多信息,可以查看Chainloading子页面。

Password protection of GRUB menu

If you want to secure GRUB so it is not possible for anyone to change boot parameters or use the command line, you can add a user/password combination to GRUB's configuration files. The program grub-mkpasswd-pbkdf2 generates password hashes for GRUBː

user $grub-mkpasswd-pbkdf2
Password:
Reenter password:

PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.9CA4611006FE96BC77A...

Then, add the following toː

FILE /etc/grub.d/35_auth:
# Grub user
echo 'set superusers="username"'
# Grub password
echo 'password_pbkdf2 <username> <password>'

使用framebuffer显示

为了让GRUB2使用framebuffer图形界面显示,重新emerge GRUB,使能USE标记truetype。这个将会安装缺省的True Type字体以及一个字体转换工具。

root #emerge --ask --newuse sys-boot/grub:2

执行配置缺省的GRUB2位于/etc/default/grub的配置文件。例如:

FILE /etc/default/grubFramebuffer related settings
# Set resolution and color depth
GRUB_GFXMODE=1366x768x32
 
# Keep resolution when loading the kernel
GRUB_GFXPAYLOAD_LINUX=keep
 
# Set a background image
GRUB_BACKGROUND="/boot/grub/bg.png"
 
# Use a custom font, converted using grub2-mkfont utility
GRUB_FONT="/boot/grub/fonts/roboto.pf2"

Troubleshooting

大部分问题可以靠确认分区布局是正确的得以解决。请确保磁盘上第一个分区前面有足够多的空间或者确保一个BIOS boot partition是可用的。也请确认 /boot/grub/grub.cfggrub2-mkconfig正确地生成,或者用一个自己定制的菜单项来生成。

想要了解更多关于GRUB2排障的情况,请参考Troubleshooting 子文章。

Motherboard firmware not finding the .EFI file

Some motherboard manufacturers seem to only support one location for the .EFI file in the EFI System Partition (ESP). If this seems to be the case, simply move GRUB's default file to the /efi/boot/ location. First, make sure the ESP is mounted. Presuming the ESP is mounted at /boot/efi (as suggested in the Handbook), execute:

root #mkdir -p /boot/efi/efi/boot
root #cp /boot/efi/efi/gentoo/grubx64.efi /boot/efi/efi/boot/bootx64.efi

You can also use the removable parameter with grub-install command to generate this file automatically:

root #grub-install --efi-directory=/boot/efi --removable
Installation finished. No error reported.

This should aid the motherboard firmware in loading the GRUB executable. Reboot the system to see if the firmware now correctly loads GRUB.

os-prober and UEFI in chroot

The sys-boot/os-prober utility is used to discover alternate installs, such as Microsoft Windows. To function properly, it needs to have access to information from the live environment's udev to test for the EFI System Partition.

Run these commands in the host environment to provide the required files (example shows Gentoo mounted on /mnt/gentoo like in the Handbook):

root #mkdir -p /mnt/gentoo/run/udev
root #mount -o bind /run/udev /mnt/gentoo/run/udev
root #mount --make-rslave /mnt/gentoo/run/udev

Installing a new kernel

Whenever a new kernel is installed, GRUB2 must be reconfigured to recognize it. This can be done using grub-mkconfig, as shown below, or can be done manually.

Note
Make sure the /boot partition is mounted for this step.
root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/kernel-3.3.8-gentoo
Found initrd image: /boot/initramfs-genkernel-x86_64-3.3.8-gentoo
Found linux image: /boot/kernel-3.2.12-gentoo
Found initrd image: /boot/initramfs-genkernel-x86_64-3.2.12-gentoo
done

Note that GRUB2 only needs to be reconfigured, not reinstalled to the boot drive's Master Boot Record (MBR). On the other hand, when GRUB2 itself has been upgraded it does need to be reinstalled on the boot drive, but usually does not need to be reconfigured.

See also

这里有一些特别的GRUB2资源可用:

  • In Chainloading 描述了使用GRUB2引导其它的boot loaders,对于双引导系统或者当GRUB2需要被配置成从ISO文件引导时是非常值得阅读的。
  • In Advanced storage怎样在更高级的存储条件,例如软RAID,逻辑卷或者加密文件系统中安装和使用GRUB2的必要步骤被归档在这里。
  • In Configuration variables/etc/default/grub所使用的GRUB2配置变量的详细清单被归档在这里。
  • In Troubleshooting GRUB2的常错误(和它们的解决方案)被列在这里。
  • In Hybrid partition table 如何使用一个混合的MBR/GPT设置被归档在这里,连同怎样与GRUB2一道使用这样一个混合的分区布局一起。

外部资源

更多的信息,请参见: