VirtualBox仅在UEFI Interactive Shell中启动


49

我在带有UEFI的VirtualBox中安装了Ubuntu 14.10。但是现在我重新启动了该操作系统,现在可以启动到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

Answers:


52

我遇到了同样的问题,发现如果我在交互式外壳程序中发出以下命令,虚拟机将启动到Ubuntu中:

fs0:\efi\ubuntu\grubx64.efi

(使用反斜杠,正斜杠不起作用。UEFI交互式外壳程序中的命令不区分大小写。)

我的VirtualBox版本是4.3.20 r96997,Ubuntu版本是14.10 AMD64。我不知道为什么会这样以及如何解决。只是发现这并不优雅,但仍然有些麻烦的解决方法。

更新1:

我读了这篇文章,找到一个错误报告,发现了一个更好的解决方法

更新2:

更新1中的解决方法失败。我关闭了虚拟机,然后启动了它。然后它再次启动到UEFI Interactive Shell中。根据,该问题可能是一个错误的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 for startup.nsh更好的解决方案。 。注意:可以在引导过程中按F12或exit在EFI Shell上输入以访问固件设置并修改所有内容,包括终端分辨率,但这些修改不会永久存储。
LiveWireBT 2015年

在交互式外壳中发出命令后,您可以安装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时,它最终冻结了。重置后,它可以正常启动,但是在掉电后,它会启动外壳。

因此,避免使用shell类型:

fs0:
编辑startup.nsh

并在打开的窗口中添加以下两行:

FS0:
\ EFI \ ubuntu \ grubx64.efi

Ctrl+ sEnter保存并按Ctrl+ q退出。然后重启虚拟机。

另外,您始终可以使用这两行退出Shell并引导OS。但是第二次重新启动时,您将再次进入shell并避免对其进行编辑startup.nsh


键入命令确实可以,但是问题在于,在下次重新启动时,它将再次进入该外壳,并且似乎未保存文件startup.nsh。
IgorČordaš16年

要保存startup.nsh文件,您需要使用Ctrl + S保存并按Enter写入文件。
Willoczy

2
如果您不使用Ubuntu,则可以ls在UEFI Shell中使用,找出机器的正确路径。例如ls FS0:\EFI,然后在CentOS上ls FS0:\EFI\redhat了解路径FS0:\EFI\redhat\grub.efi
ntc2

1
@ ntc2谢谢,这正是我想要的!对于我的Slackware安装,它是FS0:\EFI\Slackware\elilo.efi
fabiomaia

11

另一个选项是为VM取消选中“主板”下名为“启用EFI”的扩展功能选项。

如果Gnome Ubuntu 12.04.2 amd64bit安装出现此问题。

在必须更改硬件加速设置后发现了这一点。我留下了启用VT-x / AMD-V,嵌套分页的功能。我的VM有2个CPU,8GB RAM供参考。

取消选中该问题后,Gnome Ubuntu完全跳过了问题。在Windows 7 64位主机上运行Virtual Box 4.3.18 r96516。


1
这仅适用,因为Grub还具有旧版支持(MBR)。
保罗·史蒂莲

4

复制grubx64.efi/EFI/boot/bootx64.EFI
VirtualBox可以使用它bootx64.efi来启动。
参考:Archlinux Virtualbox Wiki


ta。这可以工作,但是如果更新了grubx64.efi,则bootx64.efi会过时。链接到源代码版本:github.com/mdaniel/virtualbox-org-svn-vbox-trunk/blob/…–
philcolbourn

这比编辑startup.nsh方法更加无缝,但是实际上它不会自动更新,并且您不能使用symlink,因为它是FAT32分区。
Giorgi Gzirishvili

1

我可以通过将virtualbox中的cdrom设备从IDE更改为SATA来解决此问题。我删除了设备配置中虚拟cdrom驱动器的标准映射。

只需将cdrom设备添加到要用于安装介质的现有SATA控制器中即可。

等等,EFI没有其他问题。


1

我最近遇到了这个问题。请检查您的虚拟操作系统设置。右键单击虚拟操作系统->系统->扩展功能->启用EFI(取消选中此选项)。在此处输入图片说明


8
如果要使用UEFI,这是一种解决方案?
zygimantus

+1:这解决了我的问题。我已经实验性地检查了启用EFI并忘记了它。
wallyk

1

为此,您需要像下面这样写:

fs0:
cd EFI
cd ubuntu
grubx64

如果您以其他任何方式编写它,这就是我如何使其工作的方式。


1

另一个解决方法:

在uefi shell中,使用以下命令临时引导至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

使用启用了EFI的Ubuntu 16.04.4,并在启动虚拟机时发现它不会启动,而是停留在EFI交互式外壳中。

这是我固定启动的方式:

首先,我发现grubx64.efi位于BLK2中,因此一次启动时,我只在交互式shell中键入了以下内容:

BLK2:/EFI/ubuntu/grubx64.efi

中提琴,Ubuntu已启动并正在运行。

我打算永久解决此问题,一旦系统启动,我在/boot/efi/startup.nsh中回显以下行。

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

就是这样,系统将正确启动。


0

在使用UEFI在VirtualBox5中安装Kubuntu15.10之后,VM重启失败。

添加线

FS0:\ EFI \ ubuntu \ grubx64.efi
在UEFI-Shell中没有帮助。

以及在chroot环境中在Kubuntu15.10中创建新的startup.nsh文件的解决方案,

sudo echo'\ EFI \ ubuntu \ grubx64.efi'> startup.nsh 
也没有任何改善。

我找到了解决方案:

问题是,目录/ boot / efi / EFI / ubuntu和文件grubx64.efi不存在。

引导Live CD并更改为chroot环境后,我安装了丢失的数据包并使用以下命令创建所需的NVRAM条目:

须藤apt-get install grub-efi-amd64-signed shim-signed
须藤更新

0

要定义或更改efi引导目录,首先需要运行此命令。这解决了我的问题。

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

注意:/dev/sda是系统硬盘。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.