rEFInd
rEFInd 是一个 UEFI 引导管理器,能够以 EFI 引导存根 (EFI boot stub) 的方式启动内核。它是已停止维护的 rEFIt 的一个分支,修复了许多与非 Mac UEFI 启动相关的问题。它的设计目标是平台中立,并简化多操作系统启动。
esp 表示 EFI 系统分区 的挂载点。支持的文件系统
rEFInd 继承了固件对文件系统的支持(即至少支持 FAT12、FAT16 和 FAT32)。此外,它还会加载放置在 ESP 分区 rEFInd 安装目录下的 drivers 和 drivers_x64 子目录中的任何 UEFI 驱动程序。例如 esp/EFI/refind/drivers_x64/。
rEFInd 还附带了一小部分只读 EFI 文件系统驱动程序,特别是 ext4 和 Btrfs。
安装
安装 rEFInd 引导管理器
rEFInd 附带了UEFI 驱动程序,提供对 ReiserFS(已弃用)、Ext2、Ext4、Btrfs、ISO-9660 和 HFS+ 的只读支持。此外,rEFInd 可以访问 UEFI 本身支持的任何文件系统,包括 FAT(UEFI 规范强制要求)、Mac 上的 HFS+ 以及某些系统上的 ISO-9660。
要查找更多驱动程序,请参阅 rEFInd 引导管理器:使用 EFI 驱动程序:查找附加的 EFI 驱动程序。
要使用 rEFInd,必须将其安装到 EFI 系统分区,可以使用 refind-install 脚本,也可以手动复制文件并设置引导项。
- 您的内核和 initramfs 必须位于 rEFInd 可以读取的文件系统上。
- Btrfs 的高级特性(如写时复制 CoW)可能会给 rEFInd 的文件系统驱动带来问题。例如,如果您的
/boot文件夹位于启用了去重功能的 Btrfs 上,rEFInd 0.14.2 会抛出一个伪造的Not Found错误。请参考 Btrfs#禁用 CoW 以了解如何为/boot禁用写时复制。
使用 refind-install 脚本安装
rEFInd 软件包中包含 refind-install 脚本,可简化将 rEFInd 设置为默认 EFI 引导项的过程。该脚本有多个选项可处理不同的设置和 UEFI 实现。请参阅 refind-install(8) 或阅读安装脚本中的注释,了解各种安装选项的说明。
对于许多系统,只需执行以下命令即可:
# refind-install
这将尝试查找并挂载您的 ESP,将 rEFInd 文件复制到 esp/EFI/refind/,并使用 efibootmgr 将 rEFInd 设置为默认 EFI 引导程序。
或者,您可以将 rEFInd 安装到默认/后备引导路径 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 时,/boot/refind_linux.conf 会被填充为 Live 系统的内核选项,而不是安装目标系统的内核选项。请编辑 /boot/refind_linux.conf 并确保其中的内核参数对于您的系统是正确的,否则下次启动时可能会导致内核崩溃。示例文件请参见 #refind_linux.conf。默认情况下,rEFInd 将扫描所有驱动器(在其拥有对应驱动程序的前提下),并为找到的每个 EFI 引导加载程序添加引导项,这应该会包含您的内核(因为 Arch 默认启用了 EFI 引导存根)。因此,此时您可能已经拥有了一个可引导的系统。
安全启动
有关 rEFInd 中的 安全启动 (Secure Boot) 支持,请参阅 管理安全启动。
使用 PreLoader
请参阅 安全启动#设置 PreLoader 以获取已签名的 PreLoader.efi 和 HashTool.efi 二进制文件。
执行 refind-install 并添加选项 --preloader /path/to/preloader
# refind-install --preloader /usr/share/preloader-signed/PreLoader.efi
下次在启用安全启动的情况下启动时,HashTool 将启动,您需要注册 rEFInd (loader.efi)、rEFInd 驱动程序(例如 ext4_x64.efi)和内核(例如 vmlinuz-linux)的哈希值。
更多信息请参见 refind-install(8)。
使用 shim
安装 shim-signedAUR。阅读 安全启动#shim,但跳过所有文件复制步骤。
使用哈希值
若要仅通过 shim 使用哈希值,请执行 refind-install 并添加选项 --shim /path/to/shim
# refind-install --shim /usr/share/shim-signed/shimx64.efi
下次在启用安全启动的情况下启动时,MokManager 将启动,您需要注册 rEFInd (grubx64.efi)、rEFInd 驱动程序(例如 ext4_x64.efi)和内核(例如 vmlinuz-linux)的哈希值。
使用机器所有者密钥 (MOK)
若要使用机器所有者密钥 (MOK) 签名 rEFInd,请安装 sbsigntools。
/etc/refind.d/keys 目录中,命名分别为 refind_local.key(PEM 格式私钥)、refind_local.crt(PEM 格式证书)和 refind_local.cer(DER 格式证书)。执行 refind-install 并添加选项 --shim /path/to/shim 和 --localkeys
# 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
进入 MokManager 后,将 refind_local.cer 添加到 MoKList 中。refind_local.cer 位于 rEFInd 安装目录下的 keys 目录中,例如 esp/EFI/refind/keys/refind_local.cer。
更多信息请参见 refind-install(8)。
使用自定义密钥
按照 安全启动#使用您自己的密钥 创建密钥。
创建目录 /etc/refind.d/keys 并将签名数据库 (db) 密钥和证书放入其中。将文件命名为:refind_local.key(PEM 格式私钥)、refind_local.crt(PEM 格式证书)和 refind_local.cer(DER 格式证书)。
运行安装脚本时添加选项 --localkeys,例如:
# refind-install --localkeys
rEFInd EFI 二进制文件将使用所提供的密钥和证书进行签名。
手动安装
如果 refind-install 脚本对您无效,可以手动设置 rEFInd。
首先,将可执行文件复制到 ESP:
# mkdir -p esp/EFI/refind # cp /usr/share/refind/refind_x64.efi esp/EFI/refind/
如果您想将 rEFInd 安装到默认/后备引导路径,请将以下说明中的 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 系统分区的设备名和分区号。如果您将 rEFInd 安装到默认/后备路径 esp/EFI/BOOT/bootx64.efi,则可以跳过此步骤。
# efibootmgr --create --disk /dev/sdX --part Y --loader /EFI/refind/refind_x64.efi --label "rEFInd Boot Manager" --unicode
此时,您应该可以重启进入 rEFInd,但它可能无法引导您的内核。如果您的内核不在 ESP 上,rEFInd 可能需要挂载分区才能找到它。如果相关文件系统不是 UEFI 支持的类型,则可能需要额外的驱动程序文件。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/
F10 会将屏幕截图保存到 ESP 的根目录。升级
Pacman 会更新 /usr/share/refind/ 中的 rEFInd 文件,但不会自动为您将新文件复制到 ESP。如果 refind-install 在您初次安装时有效,您可以重新运行它来复制更新后的文件。新配置文件将复制为 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= 可能需要根据您的设置更改为正确的更新命令。如果您进行了 #手动安装,则可以创建自己的更新脚本并由钩子调用。
- 如果您 配置了 rEFInd 安全启动,除了添加
--localkeys外,还需要在refind-install命令中添加--yes选项。这将防止在未使用 shim 或系统在禁用安全启动的情况下启动时命令执行失败。更多信息请参阅 refind-install(8)。 - 如果 ESP 没有挂载到
/boot且您依赖自动挂载来挂载它,请确保按照 EFI 系统分区#备用挂载点 中的说明预加载vfat模块。否则,如果 refind 在内核升级时一同更新,ESP 将变得不可访问。
配置
rEFInd 配置文件 refind.conf 位于 rEFInd EFI 应用程序所在的同一目录中(通常是 esp/EFI/refind 或 esp/EFI/BOOT)。默认配置文件包含详细注释,解释了所有选项。请参阅 配置引导管理器 获取更详尽的解释。
rEFInd 在运行时会自动检测可启动的 EFI 二进制文件(Linux 内核、其他操作系统引导加载程序、UEFI 引导项等)。这意味着在大多数简单情况下,rEFInd 无需任何配置即可工作。特别是,通常可以直接默认启动 Windows。
但这并不意味着不需要配置;对于 Linux,用户通常需要设置内核参数和 initramfs。这可以在另一个配置文件 refind_linux.conf 中完成。详情见下文。
传递内核参数
有两种设置 rEFInd 传递给内核的 内核参数 的方法。
针对 rEFInd 自动检测到的内核
rEFInd 有两个(或多个)配置文件。refind.conf 位于 ESP 中,用于配置 rEFInd 本身。另一方面,refind_linux.conf 位于 /boot(即内核映像所在的目录),用于配置内核的启动方式。
对于自动检测到的内核,您可以显式地在 /boot/refind_linux.conf 中指定内核参数,或者依赖 rEFInd 识别根分区和内核参数的能力。更多信息请参阅 启动 Linux 的方法:对于有远见或运气好的人:最简单的方法。
- 当
/etc/os-release与内核位于同一分区时,rEFInd 会自动为引导项选择 Arch Linux 图标 (os_arch.png)。如果您的/boot是独立分区,请参阅 配置引导管理器:设置 OS 图标。 - rEFInd 不支持检测统一内核映像 (UKI) 的发行版。若要为 统一内核映像 设置图标,请将
/usr/share/refind/icons/os_arch.png复制到esp/EFI/Linux/并确保文件名匹配。例如,如果您有esp/EFI/Linux/arch-linux.efi,则将图标命名为esp/EFI/Linux/arch-linux.png。
示例 refind.conf 中的 extra_kernel_version_strings 选项已配置为支持 Arch 官方支持的内核 的命名方案。如果您使用其他内核,请务必相应地更改此选项。
extra_kernel_version_strings,rEFInd 会错误地将它找到的第一个 initramfs 作为 initrd= 内核参数传递,而不是使用与内核匹配的 initramfs。这将导致启动失败,因为无法加载相应的内核模块。- rEFInd 仅支持每个内核检测一个 initramfs 映像,这意味着它无法检测到后备 (fallback) initramfs 或 外部微代码 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 的第一行非注释行将作为内核的默认参数。后续行将在子菜单中创建条目,可通过 Insert、F2、Tab 或 + 访问。
或者,尝试以 root 身份运行 mkrlconf。它会尝试在 /boot 中查找您的内核并自动生成 refind_linux.conf。该脚本只会设置最基本的内核参数,因此请务必检查生成的文件以确保正确性。
如果您没有指定 initrd= 参数,rEFInd 将通过在内核所在目录中搜索常见的 RAM 磁盘文件名来自动添加它。如果您需要多个或非默认的 initrd= 参数,则必须在 refind_linux.conf 中手动指定它们。例如:
/boot/refind_linux.conf
"Boot using default options" "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw add_efi_memmap" "Boot using fallback initramfs" "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw add_efi_memmap initrd=boot\initramfs-%v-fallback.img" "Boot to terminal" "root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw add_efi_memmap systemd.unit=multi-user.target"
- 要使 rEFInd 支持 Arch Linux 内核,必须按照 #针对 rEFInd 自动检测到的内核 中的说明编辑
esp/EFI/refind/refind.conf中的extra_kernel_version_strings。 initrd路径是相对于内核所在文件系统根目录的。这可能是initrd=\boot\initramfs-%v-fallback.img,或者如果/boot是独立分区(例如 ESP),则为initrd=initramfs-%v-fallback.img。- 在
initrd参数中使用反斜杠 (\) 作为路径分隔符,否则内核可能无法找到 initramfs 映像:EFI stub: ERROR: Failed to open file: /boot/initramfs-linux-fallback.img。 - 如果使用 Booster 生成的 initramfs 映像,请将 initramfs 文件名中的
initramfs替换为booster,并确保在主 initramfs 映像之前指定 外部微代码 initramfs 映像。例如:initrd=boot\amd-ucode.img initrd=\boot\booster-%v.img。
- 引号通过重复进行转义(即
""是"的转义版本)。例如,要将选项acpi_osi="Windows 2015"传递给上述refind_linux.conf的第一个引导条目:"Boot using default options" "... acpi_osi=""Windows 2015"" "
- rEFInd 会将
refind_linux.conf中的%v替换为内核版本(通过从文件名中提取)。
无需配置
如果您仅仅将 rEFInd 安装到 ESP 并直接启动它(例如通过 UEFI shell、KeyTool 或直接从固件启动),您仍然可以通过自动检测获得一个启动菜单,无需任何配置。
这是因为 rEFInd 有一个后备机制,可以:
- 通过 可发现分区规范 (Discoverable Partitions Specification) 或
/etc/fstab识别根分区(用于root=参数)。 - 从 GPT 分区属性(使用属性
60“只读”)或/etc/fstab检测内核选项 (ro或rw)。
/etc/fstab 中的转义代码(例如用于空格的转义)。针对手动引导节
如果您的内核未被自动检测到,或者您仅仅想更好地控制菜单项选项,可以手动在 refind.conf 中创建引导节 (stanzas)。确保 scanfor 包含 manual,否则这些条目不会出现在 rEFInd 菜单中。内核参数通过 options 关键字设置。rEFInd 会使用 initrd 关键字指定的文件附加 initrd= 参数。
手动引导节在 创建手动引导节 中有详细解释。
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"
submenuentry "Boot using fallback initramfs" {
initrd /boot/initramfs-linux-fallback.img
}
submenuentry "Boot to terminal" {
add_options "systemd.unit=multi-user.target"
}
}
您可能需要更改 volume 以匹配内核映像所在分区的 LABEL、PARTLABEL 或 PARTUUID。有关分配卷标的示例,请参见 持久块设备命名#按标签。如果未指定 volume,则默认为启动 rEFInd 的卷(通常是 EFI 系统分区)。
loader和initrd路径是相对于volume根目录的。如果/boot是独立分区(例如 ESP),则路径应分别为/vmlinuz-linux和/initramfs-linux.img。- 在所有带引号的
initrd参数中使用反斜杠 (\) 作为路径分隔符,否则内核可能无法找到 initramfs 映像:EFI stub: ERROR: Failed to open file: /boot/initramfs-linux.img。 - 如果使用 Booster 生成的 initramfs 映像,请将 initramfs 文件名中的
initramfs替换为booster。例如:initrd /boot/booster-linux.img。 - rEFInd 0.14.2 在某些设备上会错误地用 PARTLABEL 填充 LABEL,这可能导致
volume匹配失败,并退回使用默认引导卷。解决方法是在进入主菜单后加载任何驱动程序或按Esc键重新扫描卷。参见 [1]。
"" 是 " 的转义版本)。例如,要将选项 acpi_osi="Windows 2015" 传递给上述引导条目 "Arch Linux":options "... acpi_osi=""Windows 2015"" "
与现有的 UEFI Windows 并存安装
rEFInd 兼容 UEFI Windows 安装所创建的 EFI 系统分区,因此在 Windows 旁安装 Arch 时,无需创建或格式化另一个 FAT32 分区。只需挂载现有的 ESP 并像往常一样安装 rEFInd。默认情况下,rEFInd 的自动检测功能应该能识别任何现有的 Windows 或恢复引导加载程序。
esp/EFI/refind/refind.conf 中设置 use_graphics_for +,windows,或在 Windows 引导节中添加 graphics on。工具
rEFInd 支持运行各种 第三方工具。工具需要单独安装。编辑 refind.conf 中的 showtools 以选择要显示的工具。
esp/EFI/refind/refind.conf
... showtools shell, memtest, mok_tool, gdisk, fwupdate ... ...
UEFI shell
请参阅 统一可扩展固件接口#UEFI Shell。
将 shellx64.efi 复制到 EFI 系统分区 的根目录。
Memtest86+
安装 memtest86+-efi 并将其复制到 esp/EFI/tools/。
# cp /boot/memtest86+/memtest.efi esp/EFI/tools/memtest86.efi
密钥管理工具
如果将安全启动密钥管理工具放置在 ESP 上的 rEFInd 目录中,即 esp/ 或 esp/EFI/tools/,rEFInd 能够检测到它们。
HashTool
按照 #使用 PreLoader 的说明,HashTool.efi 将被放置在 rEFInd 目录中。
MokManager
按照 #使用 shim 的说明,MokManager 将被放置在 rEFInd 目录中。
KeyTool
安装 efitools。
将 KeyTool EFI 二进制文件以 KeyTool.efi 或 KeyTool-signed.efi 的名称放置在 esp/ 或 esp/EFI/tools/ 中。
有关签名 KeyTool.efi 的说明,请参阅 安全启动#使用 KeyTool。
GPT fdisk (gdisk)
下载 gdisk EFI 应用程序并将 gdisk_x64.efi 复制到 esp/EFI/tools/。
fwupd
将 fwupdx64.efi 二进制文件和固件文件复制到 esp/EFI/tools/。
# cp /usr/lib/fwupd/efi/fwupdx64.efi esp/EFI/tools/fwupx64.efi
关机或重启
据称 rEFInd 内置了关机和重启菜单项。由于本 wiki 中这个工具列表最为详尽,UEFI shell 或其他 UEFI 引导管理器(如 systemd-boot)的用户可能对 powerofforreboot.efiAUR 感兴趣。
自定义
rEFInd 支持广泛的自定义,允许您修改启动屏幕上的图标、背景和字体。
手动自定义
要自定义 rEFInd,您需要编辑位于 esp/EFI/refind 的 refind.conf 配置文件。在以下示例中,所有资源都存储在 esp/EFI/refind/assets 中。
要设置自定义背景图像(横幅),请使用 refind.conf 中的 wallpaper 指令:
banner assets/banner.png
要设置自定义图标集,请使用 refind.conf 中的 icons_dir 指令并将其指向包含图标的文件夹:
icons_dir assets/icons
refind 软件包为大多数发行版提供了图标集,包括 Arch Linux。这些图标可以在 esp/EFI/refind/icons 中找到。
安装外部主题
安装外部主题很简单。首先,在您的 rEFInd 目录中创建一个 themes 文件夹:
# mkdir esp/EFI/refind/themes
克隆主题(例如,如果它托管在 GitHub 上):
# git clone url-to-theme esp/EFI/refind/themes/theme-name
或者,手动复制主题:
# cp -r path-to-theme esp/EFI/refind/themes/theme-name
在 refind.conf 中,包含主题的配置文件:
include themes/theme-name/theme-name.conf
技巧与提示
在 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/lib/gnuefi/apps/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 中设置其中一个。重启并通过以 root 身份运行 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 ...
接下来,将 subvol=subvolume 添加到 refind_linux.conf 中的 rootflags,然后将 subvolume 添加到 initramfs 路径前。
/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 和 initramfs 路径前,并使用 rootflags=subvol=root_subvolume 修改 options 行。在下面的示例中,根分区挂载为一个名为 '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 分区自动挂载。
要使 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 检查其值,或者查看 bootctl 输出中的“Boot loader sets ESP information”状态来验证它是否已设置。
ISO 镜像
rEFInd 不支持启动 ISO 文件,因为它 缺少环回 (loopback) 驱动程序,但它可以启动直接写入分区的 ISO 映像。这需要 iso9660 驱动程序,可以在 /usr/share/refind/drivers_x64/iso9660_x64.efi 找到。
故障排除
Apple Mac
从 macOS 内部使用 bless 将 rEFInd 设置为默认引导项:
# bless --setBoot --folder esp/EFI/refind --file esp/EFI/refind/refind_x64.efi
rEFInd 菜单屏幕空白
如果您的 drivers_x64 文件夹包含多个文件系统驱动程序(参见 #安装 rEFInd 引导管理器 以获取澄清),这可能导致 rEFInd 因文件系统驱动程序错误而无法正常运行,仅显示带有 rEFInd logo 的空白屏幕(对于自定义主题,这将是背景图像)。要解决此问题,只需删除除内核所在文件系统对应的驱动程序之外的所有驱动程序。
导致空白屏幕的另一个潜在原因是与 Windows 双启动时,rEFInd 未能成功自动扫描其他磁盘上的 EFI 系统分区。要解决这个问题,请使用 blkid 识别 Windows 分区,并将每个 Windows 分区的 PARTUUID 以逗号分隔的形式添加到 refind.conf 中的 dont_scan_volumes 变量中。例如:
# blkid
/dev/nvme0n1p1: LABEL="SYSTEM" UUID="4CE7-C215" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="13aa9955-1234-5678-9098-006c334b5088" /dev/nvme0n1p5: LABEL="Windows RE Tools" BLOCK_SIZE="512" UUID="08C4E6C5C4E6B45A" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="4eced110-0987-6543-2123-b0ab8576869b"
esp/EFI/refind/refind.conf
... dont_scan_volumes 13aa9955-1234-5678-9098-006c334b5088,4eced110-0987-6543-2123-b0ab8576869b ...
不使用发行版 logo
如果您看到 Tux (Linux 企鹅) 而不是 Arch Logo,则您可能受到 此问题 的影响(您的根分区类型是 Linux x86-64 root (/) 而不是 Linux filesystem)。
您可以使用 fdisk#更改分区类型 来解决此问题。
此外,如果根分区的标签仅仅是 "Linux" 或包含单词 "linux",Tux 也可能会显示。若要指定发行版名称,请考虑重命名分区标签以反映发行版名称。
您可以使用 文件系统标签 来解决此问题。
另一种获取 Arch Logo 而不是 Tux 的方法是,将 Arch Logo 图像文件复制到内核(例如 vmlinuz-linux)旁边,并为图像文件命名为与内核相同的名称。
# cp /usr/share/refind/icons/os_arch.png /boot/vmlinuz-linux.png
加载 vmlinuz-linux 时出现 Not Found 错误
如果您添加了菜单项并正确设置了卷令牌,但仍然收到 "Error: Not Found while loading vmlinuz-linux" 消息,您可能需要检查内核所在文件系统的驱动程序是否已正确安装。请记住,不受支持的文件系统即使在配置文件中列出也不会被检测到。
参见
- rEFInd 引导管理器 作者:Roderick W. Smith。
- Wikipedia:rEFInd
/usr/share/refind/docs/README.txt- Sourceforge 上的 rEFInd 讨论论坛