rEFInd
rEFInd 是一个 UEFI 启动管理器,能够启动内核作为 EFI 启动桩。它是已停止维护的 rEFIt 的一个分支,并修复了许多关于非 Mac UEFI 启动的问题。它被设计为平台中立,并简化多操作系统的启动。
esp
表示 EFI 系统分区的挂载点。支持的文件系统
rEFInd 继承了 固件对文件系统的支持(即至少 FAT12、FAT16 和 FAT32)。此外,它还会加载放置在其自身在 ESP 上的安装目录的 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 脚本或手动复制文件并手动设置启动项。
使用 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 闪存驱动器或在 NVRAM 更改由 efibootmgr 引起的系统问题上很有帮助
# 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 中的 安全启动 支持,请参见 管理安全启动。
使用 PreLoader
参见 安全启动#设置 PreLoader 以获取已签名的 PreLoader.efi
和 HashTool.efi
二进制文件。
使用 --preloader /path/to/preloader
选项执行 refind-install
# 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,请使用 --shim /path/to/shim
选项执行 refind-install
# refind-install --shim /usr/share/shim-signed/shimx64.efi
下次您启用安全启动启动时,MokManager 将启动,您将需要注册 rEFInd (grubx64.efi
)、rEFInd 的驱动程序(例如 ext4_x64.efi
)和内核(例如 vmlinuz-linux
)的哈希值。
使用机器所有者密钥
要使用机器所有者密钥 (MOK) 签名 rEFInd,请安装 sbsigntools。
/etc/refind.d/keys
中,文件名为 refind_local.key
(PEM 格式私钥)、refind_local.crt
(PEM 格式证书)和 refind_local.cer
(DER 格式证书)。使用选项 --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
进入 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 原始安装,您可以重新运行它以复制更新的文件。新的配置文件将被复制为 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
之外,还要添加--yes
选项到refind-install
命令。如果未使用 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
是一个单独的分区,请参见 配置启动管理器:设置操作系统图标。 - 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-rt-lts,linux-zen,linux-lts,linux-rt,linux" ...
extra_kernel_version_strings
,rEFInd 将错误地将它找到的第一个 initramfs 作为 initrd=
内核参数传递,而不是使用与内核匹配的正确 initramfs。这将导致启动失败,因为匹配的可加载内核模块将不可用。- rEFInd 仅支持检测每个内核一个 initramfs 镜像,这意味着它不会检测后备 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 具有后备机制,可以
- 通过 可发现分区规范 或
/etc/fstab
识别根分区(用于root=
参数)。 - 从 GPT 分区属性(使用属性
60
"read-only")或/etc/fstab
检测内核选项(ro
或rw
)。
/etc/fstab
中不支持转义码(例如用于空格)。对于手动启动节
如果您的内核未被自动检测到,或者您只是想要更多地控制菜单项的选项,您可以使用 refind.conf
中的节手动创建启动项。确保 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
以匹配内核镜像所在分区的 filesystem's LABEL、PARTLABEL 或 PARTUUID。有关分配卷标的示例,请参见 持久块设备命名#按标签。如果未指定 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
。 - 如果使用 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
,或将 graphics on
添加到 Windows 启动节。工具
rEFInd 支持运行各种 第三方工具。工具需要单独安装。编辑 refind.conf
中的 showtools
以选择要显示的工具。
esp/EFI/refind/refind.conf
... showtools shell, memtest, mok_tool, gdisk, fwupdate ... ...
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 二进制文件放置在 esp/
或 esp/EFI/tools/
中,名称为 KeyTool.efi
或 KeyTool-signed.efi
。
请参阅安全启动#使用KeyTool章节,获取有关签名 KeyTool.efi
的说明。
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/
关机或重启
据报告,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 支持的帧缓冲分辨率,请将 /usr/lib/gnuefi/apps/modelist.efi
从 gnu-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
前置到 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 子卷作为根目录启动,请将子卷的路径前置到加载器和 initrd 路径,并在 options
行中添加 rootflags=subvol=root_subvolume
。在下面的示例中,根目录已作为名为“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 文件,因为它 缺少环回驱动程序,但它可以启动已直接写入分区的 ISO 镜像。这需要 iso9660_x64.efi
驱动程序。
故障排除
Apple Mac
从 macOS 内部使用 bless 将 rEFInd 设置为默认启动项
# bless --setBoot --folder esp/EFI/refind --file esp/EFI/refind/refind_x64.efi
如果您的 drivers_x64
文件夹包含多个文件系统驱动程序(有关说明,请参阅 #安装 rEFInd 启动管理器),这可能会通过文件系统驱动程序错误导致 rEFInd 无法正常运行,从而仅显示空白屏幕和 rEFInd 徽标(对于自定义主题,这将是设置的背景图像)。要修复此问题,只需删除所有驱动程序,除了内核所在的文件系统的驱动程序。
另一个潜在的空白屏幕原因是与 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 ...
不使用发行版徽标
如果您看到 Tux 而不是 Arch 徽标,那么您可能受到 此问题 的影响(您的根分区类型为Linux x86-64 root (/) 而不是Linux filesystem)。
您可以使用 fdisk#更改分区类型 来修复此问题。
此外,如果您的根分区标签仅为“Linux”或包含“linux”字样,则可能会显示 Tux。要指定您的发行版名称,请考虑重命名分区标签以反映您的发行版名称。
您可以使用文件系统标签来修复此问题。
获得 Arch 徽标而不是 Tux 的另一种方法是将 Arch 徽标图像文件复制到您的内核旁边(例如 vmlinuz-linux
),并将图像文件命名为与您的内核相同的名称。
# cp /usr/share/refind/icons/os_arch.png /boot/vmlinuz-linux.png
错误:加载 vmlinuz-linux 时未找到
如果您添加了一个 menuentry 并正确设置了卷令牌,但仍然收到“Error: Not Found while loading vmlinuz-linux”消息,您可能需要检查内核所在的文件系统的驱动程序是否已正确安装。请记住,不受支持的文件系统将不会被检测到,即使它们在配置文件中。
参见
- rEFInd 启动管理器,作者 Roderick W. Smith。
- 维基百科:rEFInd
/usr/share/refind/docs/README.txt
- Sourceforge 上的 rEFInd 讨论论坛