Skip to content

Миграция загрузки FreeBSD с BIOS на UEFI

После замены материнской платы на домашнем FreeBSD сервере с ASRock j1800m на q1900m, неожиданно (для меня, по крайней мере), сервер перестал загружаться в UEFI режиме: большие буквы на экране, разрешение 640x480, смена разрешения посреди загрузки, пустые поля между строками и прочее. Он не перестал загружаться совсем, благо я при установке запасся обоими разделами и efi, и freebsd-boot, и сервер автоматически перешёл на загрузку в режиме BIOS. В UEFI BIOS переключиться на вариант загрузки UEFI с HDD более невозможно, т.к. он отсутствует, утилита efibootmgr не запускается, в Интернете - статьи о похожих проблемах пятилетней давности и предлагаемых решениях перенести ядро с модулями со ZFS на efi раздел. У Вас что-то похожее? Я полагаю, Вам будет интересно прочитать эту статью.

Я исходил из того, что сервер исправно загружался с efi раздела со старой платой, продолжает грузиться этим макаром с USB Flash, а та же самая "старая" плата продолжает исправно загружаться в efi режиме, но уже на Ubuntu. Это подпитывало мою уверенность, что дело не в какой-то ошибке UEFI BIOS. С этой уверенностью я продолжал читать и пробовать комбинации предлагаемых в Интернете действий, пока одна из комбинаций не привела к решению проблемы.

Что я имею:
  • Сервер на ASRock q1900m;
  • Диск с GPT разметкой:
    CODE:
    GPT 128 1            efi         40       3032 efi  2   freebsd-boot       3072       1024 boot0  3   freebsd-swap       4096   33554432 swap0  4    freebsd-zfs   33558528 3873470464 zfs0  [bootme] 
  • FreeBSD 12.1-STABLE;
  • и желание заставить сервер загружаться в efi режиме;

Раздел efi должен быть заполнен с помощью команды:
CODE:
gpart bootcode -p /boot/boot1.efifat -i 1 diskid/DISK-WD-XXXXXXXXXXXX

где ключ -i указывает на первый раздел с efi, а diskid/DISK-WD-XXXXXXXXXXXX - идентификатор нашего диска, который можно посмотреть командой:
CODE:
# gpart show =>        40  3907029088  diskid/DISK-WD-XXXXXXXXXXXX  GPT  (1.8T)           40        3032                            1  efi  (1.5M)         3072        1024                            2  freebsd-boot  (512K)         4096    33554432                            3  freebsd-swap  (16G)     33558528  3873470464                            4  freebsd-zfs  [bootme]  (1.8T)   3907028992         136                               - free -  (68K)

Возможно, что вместо него будет что-то более короткое, типа: ada0.
Если Ваша система "ну совсем не грузится", то эти команды можно выполнить и позже, после загрузки с USB-носителя.

Итак, первое, что нужно сделать, это заготовить USB-носитель, с которого Вы сможете загрузиться в UEFI режиме. Без этого ничего не получится. Как это сделать, описано тут: 2.3.7. Подготовка загрузочных дисков.

Второе, в настройках UEFI BIOS в разделе boot отключаем CSM support, чтобы сократить список загрузочных вариантов (вариант UEFI:... для USB Flash никуда не пропадёт) и сохраняем настройки, предварительно проверив, что Ваш USB Flash уже вставлен в разъём.

Третье, грузимся с USB-носителя в UEFI режиме до запроса установки FreeBSD - имеет смысл принудительно выбрать соответствующую опцию в меню загрузки материнской платы (Вызывается, обычно, по <F11> сразу после включения компьютера). В меню установки FreeBSD выбираем пункт Shell и оказываемся в строке приглашения shell.



Если Вы не уверены в содержимом раздела efi или, напротив, уверены, что он пуст, самое время записать туда код загрузчика (см. команду "gpart bootcode..." выше. Она не поменялась, просто исходник загрузчика будет взят с загрузочного USB)

Четвёртое, подмонтируем efi раздел нашего HDD в папку, например, /mnt. Вспоминаем, как у нас пишется идентификатор жёсткого диска, добавляем к нему суффикс p1, что для GPT разметки означает первый раздел (тот который efi) и добавляем новый вариант загрузки (я назвал его скромно "FreeBSD"), указав для выполнения файл загрузчика, который после монтирования находится в папке "/mnt/EFI/BOOT/". И смотрим, что получилось...
CODE:
mount_msdosfs /dev/diskid/DISK-WD-XXXXXXXXXXXXp1 /mnt efibootmgr -c -l "/mnt/EFI/BOOT/BOOTx64.efi" -L "FreeBSD" efibootmgr -v

Скорее всего наш новый пункт "FreeBSD" имеет номер 0000 и он не активирован (рядом не стоит символа звёздочки), поднимаем его вверх по порядку, активируем и смотрим опять
CODE:
efibootmgr -o 0000 efibootmgr -a -b 0000 efibootmgr -v

Теперь вариант загрузки "FreeBSD" первый в очереди и рядом с ним стоит звёздочка. Можно перегружаться и зайти по ходу дела в настройки UEFI BIOS в раздел Boot. Здесь мы контролируем, что в качестве первого (или единственного) варианта загрузки указана наша метка "FreeBSD", также можно без проблем выбрать режим загрузки Fast, в котором вообще отсутствует опция CSM Support, на всякий случай сохраняем изменения и перегружаемся.

Если всё сделано правильно, загрузка будет проходить в режиме UEFI.

* 2022, пришлось воспользоваться своими же записями после фатальной попытки включить "UltraFastBoot". Всё работает.

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.
E-Mail addresses will not be displayed and will only be used for E-Mail notifications.
To leave a comment you must approve it via e-mail, which will be sent to your address after submission.
Опции формы

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.