VirtualBox загружается только в интерактивной оболочке UEFI


49

Я установил Ubuntu 14.10 в VirtualBox с UEFI. Но теперь я перезагрузил эту ОС и теперь она загружается в UEFI Interactive Shell v2.0. Как я могу нормально загрузиться в Grub снова?


Хорошие новости всем, с VirtualBox 5.1 обходные пути больше не нужны. Возможно, вам просто нужно добавить новую запись EFI (вручную efibootmgrили автоматически путем переустановки grub), чтобы он сразу же снова загрузил Ubuntu.
phk

2
Даже в версии 5.1 изменения переменных efi, такие как требуемая настройка загрузки с efibootmgr, теряются после завершения работы (хотя они остаются при перезагрузке).
chappjc

1
5.1.30 все еще существует. Хотя это легко исправить, но я должен исправлять каждый раз после установки Debian & Ubuntu.
CallMeLaNN

Ответы:


52

Я столкнулся с той же проблемой и обнаружил, что если я выполню следующую команду в интерактивной оболочке, виртуальная машина загрузится в Ubuntu:

fs0:\efi\ubuntu\grubx64.efi

(Используйте обратную косую черту, прямая косая черта не работает. Команды в интерактивной оболочке UEFI не чувствительны к регистру.)

Моя версия VirtualBox - 4.3.20 r96997, версия Ubuntu - 14.10 AMD64. Я не знаю, почему это происходит и как это решить. Просто нашел это не элегантно и все еще немного хлопотно.

Обновление 1:

Я прочитал это , отследил до сообщения об ошибке и нашел лучший обходной путь .

Обновление 2:

Обходной путь в обновлении 1 не удалось. Я выключил виртуальную машину, запустил ее. И он снова загрузился в интерактивную оболочку UEFI. Согласно этому , проблема, вероятно, была вызвана ошибкой VirtualBox. Я все еще ищу дальнейшее решение этого.

Обновление 3:

Наконец-то нашел решение. В соответствии с этим вам необходимо вручную создать скрипт startup.nsh. Кроме метода в упомянутом посте, вы также можете сделать это:

$ sudo mount /dev/sda1 /mnt
$ cd /mnt
$ sudo sh -c "echo '\EFI\ubuntu\grubx64.efi' > startup.nsh"

3
«В настоящее время невозможно манипулировать переменными EFI из запущенного гостя» . Решение во втором обновлении, позволяющее переместить любой загрузчик, который вы хотите использовать в ESP,\EFI\boot\bootx64.efiзвучит для меня как лучшее решение, чем тратит 5 soconds на запуск startup.nsh. , Примечание: Вы можете нажать F12 во время загрузки или войтиexitв оболочку EFI, чтобы получить доступ к настройкам прошивки и изменить все виды вещей, включая разрешение терминала, но эти изменения не сохраняются постоянно.
LiveWireBT

После выдачи команды в интерактивной оболочке вы можете установить refindисправление EFI
Eduardo

1
Приятно знать, что это ошибка. Просто edit startup.nsh. +1 Он ищет \EFI\boot\bootx64.efiпропустить 5сек.
CallMeLaNN

1
Копирование и переименование \EFI\ubuntu\shimx64.efiв \EFI\boot\bootx64.efiлучшее. кредит
CallMeLaNN

Обновление 3 сделало это для меня ....
cljk

32

У меня была та же самая проблема (с включенным EFI, потому что я не мог заставить его работать иначе). Странный; хотя установка Ubuntu 14.04.2 не вызвала ошибок, установка Kubuntu 15.04 не была завершена. Он застыл в самом конце, когда его попросили снять DVD. После сброса загрузился нормально, но после выключения поднял оболочку.

Итак, чтобы избежать типа оболочки:

fs0:
редактировать startup.nsh

и в открывшемся окне добавьте эти 2 строки:

FS0:
\ EFI \ ubuntu \ grubx64.efi

нажмите Ctrl+ sи, Enterчтобы сохранить и Ctrl+, qчтобы выйти. Затем перезапустите ВМ.

Кроме того, вы всегда можете использовать эти 2 строки для выхода из оболочки и загрузки ОС. Но при втором перезапуске вы снова попадете в оболочку и не сможете ее редактировать startup.nsh.


Ввод команды работает, но проблема в том, что при следующем перезапуске она снова переходит в эту оболочку, и файл startup.nsh, похоже, не сохраняется.
Игорь Чордаш

Чтобы сохранить файл startup.nsh, вам нужно использовать Ctrl + S для сохранения и нажать Enter, чтобы записать в файл.
Willoczy

2
Если вы не используете Ubuntu, вы можете определить правильный путь для вашей машины, используя lsоболочку UEFI. Например ls FS0:\EFI, ls FS0:\EFI\redhatчтобы узнать путь FS0:\EFI\redhat\grub.efiк CentOS.
ntc2

1
@ ntc2 Спасибо, это именно то, что я искал! Для моей установки Slackware это было FS0:\EFI\Slackware\elilo.efi.
Фабиомая

11

Другой вариант - снять флажок «Расширенные функции» под названием «Включить EFI» в разделе «Материнская плата» для вашей виртуальной машины.

Если бы эта проблема возникла для установки Gnome Ubuntu 12.04.2 amd64bit.

Обнаружил это после того, как пришлось изменить настройки аппаратного ускорения. У меня остался VT-x / AMD-V с включенным Nested Paging. Моя виртуальная машина имеет 2 процессора, 8 ГБ ОЗУ для справки.

После отмены проверки проблема полностью обходит Gnome Ubuntu не загружается. Запуск Virtual Box 4.3.18 r96516 на 64-битном хосте Windows 7.


1
Это работает только потому, что Grub также имел устаревшую поддержку (MBR).
Пол Стелиан

4

Скопируйте grubx64.efiв /EFI/boot/bootx64.EFI
VirtualBox и используйте его bootx64.efiдля загрузки.
Ссылка: Archlinux Virtualbox вики


та. Это работает, но если grubx64.efi обновлен, то bootx64.efi будет датирован. ссылка на версию исходного кода: github.com/mdaniel/virtualbox-org-svn-vbox-trunk/blob/…
philcolbourn

Этот метод более прост, чем редактирование метода startup.nsh , но он не будет автоматически обновляться, и вы не сможете использовать символическую ссылку, потому что это раздел FAT32.
Георгий Гзиришвили

1

Я мог бы решить эту проблему, изменив устройство cdrom в virtualbox с IDE на SATA. Я удалил стандартное сопоставление виртуального диска CDROM в конфигурации устройства.

Просто добавьте устройство cdrom в существующий контроллер SATA, который будет использоваться для вашего установочного носителя.

Et вуаля, больше никаких проблем с EFI.


1

Я недавно столкнулся с этой проблемой. Пожалуйста, проверьте настройки вашей виртуальной ОС. Щелкните правой кнопкой мыши на виртуальной ОС-> Система-> Расширенные функции-> Включить EFI (снимите этот флажок).введите описание изображения здесь


8
Как это решение, если кто-то хочет использовать UEFI?
Зигимантус

+1: это решило мою проблему. Я экспериментально проверил Enable EFI и забыл об этом.
Wallyk

1

для этого вам нужно написать это следующим образом:

fs0:
cd EFI
cd ubuntu
grubx64

это то, как я заставил это работать, если ты пишешь это любым другим способом, это не будет работать.


1

Еще одна работа вокруг:

В оболочке uefi временно загрузитесь в Ubuntu, используя:

fs0:
cd EFI
cd ubuntu
grubx64

Затем внутри ubuntu отредактируйте файл startup.nsh, как показано ниже:

Откройте терминал Ctrl+ Alt+ T.

Тип:

sudo nano /boot/efi/startup.nsh

Введите свой пароль.

Теперь удалите все, что есть, с помощью клавиши Del или Backspace.

Затем введите это точно: ( FS0- это цифра 0, а не алфавит O)

FS0:
\EFI\ubuntu\grubx64.efi

Теперь нажмите Ctrl+ O(это алфавит O).

Затем Alt+ D(чтобы изменить текст в формат msdos).

Затем нажмите Enter.

Тогда Ctrl+ X.

Теперь перезагрузите компьютер.

sudo reboot

Теперь все должно быть хорошо.


1

Используя Ubuntu 16.04.4 с включенной EFI и при запуске виртуальной машины я обнаружил, что она не загружается и просто остается в интерактивной оболочке EFI.

Вот как я исправил загрузку:

Во-первых, я обнаружил, что grubx64.efi находится в BLK2, поэтому для однократной загрузки я просто набрал в интерактивной оболочке следующее:

BLK2:/EFI/ubuntu/grubx64.efi

И альт, Ubuntu работает и работает.

Я приказываю навсегда решить эту проблему, и как только система заработает, я отобразил следующую строку в /boot/efi/startup.nsh.

sudo echo 'BLK2:/EFI/ubuntu/grubx64.efi' > /boot/efi/startup.nsh

Вот и все, система загрузится правильно.


0

После установки Kubuntu15.10 в VirtualBox5 с UEFI перезагрузка виртуальной машины завершается неудачно.

Добавление строки

FS0: \ EFI \ убунту \ grubx64.efi
в UEFI-Shell не помогает.

И решение с созданием нового файла startup.nsh в Kubuntu15.10 в среде chroot с

sudo echo '\ EFI \ ubuntu \ grubx64.efi'> startup.nsh 
не дает также никаких улучшений.

Я нашел решение:

Проблема заключалась в том, что каталог / boot / efi / EFI / ubuntu с файлом grubx64.efi не существует.

После загрузки Live-CD и перехода в среду chroot я установил отсутствующие пакеты и создал необходимую запись NVRAM с помощью:

sudo apt-get установить grub-efi-amd64-подписанный shim-подписанный
sudo update-grub

0

Для определения или изменения загрузочного каталога EFI необходимо сначала запустить эту команду. Это решило мою проблему.

sudo grub-install /dev/sda --target=x86_64-efi --efi-directory=/boot/efi/

ПРИМЕЧАНИЕ: /dev/sdaэто системный жесткий диск.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.