找不到 rEFInd 的“后备引导加载程序”

找不到 rEFInd 的“后备引导加载程序”

我已经在 MacBook Air 上安装了 FreeBSD,并且运行顺畅。但是,它并没有出现BSD 守护进程图标,它必须通过“Fallback boot loader”条目来启动,我想改变这种行为。

在此处输入图片描述

下面是我通过“从 EFI 启动回退引导加载程序”启动 FreeBSD 时截取的屏幕截图:

在此处输入图片描述

奇怪的是,我没有loader.efi在我的设备上找到任何名为的文件:

sunqingyaos-MacBook-Air:~ sunqingyao$ sudo find / -name "*.efi"
find: /dev/fd/sunqingyao: No such file or directory
find: /dev/fd/sunqingyao: No such file or directory
/System/Library/AccessoryUpdaterBundles/USBCAccessoryFirmwareUpdater.bundle/Contents/Resources/HPMUtil.efi
/System/Library/CoreServices/backupd.bundle/Contents/Resources/tmbootpicker.efi
/System/Library/CoreServices/boot.efi
/usr/standalone/firmware/FUD/MultiUpdater/MultiUpdater.efi
/usr/standalone/i386/apfs.efi
/usr/standalone/i386/boot.efi
/Volumes/ESP/EFI/APPLE/UPDATERS/SMC/SmcFlasher.efi
/Volumes/ESP/EFI/refind/drivers_x64/btrfs_x64.efi
/Volumes/ESP/EFI/refind/drivers_x64/._btrfs_x64.efi
/Volumes/ESP/EFI/refind/drivers_x64/ext2_x64.efi
/Volumes/ESP/EFI/refind/drivers_x64/._ext2_x64.efi
/Volumes/ESP/EFI/refind/drivers_x64/ext4_x64.efi
/Volumes/ESP/EFI/refind/drivers_x64/._ext4_x64.efi
/Volumes/ESP/EFI/refind/drivers_x64/hfs_x64.efi
/Volumes/ESP/EFI/refind/drivers_x64/._hfs_x64.efi
/Volumes/ESP/EFI/refind/drivers_x64/iso9660_x64.efi
/Volumes/ESP/EFI/refind/drivers_x64/._iso9660_x64.efi
/Volumes/ESP/EFI/refind/drivers_x64/ntfs_x64.efi
/Volumes/ESP/EFI/refind/drivers_x64/._ntfs_x64.efi
/Volumes/ESP/EFI/refind/drivers_x64/reiserfs_x64.efi
/Volumes/ESP/EFI/refind/drivers_x64/._reiserfs_x64.efi
/Volumes/ESP/EFI/refind/._refind_x64.efi
/Volumes/ESP/EFI/refind/refind_x64.efi
/Volumes/ESP/EFI/refind/tools_x64/gptsync_x64.efi
/Volumes/ESP/EFI/refind/tools_x64/._gptsync_x64.efi
/Volumes/ESP/EFI/tools/gptsync_x64.efi
/Volumes/ESP/EFI/tools/._gptsync_x64.efi

尽管如此,我还是尝试通过添加以下自定义条目来定位“Fallback boot loader” /EFI/refind/refind.conf

menuentry "FreeBSD loader candidate 1" {
    icon \EFI\refind\icons\os_freebsd.png
    loader \EFI\boot\loader.efi
}

menuentry "FreeBSD loader candidate 2" {
    icon \EFI\refind\icons\os_freebsd.png
    loader \EFI\BOOT\bootx64.efi
}

但两种方法都不起作用。为了简洁起见,我只发布了“FreeBSD 加载器候选 1”的错误消息:

启动 loader.efi
使用加载选项''
无效的加载器文件!
错误:加载 loader.efi 时未找到

* 按任意键继续 *

答案1

后备引导加载程序EFI/BOOT/bootx64.efi位于EFI 系统分区 (ESP)。我上次检查时发现,这是 FreeBSD 默认存储其引导加载程序的位置。这有点奇怪,并且可能不顾及其他操作系统的感受——如果每个操作系统都使用后备引导加载程序文件名,它们都会互相践踏对方的引导加载程序,就像在 BIOS 下一样。(EFI 的优点之一是它明确支持任意数量的引导加载程序文件,从而避免了 BIOS 的这个问题。)

无论如何,您有两种选择:

  • 重命名 FreeBSD 引导加载程序或其目录-- 如果您将EFI/BOOTESP 重命名为EFI/FreeBSD,您应该会看到其图标在 rEFInd 中发生变化。同样,如果您重命名EFI/BOOT/bootx64.efiEFI/BOOT/freebsd.efi,您应该会看到其图标发生变化。这两个选项的优点是,未来的某些操作系统或工具将能够安装自己的后备引导加载程序,而不会破坏 FreeBSD 引导加载程序;但同样,如果 FreeBSD 软件包更新导致安装了改进的 FreeBSD 引导加载程序,它将作为 rEFInd 中的新后备条目出现,并且 rEFInd 中带有 FreeBSD 图标的条目将不是更新。您需要手动复制或重命名新的引导加载程序,就像您对原始引导加载程序所做的那样,以应用更新。
  • 将图标应用于后备引导加载程序-- 有多种方法可以将图标应用于后备引导加载程序,而无需重命名或移动它,如下所述在 rEFInd 文档中。最简单的方法可能是复制EFI/refind/icons/os_freebsd.pngEFI/BOOT/bootx64.pngESP 上。(也就是说,将图标文件命名为与引导加载程序本身相同的名称,但带有扩展名.png。)请注意,这种方法会导致漏洞:如果其他程序决定使用后备引导加载程序文件名,您的 FreeBSD 安装将无法启动,直到您重新安装 FreeBSD 引导加载程序。另一方面,对 FreeBSD 引导加载程序的更新应该无缝应用。

请注意,这两个选项都要求您访问 ESP。默认情况下,OS X 不会挂载此分区,但mountesprEFInd 附带的脚本会挂载它,并告诉您它挂载在哪里。我不知道 FreeBSD 是否默认挂载 ESP。如果没有,您需要使用该mount_msdosfs命令挂载它,如果我没记错命令名称的话。您需要提供选项来识别 ESP 和挂载点。

创建一个手动启动节(正如你尝试做的那样)也可以;但你需要隐藏自动检测到的启动加载程序或为 OS X 创建一个条目。创建手动启动节需要对 EFI 启动加载程序文件以及这些启动节的语法有相对深入的了解。很多正如我建议的那样,重命名引导加载程序或添加图标文件更容易。

相关内容