如何摆脱虚拟盒子中的EFI Shell


13

我正在运行用于Mac OSX的虚拟机,并且该虚拟机始终会引导到EFI shell中,我只想简单说明一下这是什么以及如何退出(如果可能)。

Answers:


15

EFI Shell是一种命令行工具,其概念与Linux / Unix / OS X中的bash或Windows中的命令提示符窗口类似。它使您可以查看,删除,编辑和重命名文件,以更新EFI引导管理器条目,等等。您可以通过键入从shell退出exit;但是,对于VirtualBox,这可能会带您进入一个EFI菜单,该菜单可能同样令人困惑。

如果您在VirtualBox会话中安装了操作系统,则很有可能在EFI系统分区(ESP)上安装了引导加载程序大多数操作系统都将这些引导加载程序注册到固件中,固件会记住它们并自动引导它们。VirtualBox的一个怪癖是它通常会忘记这些引导管理器条目。结果是,默认情况下,VM会启动到EFI Shell中。有几种方法可以解决此问题,包括:

  • 您可以使用EFI Shell手动启动引导加载程序:
    1. 键入fs0:访问第一个文件系统,通常是ESP。
    2. 键入cd EFI\{osname},其中{osname}OS是其引导加载程序安装目录的名称。(您尚未说出已安装的操作系统,所以我不确定那是什么。键入ls EFI将向您显示其中的内容。)
    3. 通过键入其名称来启动引导加载程序。再次,我不知道那是什么。对于Linux,通常是grubx64.efi。对于Windows,它是bootmgfw.efi
  • 使用EFI Shell启动脚本(startup.nsh在ESP的根目录中)使上述过程自动化。
  • 将引导加载程序重命名为EFI\BOOT\bootx64.efi,即后备文件名:
    1. 键入fs0:访问第一个文件系统,通常是ESP。
    2. 键入mv EFI\{osname} EFI\BOOT以重命名引导加载程序所在的目录。如上所述,您必须确定自己{osname}是什么。
    3. 键入mv EFI\BOOT\{loadername.efi} EFI\BOOT\bootx64.efi,其中{loadername.efi}是引导加载程序的名称,例如grubx64.efi大多数Linux安装。
  • 使用外壳程序的工具向VirtualBox固件注册引导加载程序。我不知道如何在网络上进行简明的描述,而且我没有时间在这里编写它。如果没有精确的说明,这可能会令人沮丧,因为您必须避免很多非显而易见的陷阱。

就个人而言,我最常使用的解决方案是将引导加载程序从操作系统的默认名称重命名为EFI\BOOT\bootx64.efi。这是最容易实现的方法,并且效果很好。这种方法的一个缺点是,如果您的操作系统曾经更新过引导加载程序,则更新可能会转到原始位置,因此,如果要使用更新后的引导加载程序,则必须重复该过程。


Mac呢?您的指令不工作
Pacerier
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.