В обычной конфигурации прошивка EFI отслеживает загрузчики EFI в NVRAM. Когда вы устанавливаете ОС, она должна зарегистрировать свой загрузчик в прошивке, и в результате получается запись NVRAM, которая указывает на загрузчик, и прошивка может запустить загрузчик. Обычно это работает нормально, хотя есть проблемы с удалением или повреждением записей NVRAM даже на "реальном" оборудовании. VirtualBox, к сожалению, плохо справляется с хранением своих данных "NVRAM" между использованиями; он имеет тенденцию начинаться со свежего набора данных по умолчанию при каждом его запуске. Это приводит к хаосу с возможностью запуска практически всего.
ИМХО, самый простой обходной путь - сохранить загрузчик с использованием резервного имени файла EFI/BOOT/bootx64.efi
(без учета регистра) на системном разделе EFI (ESP) виртуализированного диска. Если EFI не может загрузить что-либо еще, он попытается загрузить этот загрузчик. Вообще говоря, если вы устанавливаете дистрибутив Linux, есть два способа сделать это:
- Там вы можете хранить копию вашего обычного загрузчика. Я не знаю, что использует Manjaro по умолчанию или где он хранит его, но предположим, что он использует
EFI/manjaro/grubx64.efi
, вы скопируете или переименуете EFI/manjaro
в EFI/BOOT
а затем переименуете grubx64.efi
в этом каталоге в bootx64.efi
. Вы могли бы использовать что-то кроме загрузчика по умолчанию Manjaro, если вы предпочитаете. Смотрите мою страницу по теме для получения информации о том, что доступно.
- Вы можете использовать
fallback.efi
или fbx64.efi
( одна и та же программа, разные имена). Эта программа EFI, скорее всего, уже установлена где-то на вашем ESP или, по крайней мере, доступна в каком-то пакете в вашем дистрибутиве (возможно, GRUB или Shim). Вы скопируете этот файл в EFI/BOOT/bootx64.efi
а затем создадите файл BOOT.CSV
в каталоге, где существует настоящий загрузчик. Этот файл содержит данные об имени реального загрузчика и связанные с ним данные, такие как grubx64.efi,Manjaro,,This is the boot entry for Manjaro
. Важно отметить, что этот файл должен быть UCS-2 или UTF-16 , а не простой ASCII. Когда запускается fallback.efi
/fbx64.efi
(как bootx64.efi
), он ищет .CSV
в подкаталогах EFI
на ESP. Если он найдет их, он использует их для создания новых записей NVRAM. Это предназначено, чтобы помочь с восстановлением потерянных записей NVRAM, так что это один из способов обойти проблему VirtualBox "NVRAM amnesia".
Первый подход, вероятно, будет проще в настройке, так как предостережение в том, что конфигурации GRUB могут быть хитрыми. Если вы grub.cfg
в ESP, вы должны быть уверены, что он останется там, где GRUB ожидает этого, поэтому вам может понадобиться или не нужно его перемещать. Кроме того, если ваша система пакетов предоставляет обновленный GRUB, вам нужно будет скопировать его еще раз, чтобы воспользоваться преимуществами нового пакета. Второй подход сложнее объяснить и немного сложнее в настройке, но я начинаю предпочитать его, потому что он упрощает установку обновлений для загрузчика.
Существуют и другие подходы к решению проблемы, такие как использование сценария запуска оболочки EFI, как предлагает kyb (но это приведет к более длительному времени запуска, чем мое решение выше). Кроме того, в прошлом было возможно создать новую запись NVRAM, используя сам интерфейс прошивки VirtualBox, и это было бы постоянным; но это, кажется, перестало работать в какой-то момент - или, по крайней мере, в последний раз, когда я попробовал это, это не сработало.