我正在运行 Mac OSX 的虚拟机,它总是启动到 EFI shell,我只想简单解释一下这是什么以及如何(如果可能)退出它。
答案1
EFI shell 是一个命令行工具,其概念类似于 Linux/Unix/OS X 中的 bash 或 Windows 中的命令提示符窗口。它允许您查看、删除、编辑和重命名文件,更新 EFI 启动管理器条目等。您可以通过键入 退出 shell exit
;但是,对于 VirtualBox,这可能会将您带到同样令人困惑的 EFI 菜单。
如果你在 VirtualBox 会话中安装了操作系统,那么它很可能在EFI 系统分区 (ESP)。大多数操作系统都会向固件注册这些引导加载程序,固件会记住它们并自动引导它们。VirtualBox 的一个怪癖是它通常会忘记这些引导管理器条目。结果是虚拟机默认启动到 EFI shell。有几种方法可以解决这个问题,包括:
- 您可以使用 EFI shell 手动启动引导加载程序:
- 键入
fs0:
以访问第一个文件系统,通常是 ESP。 - 键入
cd EFI\{osname}
,其中{osname}
是您的操作系统安装其引导加载程序的目录的名称。(您没有说您安装了什么操作系统,所以我不确定那是什么。键入ls EFI
将显示那里的内容。) - 通过输入其名称来启动引导加载程序。同样,我不知道它是什么。对于 Linux,它通常是
grubx64.efi
。对于 Windows,它是bootmgfw.efi
。
- 键入
startup.nsh
使用 EFI shell 启动脚本(在 ESP 的根目录中)自动执行上述过程。- 将引导加载程序重命名为
EFI\BOOT\bootx64.efi
,这是后备文件名:- 键入
fs0:
以访问第一个文件系统,通常是 ESP。 - 键入
mv EFI\{osname} EFI\BOOT
以重命名引导加载程序所在的目录。如上所述,您必须{osname}
自己确定是什么。 - 键入
mv EFI\BOOT\{loadername.efi} EFI\BOOT\bootx64.efi
,其中{loadername.efi}
是引导加载程序的名称,例如grubx64.efi
对于大多数 Linux 安装而言。
- 键入
- 使用 shell 的工具将引导加载程序注册到 VirtualBox 固件中。我不知道网上有没有关于如何执行此操作的简明描述,而且我也没有时间在这里写下来。如果没有精确的说明,这可能会令人沮丧,因为您必须避免许多不明显的陷阱。
就我个人而言,我最常用的解决方案是将引导加载程序从操作系统的默认名称重命名为EFI\BOOT\bootx64.efi
。这是最容易实现的,而且效果也很好。这种方法的一个缺点是,如果您的操作系统更新了引导加载程序,更新可能会转到原始位置,因此如果您想使用更新后的引导加载程序,则必须重复该过程。