Миграция загрузки 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. С этой уверенностью я продолжал читать и пробовать комбинации предлагаемых в Интернете действий, пока одна из комбинаций не привела к решению проблемы.
Что я имею:
Раздел efi должен быть заполнен с помощью команды:
где ключ -i указывает на первый раздел с efi, а diskid/DISK-WD-XXXXXXXXXXXX - идентификатор нашего диска, который можно посмотреть командой:
Возможно, что вместо него будет что-то более короткое, типа: 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/". И смотрим, что получилось...
Скорее всего наш новый пункт "FreeBSD" имеет номер 0000 и он не активирован (рядом не стоит символа звёздочки), поднимаем его вверх по порядку, активируем и смотрим опять
Теперь вариант загрузки "FreeBSD" первый в очереди и рядом с ним стоит звёздочка. Можно перегружаться и зайти по ходу дела в настройки UEFI BIOS в раздел Boot. Здесь мы контролируем, что в качестве первого (или единственного) варианта загрузки указана наша метка "FreeBSD", также можно без проблем выбрать режим загрузки Fast, в котором вообще отсутствует опция CSM Support, на всякий случай сохраняем изменения и перегружаемся.
Если всё сделано правильно, загрузка будет проходить в режиме UEFI.
* 2022, пришлось воспользоваться своими же записями после фатальной попытки включить "UltraFastBoot". Всё работает.
Что я имею:
- Сервер на 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". Всё работает.
Комментарии
Показывать комментарии Как список | Древовидной структурой