我最近使用 EFI 引导在 VirtualBox 中创建了一个 Ubuntu 14.04 服务器 64 位 VM。启动虚拟机时,我被放到 EFI shell 中,因为它可能找不到正确的 .efi 文件来启动。
Ubuntu 在/boot/efi/EFI/grubx64.efi
. 我可以使用以下命令告诉 EFI shell 从该文件启动:
fd0:\efi\ubuntu\grubx64.efi
但是,我不想每次启动 VM 时都这样做。所以我将 tha 文件复制到/boot/efi/EFI/boot/bootx64.efi
. 现在无需任何进一步输入即可成功启动。
我担心该/boot/efi/EFI/grubx64.efi
文件将在正常的 Ubuntu 更新过程中更新,这意味着新/boot/efi/EFI/boot/bootx64.efi
文件将与它不同步,除非我记得复制它。
是否可以使用符号链接或其他方法来确保在更新原始文件时,我的副本/boot/efi/EFI/grubx64.efi
反映了任何更改?
通过使用 VirtualBox EFI 的用户界面来操作变量,您可以让 VirtualBox 的“NVRAM”变量“粘”起来。简单来说:
EFI/ubuntu/grubx64.efi
虚拟磁盘上的文件。选择它。您现在将看到一个名为“修改启动选项描述”的菜单。ubuntu
默认调用它,但如果你愿意,你也可以叫它别的名字。现在,该
ubuntu
条目(或您所称的任何名称)应该在重新启动甚至“关机/开机”序列之间持续存在。就个人而言,我觉得这个程序太尴尬和烦人,无法定期使用。我只是按照您所说的重命名引导加载程序文件。(有一个变体:我几乎总是使用自己的 rEFInd,而不是 GRUB;但原理都是一样的。)如果我理解正确,EFI 分区具有 FAT32 文件系统(并且必须具有 FAT32 或 ISO 9660)。而且我认为 linux 符号链接在 FAT32 中不起作用。
在您的情况下,我会创建一个检查和更新的脚本
grubx64.efi
。该脚本可能使用rsync
并且可能通过调用crontab
@reboot
。是的,它会延迟复制它'一次'重启,所以应该有更好的选择(触发复制脚本)。如果你想做一个实验,你可以试试 UDF,它可能与某种链接一起工作,并且可能允许在 UEFI 模式下启动。您甚至可以尝试使用 ext2(谁知道呢,也许计算机会启动)。
另一种方法是通过在 BIOS 模式下引导虚拟机来解决此问题(即使主机系统在 UEFI 模式下运行也可以)。请参阅此链接:安装/UEFI-and-BIOS/stable-alternative