bhyve и некоторые другие гипервизоры (похоже что VirtualBox тоже) в режиме EFI не поддерживают эмуляцию NVRAM для сохранения efi variables между перезагрузками. Это может привести к проблеме: гостевая ОС установится штатно, а после перезагрузки получаем сообщение от EFI наподобие
Boot Failed. EFI DVD/CDROM
Failed to set MokListRT: Invalid Parameter
Failed to open \EFI\BOOT\grubx64.efi - Not Found
Failed to load image \EFI\BOOT\grubx64.efi: Not Found
start_image() returned Not Found
Boot Failed. EFI Misc Device
.
Это происходит оттого, что инсталлятор при установке ОС сохранил в efi variables путь к загрузчику (например "\EFI\centos\grubx64.efi"), а после перезагрузки гостевой системы настройка забылась и гипервизор начинает пытаться грузить нечто другое, что заложено в него по умолчанию или по эвристике.
Решений может быть несколько.
Первое тупое. Подмонтировать как-нибудь efi-раздел установленной гостевой ОС (например из другой виртуалки, или из LiveCD в той же виртуалке) и положить нужный загрузчик в то место, где его ищет и не может найти гипервизор: например подложить его в качестве "\EFI\BOOT\BOOTX64.EFI", или как в примере выше, скопировать из \EFI\centos\grubx64.efi в \EFI\BOOT\grubx64.efi.
Второе более интересное. После неудачной загрузки дождаться EFI interactive shell и создать файл startup.nsh, это типа такой autoexec.bat:
fs0:
edit startup.nsh
А в нем уже прописать тот загрузчик, который нужен гостевой ОС, например строчку "\EFI\centos\grubx64.efi".
Третье фантастическое. Запинать авторов UEFI-EDK2 firmware реализовать поддержку сохранения efi variables между перезагрузками.
UPDATE. Вот на ту же тему
https://www.centos.org/forums/viewtopic.php?p=278745#p278745 UPDATE 2. А инсталлятор FreeBSD уже сразу создает в EFI-разделе startup.nsh c нужным загрузчиком. Молодцы!
Оригинал сообщения находится по адресу
https://victor-sudakov.dreamwidth.org/468856.html. Пожалуйста оставляйте комментарии там. Всего сейчас
комментариев.