TL;DR: То ли OpenBSD, то ли efibootmgr может сломать вам UEFI, но беспокоиться не стоит.
Грех не поразвлечься в пятницу. Именно для этого и создан этот день недели.
Давно посещали мысли попробовать OpenBSD на своём основном ноутбуке. Он у меня слаб и убог, но возложенные на него задачи выполняет сносно. Зовут героя Lenovo IdeaPad 320-15ABR.
Так уж завелось, что основная и единственная ОС запускается через UEFI, а диск размечен в GPT. Всё соответствует реалиям 2018-го года. OpenBSD с позапрошлой, если не ошибаюсь, версии поддерживает загрузку с UEFI, но, как выяснилось, не совсем.
Установка прошла как обычно. Через проводное соединение. Особенность была в том, что я сидел и переводил сектора в гигабайты, чтобы не накосячить при разметке диска. Автоматическая разметка почему-то использовала только 4 гигабайта из 50-гигабайтного OpenBSD area, поэтому пришлось всё переделывать руками.
После первой перезагрузки ничего не произошло. OpenBSD не умеет работать с записями EFI и в список загрузчиков себя добавить не может. Вместо этого он просто кладёт свой .efi-файл в ESP-раздел по адресу EFI/BOOT/BOOTX64.EFI
, рассчитывая, что UEFI автоматически подгрузит это дело, т. к. UEFI в случае отсутствия других загрузчиков загружает именно это EFI-приложение. Сразу видно, что OpenBSD не рассчитана на мирное сосуществование с другими ОС.
Загрузилась основная ОС — Arch Linux. Я же как дурачок взял, расположил загрузчик OpenBSD в более удобное место (EFI/OpenBSD/OpenBSD.efi
) и добавил в список загрузчиков EFI с помощью efibootmgr
.
После очередной перезагрузки всё казалось правильным: загрузилась OpenBSD, которая автоматически встала на первое место в списке. Перезагружаюсь ещё раз, чтобы проверить, на месте ли Arch. После нажатия F12 (список загрузчиков) во время логотипа Lenovo ноутбук просто перезагрузился. Пытаюсь зайти в настройки BIOS — тот же результат.
Грубо говоря, ноутбук теперь может загрузить только OpenBSD и ничего кроме. Вынул жёсткий диск и вставил загрузочную флешку с Линуксом — бесконечная перезагрузка. Кирпич?
После десяти минут тупняка нашёл решение. Через OpenBSD подставил имевшийся от Арча grubx64.efi
вместо OpenBSD.efi
, рискуя получить окончательный кирпич. Однако GRUB загрузился и мне удалось с помощью того же efibootmgr
всё вернуть как было.
Причина до конца не ясна, но оказалось вот что. Порядок загрузки в UEFI определяется переменной BootOrder — это список из номеров загрузчиков. В данном ноутбуке UEFI оказался маленько кривоват: утилита настройки UEFI/BIOS (Setup) вынесена в самостоятельный пункт меню с собственной позицией в BootOrder.
Видимо, после махинации с установкой загрузчика OpenBSD в EFI-шный список случилось страшное: Setup исчез из BootOrder. Там остался только OpenBSD. Таким образом, ноутбуку без жёсткого диска было непонятно, что грузить. Но тогда он мог хотя бы попытаться загрузить флешку или показать меню по F12?..
Так или иначе, аккуратнее с UEFI. По возможности пользуйтесь старым добрым режимом BIOS — он гораздо надёжнее.