rEFInd - Arch Linux 中文维基

跳转到内容

# rEFInd

来自 Arch Linux 中文维基

翻译状态：

- 本文（或部分内容）译自 rEFInd，最近一次同步于 2021-03-19，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

相关文章

- Arch boot process
- Boot loaders
- EFISTUB
- booster
- Unified Extensible Firmware Interface

rEFInd 是一个 UEFI 能够启动 EFISTUB 内核的启动管理器。它是 rEFIt （不再维护）的一个分支并且针对非 Mac 硬件修复了若干问题。它被设计为平台无关，可启动多个操作系统。

注意：整篇文章中 `esp` 代表 EFI system partition 的挂载点。

## 安装

安装 refind包 包。

## 安装 rEFInd 启动管理器

rEFInd 附带了实现了对 ReiserFS, Ext2, Ext4, Btrfs, ISO-9660 and HFS+ 只读支持的 UEFI drivers。而且 rEFInd 能够访问任何 UEFI 本身能够存取的文件系统，包括 FAT (由 UEFI 规范强制要求), 在 Mac 上的 HFS+ 和一些系统上的 ISO-9660。

额外的驱动可以参考 The rEFInd Boot Manager: Using EFI Drivers: Finding Additional EFI Drivers。

为了使用 rEFInd, 务必将它安装到 EFI 分区， 使用 rEFInd 安装脚本或者手动复制文件并设置启动入口.

警告：你的内核和 initramfs 必须在一个 rEFInd 能够读取的文件系统上。

### 以 rEFInd 安装脚本安装

rEFInd 包含有一个 refind-install 脚本来简化将你的 rEFInd 设置为默认 EFI 启动项的过程。这个脚本有几个选项用于处理不同的设置和 UEFI 实现。想要了解不同选项的含义，请参见 refind-install(8) 或者读安装脚本里面的注释。

对于许多系统来说，运行下面的命令就足够了：

    # refind-install

此操作会尝试找到并挂载您的 ESP，将 rEFInd 的文件复制到 `esp/EFI/refind/`，并使用 efibootmgr 将 rEFInd 设置为默认的 UEFI 启动项。

或者您可以将 rEFInd 安装到默认/回退（fallback）启动路径 `esp/EFI/BOOT/bootx64.efi`。这对于可启动的 USB 驱动器或者在那些 efibootmgr 做的 NVRAM 更改有问题的系统上会有帮助：

    # refind-install --usedefault /dev/sdXY

其中 `/dev/sdXY` 是你的 EFI 分区 (块设备, 不是挂载点).

提示：默认情况下 `refind-install` 只会为内核所在的文件系统安装驱动。 其他的文件系统需要手动安装，通过将 `/usr/share/refind/drivers_x64/` 复制到 `esp/EFI/refind/drivers_x64/`, 或者你可以以 `--alldrivers` 选项安装。 这对于可启动的 USB 驱动器有帮助。

将 rEFInd 的文件安装到 ESP 之后， 验证 rEFInd 已经在你的内核所在文件夹创建了包含内核参数的 `refind_linux.conf` 文件。如果你用了 `--usedefault` 选项，该文件不会被创建，请以 root 身份运行 `mkrlconf` 来创建它。

警告：当 `refind-install` 运行在chroot环境下 (例如：安装Arch Linux时的live环境) `/boot/refind_linux.conf` 内将会添加live系统的内核选项，而不是安装它的系统。

编辑 `/boot/refind_linux.conf` 并确保其中的 内核参数 对于你的系统是正确的，否则下次启动可能会出现内核错误。

查看示例：rEFInd#refind_linux.conf。

默认情况下，rEFInd 会扫描你的所有的驱动器（它有驱动的那些）并为它找到的每一个 EFI bootloader 添加一个启动入口，其中就包含你的内核（因为 Arch 默认启用了 EFISTUB ）。因此你在这时候就可能有一个可以启动的系统。

#### Secure Boot

要在 rEFInd 中使用 Secure Boot，请参考 Managing Secure Boot。

##### 使用 PreLoader

要获取经过签名的 `PreLoader.efi` 和 `HashTool.efi` 二进制文件，请参考 Secure Boot#Set up PreLoader。

以 `--preloader /path/to/preloader` 选项执行 `refind-install`。

    # refind-install --preloader /usr/share/preloader-signed/PreLoader.efi

当你下次以 Secure Boot 开启状态启动时，HashTool 会启动并让你注册 rEFInd (`loader.efi`) 、rEFInd 的驱动器 (如 `ext4_x64.efi`)和内核 (如 `vmlinuz-linux`) 的 hash。

更多信息参见 refind-install(8)。

提示：经过签名的 HashTool 只能够访问启动它的分区。 这意味着如果你的内核不在 EPS 上, 你就不能从 HashTool 注册它的 hash. 你可以使用 #KeyTool 来替代这种情况, 因为它可以将一个 hash 注册到 MokList 并且不被限制在一个分区。在使用之前，请记住要先注册 KeyTool 的 hash。

##### 使用 shim

安装 shim-signedAUR。阅读 Secure Boot#shim，但是跳过所有的文件复制。

###### 使用 hash

要只使用带有 hash 的 shim，请以 `--shim /path/to/shim` 参数执行 `refind-install`：

    # refind-install --shim /usr/share/shim-signed/shimx64.efi

当你下次以 Secure Boot 开启状态启动时, MokManager 会启动并让你注册 rEFInd (`loader.efi`) 、rEFInd 的驱动器 (如 `ext4_x64.efi`)和内核 (如 `vmlinuz-linux`) 的 hash。

###### 使用机器所有者密钥（Machine Owner Key）

要使用计算机所有者密钥（MOK）对 rEFInd 进行签名，请安装 sbsigntools包。

提示：如果您已经创建了一个计算机所有者密钥，则将文件命名为 `refind_local.key`（PEM 格式私钥）、`refind_local.crt` （PEM 格式证书）和 `refind_local.cer` （DER 格式证书），并放置在`/etc/refind.d/keys`目录中。

以 `--shim /path/to/shim` 和 `--localkeys` 选项执行 `refind-install`：

    # refind-install --shim /usr/share/shim-signed/shimx64.efi --localkeys

refind-install 会为你创建密钥并为它和它的驱动器签名。你需要用同一个密钥为内核签名，如：

    # sbsign --key /etc/refind.d/keys/refind_local.key --cert /etc/refind.d/keys/refind_local.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux

提示：内核签名可以由 pacman 钩子自动化, 参见 Secure Boot#Signing the kernel with a pacman hook。

进入 MokManager 之后，将 `refind_local.cer` 添加到 MoKList。在 rEFInd 的安装目录下，如 `esp/EFI/refind/keys/refind_local.cer`，一个叫做 `keys` 的文件夹里面可以找到 `refind_local.cer`。

更多信息参见 refind-install(8)。

##### 使用你自己的密钥

跟随 Secure Boot#Using your own keys 来创建密钥。

创建目录 `/etc/refind.d/keys` 并将 Signature Database (db) 密钥和证书放在其中。 将文件命名为： `refind_local.key` (PEM 格式私钥), `refind_local.crt` (PEM 格式证书) 和 `refind_local.cer` (DER 格式证书)。

在运行安装脚本时添加 `--localkeys` 选项，如：

    # refind-install --localkeys

rEFInd EFI 二进制文件将会被用提供的密钥和证书签名。

### 手动安装

提示： rEFInd 能够以多种方式启动 Linux。参见 The rEFInd Boot Manager: Methods of Booting Linux。本节将阐述使用 EFISTUB 的过程。
注意：对于 32 位 EFI，请将 x64 替换为 ia32。

如果 `refind-install` 脚本没有正常工作，您可以手动设置 rEFInd。

首先，将可执行文件复制到 ESP:

    # mkdir -p esp/EFI/refind
    # cp /usr/share/refind/refind_x64.efi esp/EFI/refind/

如果想要将 rEFInd 安装到默认/回退（fallback) 启动路径，请在下面将 `esp/EFI/refind/` 替换为 `esp/EFI/BOOT/`，并将 rEFInd EFI 可执行文件复制到 `esp/EFI/BOOT/bootx64.efi`:

    # mkdir -p esp/EFI/BOOT
    # cp /usr/share/refind/refind_x64.efi esp/EFI/BOOT/bootx64.efi

然后使用 efibootmgr 来在 UEFI NVRAM 中创建一个启动入口，其中 `/dev/sdX` 和 `Y` 是你的 EFI 分区的设备和分区号。如果你要将 rEFI 安装到默认/回退（fallback) 启动路径 `esp/EFI/BOOT/bootx64.efi`，你可以跳过这一步。

    # efibootmgr --create --disk /dev/sdX --part Y --loader /EFI/refind/refind_x64.efi --label "rEFInd Boot Manager" --verbose

此时，你应该能重启到 rEFInd，但是它无法引导你的内核。如果你的内核不在你的 ESP 上，那么 rEFInd 可以挂载你的分区来查找它，只要它具有正确的驱动程序即可。

rEFInd 会从其安装目录中的子目录 `drivers` 和 `drivers_arch`（例如 `drivers_x64`）自动加载所有驱动程序。

    # mkdir esp/EFI/refind/drivers_x64
    # cp /usr/share/refind/drivers_x64/drivername_x64.efi esp/EFI/refind/drivers_x64/

现在，rEFInd应该为你的内核提供了一个启动项，但是不会传递正确的内核参数。设置#传递内核参数。现在，你应该可以使用 rEFInd 引导内核了。如果仍然无法启动或想要调整 rEFInd 的设置，则可以使用配置文件来更改许多选项：

    # cp /usr/share/refind/refind.conf-sample esp/EFI/refind/refind.conf

该示例配置文件具有很好的注释并且不言自明。

除非你在配置文件中设置了`textonly`，否则你应该复制 rEFInd 的图标以摆脱难看的占位符：

    # cp -r /usr/share/refind/icons esp/EFI/refind/

你可以尝试通过复制不同的字体并更改 `refind.conf` 中的 `font` 设置来进行尝试：

    # cp -r /usr/share/refind/fonts esp/EFI/refind/

提示：在 rEFInd 中按 `F10`将会保存屏幕截图到 ESP 分区的根目录。

### 更新 rEFInd

Pacman 只更新在 `/usr/share/refind` 中的文件，不会将新文件复制到 ESP。 如果最初 `refind-install` 成功安装了 rEFInd，则可以再次运行以更新文件。 新的配置文件会被复制为 `refind.conf-sample` ，你可以使用一个 diff 工具选择、改变合并到你的配置文件。如果你的 rEFInd 需要#手动安装，你需要自己找出需要复制哪些文件。

#### Pacman 钩子

你可以使用一个 pacman 钩子来自动化更新过程:

    /etc/pacman.d/hooks/refind.hook

    [Trigger]
    Operation=Upgrade
    Type=Package
    Target=refind

    [Action]
    Description = Updating rEFInd on ESP
    When=PostTransaction
    Exec=/usr/bin/refind-install

你可能需要为你的设置将 `Exec=`更改为正确的更新命令。如果您进行了#手动安装，则可以创建自己的更新脚本以使用钩子进行调用。

提示：如果你使用 #Secure Boot 设置 rEFInd，则可能需要在 `refind-install` 命令中额外添加选项 `--yes`。如果在禁用 Secure Boot 后执行该命令，它将防止该命令失败。更多信息参见 refind-install(8)。
注意：如果 ESP 未挂载到 `/boot`，而你依靠自动挂载来挂载它，请确保按照 EFI system partition#Alternative mount points 来预加载 `vfat` 模块。否则，如果 refind包与内核一起升级，ESP 将变得不可访问。

## 配置

rEFInd 的配置文件 `refind.conf` 存放在 rEFInd EFI 应用的同一目录下（通常为 `esp/EFI/refind` 或 `esp/EFI/BOOT`）。默认的配置文件包含了解释了所有选项的扩展注释，更详细的解释参考 Configuring the Boot Manager。

### 传递内核参数

有两种方法可以设置 rEFInd 传递给内核的内核参数。

#### 对于 rEFInd 自动检测到的内核

对于自动检测到的内核，你可以在 `/boot/refind_linux.conf` 中显式指定内核参数，也可以依靠 rEFInd 识别 root 分区和内核参数的能力。更多信息参见Methods of Booting Linux: For Those With Foresight or Luck: The Easiest Method。

提示：

- 当 `/etc/os-release` 与内核位于同一分区时，rEFInd 会自动为启动项选择 Arch Linux图标 (`os_arch.png`)。如果你的 `/boot` 是一个单独的分区，参考 Configuring the Boot Manager: Setting OS Icons。
- rEFInd 不支持检测统一内核映像的分布。要为统一内核映像提供图标，请将 `/usr/share/refind/icons/os_arch.png` 复制到 `esp/EFI/Linux/` 并确保文件名匹配。例如，如果你有 `esp/EFI/Linux/Arch-linux.efi`，则将对应的图标命名为 `esp/EFI/Linux/Arch-linux.png`。

为了使 rEFInd 支持 Arch Linux 内核的命名方案并因此使其与各自的 initramfs 镜像相匹配，必须取消注释并编辑 `refind.conf` 中的 `extra_kernel_version_strings`选项。例如：

    esp/EFI/refind/refind.conf

    ...
    extra_kernel_version_strings linux-hardened,linux-zen,linux-lts,linux
    ...

注意：

- rEFInd 仅支持为每个内核检测一个 initramfs 镜像，这意味着它将不检测 fallback initramfs 或微码镜像，必须手动指定它们。
- 如果没有上述 `extra_kernel_version_strings` 行，`refind_linux.conf` 中的 `%v` 变量将不适用于 Arch Linux 内核。

##### refind_linux.conf

如果 rEFInd 自动检测到你的内核，你可以将包含内核参数的 `refind_linux.conf` 文件放置在与内核相同的目录中。你可以使用 `/usr/share/refind/refind_linux.conf-sample` 作为起点。 `refind_linux.conf` 未注释的第一行将是内核的默认参数。随后的行将在子菜单中创建可使用 `+`, `F2`, 或 `Insert` 访问的条目。

或者，尝试以 root 身份运行 `mkrlconf`。它将会尝试在 `/boot` 中找到你的内核，并自动生成 `refind_linux.conf`。该脚本只会设置最基本的内核参数，因此请确保检查其创建的文件的正确性。

如果未指定 `initrd=` 参数，rEFInd 将通过在与内核相同的目录中搜索常用RAM磁盘文件名来自动添加它。如果需要多个 `initrd=` 参数，则必须在 `refind_linux.conf` 中手动指定它们。例如，一个在 initramfs 之前传递的微码：

    /boot/refind_linux.conf

    "Boot using default options"     "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw add_efi_memmap initrd=boot\intel-ucode.img initrd=boot\amd-ucode.img initrd=boot\initramfs-%v.img"
    "Boot using fallback initramfs"  "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw add_efi_memmap initrd=boot\intel-ucode.img initrd=boot\amd-ucode.img initrd=boot\initramfs-%v-fallback.img"
    "Boot to terminal"               "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw add_efi_memmap initrd=boot\intel-ucode.img initrd=boot\amd-ucode.img initrd=boot\initramfs-%v.img systemd.unit=multi-user.target"

警告：

- `initrd` 路径是相对于内核所在文件系统的根目录。这可能是 `initrd=\boot\initramfs-%v.img` 或者 `initrd = initramfs-％v.img`（如果 `/boot` 是一个单独的分区，例如 ESP）。
- 在参数 `initrd` 中使用反斜杠 (`\`) 作为路径分隔符，否则内核可能无法找到 initramfs 镜像：`EFI stub: ERROR: Failed to open file: /boot/intel-ucode.img`。

注意： rEFInd用内核的版本替换 `refind_linux.conf` 中的 `％v`}（通过从文件名中提取if）。为了使 rEFInd 支持Arch Linux内核，必须按照 #对于 rEFInd 自动检测到的内核中的说明编辑 `esp/EFI/refind/refind.conf` 中的 `extra_kernel_version_strings`。

##### 无需配置的情况

如果你仅将 rEFInd 安装到 ESP 上并毫不费力地启动它（例如通过 UEFI Shell 或 KeyTool，或直接从固件），您仍然可以通过自动检测从启动菜单，而无需进行任何配置。

这之所以可行，是因为 rEFInd 具有回退机制，可以：

- 通过 Discoverable Partitions Specification 或者 `/etc/fstab` 分辨 root 分区（对于 `root=` 参数）。
- 从 GPT partition attributes 检测内核选项 (`ro` 或者 `rw`)。 （使用属性 `60` "read-only") 或者 `/etc/fstab`。

注意：rEFInd 不支持转义码 (如 `/etc/fstab` 中的 路径名空格)。

#### 手动启动项

如果未自动检测到内核，或者你只想对菜单项的选项进行更多控制，则可以使用 `refind.conf` 中的 stanzas 来手动创建引导项。确保 `scanfor` 包含 `manual`，否则这些条目将不会出现在 rEFInd 的菜单中。内核参数使用 `options` 关键字设置。 rEFInd 将使用 stanza 中的 `initrd` 关键字指定的文件附加 `initrd=` 参数。如果你需要其他 initrd（例如微码），则可以在 `options` 中指定它们（并且 `initrd` 关键字指定的会添加到末尾）。

手动启动项在 Creating Manual Boot Stanzas 中有详细解释。

    esp/EFI/refind/refind.conf

    ...

    menuentry "Arch Linux" {
    	icon     /EFI/refind/icons/os_arch.png
    	volume   "Arch Linux"
    	loader   /boot/vmlinuz-linux
    	initrd   /boot/initramfs-linux.img
    	options  "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw add_efi_memmap initrd=boot\intel-ucode.img initrd=boot\amd-ucode.img"
    	submenuentry "Boot using fallback initramfs" {
    		initrd /boot/initramfs-linux-fallback.img
    	}
    	submenuentry "Boot to terminal" {
    		add_options "systemd.unit=multi-user.target"
    	}
    }

您可能需要更改 `volume`以匹配文件系统的标签、PARTLABEL 或内核镜像所在分区的 PARTUUID。PARTUUID 必须大写的。有关分配卷标的示例，请参见 Persistent block device naming#通过标签。如果未指定 `volume`，则默认为启动 rEFInd 的卷（通常是EFI系统分区）。

警告：

- `loader` 和 `initrd` 的路径是相对于 `volume` 的根目录的相对路径。如果 `/boot` 是一个单独的分区（例如 ESP ），那么加载程序和 initrd 路径分别是 `/vmlinuz-linux` 和 `/initramfs-linux.img`。
- 在所有引用的 `initrd` 参数中使用反斜杠 (`\`) 作为路径分隔符，否则内核可能无法找到 initramfs 镜像：`EFI stub: ERROR: Failed to open file: /boot/initramfs-linux.img`。

## 在已有的 Windows UEFI 安装中使用 rEFInd

注意：在页面 Windows and Arch Dual Boot 中查看通常的注意事项。

rEFInd 兼容 UEFI Windows 安装时创建的 EFI 系统分区，因此没有必要创建或格式化另一个 FAT32 分区。只需挂载 Windows 的 ESP 并像往常一样安装 rEFInd。默认情况下，rEFInd 的自动检测功能应该识别任何现有的 Windows 引导程序。

注意：在某些情况下，Windows 的行为不同（低分辨率启动屏幕、OEM logo 被 Windows logo 替换、启动屏幕后出现黑屏、伪影）。如果您遇到这样的问题，请尝试在 `esp/EFI/refind/refind.conf` 中设置 `use_graphics_for +,windows` 或者将 `graphics on` 添加到Windows 引导项。

## 工具

rEFInd支持运行各种第三方工具。工具需要单独安装。在 `refind.conf` 中编辑 `showtools` 文件选择要显示的内容。

    esp/EFI/refind/refind.conf

    ...
    showtools shell, memtest, mok_tool, gdisk, fwupdate ...
    ...

### UEFI shell

参见 Unified Extensible Firmware Interface#UEFI Shell。

复制 `shellx64.efi` 到 EFI 分区的根目录。

### Memtest86

安装 memtest86-efiAUR 并将它复制到 `esp/EFI/tools/`。

    # cp /usr/share/memtest86-efi/bootx64.efi esp/EFI/tools/memtest86.efi

### 密钥管理工具

rEFInd 能够检测 Secure Boot 密钥管理工具，如果他们被放在 EPS 上的 rEFInd 的文件夹内，如 `esp/` 或 `esp/EFI/tools/`。

#### HashTool

参照 #使用 PreLoader， `HashTool.efi` 将被放在 rEFInd 的文件夹内。

#### MokManager

参照 #使用 shim，MokManager 将被放在 rEFInd 的文件夹内。

#### KeyTool

安装 efitools包。

将 KeyTool EFI 二进制文件放在 `esp/` 或者 `esp/EFI/tools/` 中，并命名为 `KeyTool.efi` 或 `KeyTool-signed.efi`。

关于签名 `KeyTool.efi` 的指导，请参考 Secure Boot#Using KeyTool。

### GPT fdisk (gdisk)

下载 gdisk EFI 应用并将 `gdisk_x64.efi` 复制到 `esp/EFI/tools/`。

### fwupdate

安装并设置好 fwupd。

将 `fwupx64.efi` 和固件复制到 `esp/EFI/tools/`：

    # cp /usr/lib/fwupd/efi/fwupdx64.efi esp/EFI/tools/

### 关机或重启

据报道，rEFInd 内置了关机和重启菜单项。由于这个工具列表是这个 wiki 中的同类工具中最广泛的，因此 UEFI shell 或其他 UEFI 引导管理器（如 systemd-boot ）的用户可能会对 powerofforreboot.efiAUR 感兴趣。

## 提示与小技巧

### 在 UEFI shell 中使用驱动

要在 UEFI shell 中使用 rEFInd 的驱动，请使用`load` 命令来加载它们，并使用 `map -r` 来刷新驱动器映射。

    Shell> load FS0:\EFI\refind\drivers\ext4_x64.efi
    Shell> map -r

现在你可以从 UEFI shell 访问你的文件系统了。

### 设置 efifb 分辨率

如果 `refind.conf` 中的分辨率被设置为一个不正确的值，在除了 Apple Mac 的所有系统中， rEFInd 都会展示一个支持的分辨率列表。对于 Apple Mac, 它会静默使用默认分辨率。

要确定 efifb 支持的帧缓冲区分辨率，请 gnu-efi包 将 `/usr/share/gnu-efi/apps/x86_64/modelist.efi` 复制到 ESP 的根目录。进入 UEFI shell 并运行 `modelist.efi`。

    Shell> FS0:\modelist.efi

    GOP reports MaxMode 3
     0: 640x480 BGRR pitch 640
    *1: 800x600 BGRR pitch 800
     2: 1024x768 BGRR pitch 1024

在 `refind.conf` 中设置一个。重启并用 `dmesg | grep efifb` 来检查设置是否已被应用。

### Btrfs 子卷支持

提示：确保安装了 `btrfs_x64.efi` 驱动程序, 可以将 `/usr/share/refind/drivers_x64/btrfs_x64.efi` 复制到 `esp/EFI/refind/drivers_x64/btrfs_x64.efi`来手动安装, 或者你也可以以 `refind-install /dev/sdx --alldrivers` 选项安装所有驱动程序。
警告：`btrfs_x64.efi` 不支持 `raid1c3/4`。

#### 自动检测

要允许在 Btrfs 子卷上进行内核自动检测，请取消注释并编辑 `refind.conf` 中的 `also_scan_dirs`。

    esp/EFI/refind/refind.conf

    ...
    also_scan_dirs +,subvolume/boot
    ...

然后在 `refind_linux.conf` 中将 `subvol=subvolume` 添加到 `rootflags`，之后将 `subvolume` 添加到 initrd 路径之前。

    /boot/refind_linux.conf

    "Boot using standard options"  "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw rootflags=subvol=subvolume initrd=subvolume\boot\initramfs-%v.img"

#### 手动启动项

如果将一个 btrfs 子卷作为根目录引导，请将子卷的路径预先添加到 loader 和 initrd 路径之前，并用 `rootflags=subvol=root_subvolume` 修改 `options` 行。在下面的示例中，root 已作为名为“ROOT”的btrfs子卷挂载（例如 `mount -o subvol=ROOT /dev/sdxY /mnt`）：

    esp/EFI/refind/refind.conf

    ...
    menuentry "Arch Linux" {
            icon     /EFI/refind/icons/os_arch.png
            volume   "[bootdevice]"
            loader   /ROOT/boot/vmlinuz-linux
            initrd   /ROOT/boot/initramfs-linux.img
            options  "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw rootflags=subvol=ROOT"
    ...
    }

如果失败将导致以下错误信息：`ERROR: Root device mounted successfully, but /sbin/init does not exist.`

### LoaderDevicePartUUID

从 0.13.1 版本开始，rEFInd 支持设置 UEFI 变量 LoaderDevicePartUUID。启用此选项允许 systemd-gpt-auto-generator(8) 自动挂载 EFI 系统分区，而无需在 `/etc/fstab` 中指定它。请参阅 systemd#GPT partition automounting。

对于 rEFInd， 要设置 `LoaderDevicePartUUID`, 请编辑 `refind.conf` 并取消注释 `write_systemd_vars true`:

    esp/EFI/refind/refind.conf

    ...
    write_systemd_vars true
    ...

您可以通过使用 `cat /sys/firmware/efi/efivars/LoaderDevicePartUUID-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f` 检查它的值，或者通过查看 `bootclt` 输出中 “Boot loader sets ESP partition information” 的状态来验证它是否已设置。

## 疑难解答

### Apple Macs

AUR 上的 mactel-bootAUR 是 "bless" 工具的实验性替代品。如果它不能正常工作， 在 OS X 中使用 "bless" 来将 rEFInd 设置为默认启动项。

     # bless --setBoot --folder esp/EFI/refind --file esp/EFI/refind/refind_x64.efi

### VirtualBox

6.1 版本之前的 VirtualBox 将只引导默认的 `esp/EFI/BOOT/bootx64.efi` 路径，因此 `refind-install` 至少需要与 `--usedefault` 选项一起使用。有关详细信息，请参阅 VirtualBox/Install Arch Linux as a guest#Installation in EFI mode on VirtualBox < 6.1。

## 参见

- The rEFInd Boot Manager by Roderick W. Smith.
- Wikipedia:rEFInd
- `/usr/share/refind/docs/README.txt`
- rEFInd discussion forum on Sourceforge

分类：​

- 启动加载程序

rEFInd
添加话题