我最近在 VirtualBox 中创建了一个 Ubuntu 14.04 服务器 64 位虚拟机,使用 EFI 启动。启动虚拟机时,我被转到 EFI shell,可能是因为它找不到正确的 .efi 文件来启动。
Ubuntu 在 处创建该文件/boot/efi/EFI/grubx64.efi
。我可以使用以下命令告诉 EFI shell 从该文件启动:
fd0:\efi\ubuntu\grubx64.efi
但是,我不想每次启动虚拟机时都这样做。所以我将该文件复制到默认位置/boot/efi/EFI/boot/bootx64.efi
。现在它无需进一步输入即可成功启动。
我担心该/boot/efi/EFI/grubx64.efi
文件会在正常的 Ubuntu 更新过程中更新,这意味着新/boot/efi/EFI/boot/bootx64.efi
文件将与它不同步,除非我记得将其复制过来。
是否可以使用符号链接或其他方法来确保在原始文件更新时,我的副本能够/boot/efi/EFI/grubx64.efi
反映任何更改?
答案1
您可以使用 VirtualBox EFI 的用户界面来操作变量,让 VirtualBox 的“NVRAM”变量“保留”。简而言之:
- “启动”虚拟机。
- 在 GRUB 出现之前,几乎立即按下空格键。您应该会看到 VirtualBox EFI 文本模式菜单出现,其中的菜单项包括继续、选择语言、启动管理器、设备管理器和启动维护管理器。
- 选择“启动维护管理器”。将会出现一个新菜单。
- 选择“启动选项”。
- 选择“添加启动选项”。出现“文件资源管理器”菜单,其中显示您的虚拟磁盘,由长串十六进制数字和对大多数人来说看起来像胡言乱语的其他内容标识。
- 使用文件资源管理器,您应该能够深入查找
EFI/ubuntu/grubx64.efi
虚拟磁盘上的文件。选择它。现在您将看到一个名为“修改启动选项描述”的菜单。 - 突出显示“输入描述”行并按 Enter 键。
- 现在您必须输入启动项的描述。Ubuntu
ubuntu
默认会这样称呼,但如果您愿意,也可以用其他名字称呼它。 - 返回“修改启动选项描述”屏幕,选择“提交更改并退出”。这将带您返回“启动维护管理器”屏幕。
- 再次选择“启动选项”。
- 选择“更改启动顺序”。你应该看到启动顺序,新的条目位于底部。
- 按 Enter 键编辑启动顺序。
- 突出显示您的新条目,然后根据需要多次按“+”键以将其置于列表顶部。
- 按 Enter 键。编辑对话框应该会消失,并且您应该会在“更改启动顺序”屏幕上看到新的顺序。
- 选择“提交更改并退出”。这将带你回到“启动选项”屏幕。
- 按 Esc 键返回主“启动维护管理器”页面。
- 选择“重置系统”。虚拟机将重新启动进入 GRUB。
现在,该ubuntu
条目(或无论您如何称呼它)应该在重新启动甚至“关机/开机”序列之间持续存在。就我个人而言,我发现此过程太笨拙和烦人,不适合定期使用;我只是重命名引导加载程序文件,正如您所说的那样您已经做过了。(有一种变体:我几乎总是使用自己的 rEFInd,而不是 GRUB;但无论哪种方式,原理都是一样的。)
答案2
如果我理解正确的话,EFI 分区具有 FAT32 文件系统(并且必须具有 FAT32 或 ISO 9660)。而且我认为 Linux 符号链接在 FAT32 中不起作用。
在您的情形下,我会创建一个检查和更新的脚本grubx64.efi
。该脚本可能使用rsync
并且可能通过调用crontab
@reboot
。是的,它会延迟复制“一次”重新启动,因此应该有更好的替代方案(触发复制脚本)。
如果您想做实验,您可以尝试 UDF,它可能适用于某些类型的链接,并且可能允许以 UEFI 模式启动。您甚至可以尝试使用 ext2(谁知道呢,也许计算机可以启动)。
另一种解决方法是通过在 BIOS 模式下启动虚拟机来解决该问题(即使主机系统在 UEFI 模式下运行也可以)。请参阅此链接:安装/UEFI-和-BIOS/稳定替代方案