Не удается найти "загрузочный резервный загрузчик" rEFInd

Я установил FreeBSD на свой MacBook Air, и он работает без сбоев. Однако вместо появления значка BSD Daemon его необходимо загрузить с помощью записи "Резервный загрузчик", и я хочу изменить это поведение.

Вот скриншот, который я сделал при загрузке FreeBSD через "Boot Fallback boot loader from EFI":

Странно, я не нашел ни одного файла с именем 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, добавив следующие пользовательские записи в /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/BOOT на ESP, чтобы EFI/FreeBSD, вы должны увидеть изменение его значка в rEFInd. Аналогично, если вы переименуете EFI/BOOT/bootx64.efi в EFI/BOOT/freebsd.efi, вы должны увидеть его изменение значка. Обе эти опции имеют то преимущество, что некоторые будущие ОС или утилиты смогут установить собственный резервный загрузчик без перегрузки загрузчика FreeBSD; но по той же причине, если обновление пакета FreeBSD приводит к установке улучшенного загрузчика FreeBSD, оно будет отображаться как новая резервная запись в rEFInd, и запись со значком FreeBSD в rEFInd не будет обновляться. Вам нужно будет вручную скопировать или переименовать новый загрузчик так же, как вы делали оригинал, чтобы применить обновление.
  • Применение значка к резервному загрузчику. Существует довольно много способов применить значки к резервному загрузчику без переименования или перемещения, как описано здесь в документации по rEFInd. Самое простое, вероятно, будет копировать EFI/refind/icons/os_freebsd.png в EFI/BOOT/bootx64.png на ESP. (То есть, чтобы дать файлу значка то же имя, что и у самого загрузчика, но с .png расширение.) Обратите внимание, что этот подход приведет к уязвимости: если кто-то решит использовать резервное имя файла загрузчика, ваша установка FreeBSD будет не загружаться, пока вы не переустановите загрузчик FreeBSD. OTOH, обновления для загрузчика FreeBSD должны применяться без проблем.

Обратите внимание, что для обеих этих опций требуется доступ к ESP. Этот раздел не монтируется по умолчанию в OS X, но mountesp скрипт, поставляемый с rEFInd, будет монтировать его и сообщать вам, где он монтируется. Я не знаю, если FreeBSD монтирует ESP по умолчанию. Если нет, вам нужно смонтировать его с mount_msdosfs команда, если я правильно помню имя команды. Вам нужно будет указать параметры для определения ESP и точки монтирования.

Создание раздела загрузки вручную, как вы пытаетесь сделать, также может сработать; но тогда вам нужно будет либо скрыть автоматически обнаруженные загрузчики, либо создать запись для OS X. Создание раздела ручной загрузки требует относительно глубокого понимания файлов загрузчика EFI, а также синтаксиса этих разделов загрузки. Как я и предлагал, гораздо проще переименовать загрузчик или добавить файл значков.

Другие вопросы по тегам