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

811
nalzok

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

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

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

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

Странно, я не нашел ни одного файла, вызываемого 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

* Нажмите любую клавишу, чтобы продолжить *

0

1 ответ на вопрос

1
Rod Smith

Резервный загрузчик находится EFI/BOOT/bootx64.efiна системном разделе EFI (ESP). Последнее, что я проверял, это то, где FreeBSD по умолчанию хранит свой загрузчик. Это немного странно и потенциально невнимательно для других ОС - если бы каждая ОС использовала имя резервного файла загрузчика, они все попрали бы друг над другом, как в BIOS. (Одним из преимуществ EFI является то, что он явно поддерживает произвольно большое количество файлов загрузчика, что позволяет избежать этой проблемы BIOS.)

В любом случае у вас есть несколько вариантов:

  • Переименуйте загрузчик FreeBSD или его каталог. Если вы переименуете EFI/BOOTESP в 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, а также синтаксиса этих разделов загрузки. Как я уже говорил, гораздо проще переименовать загрузчик или добавить файл значков.