我有两个 SSD 磁盘,上面都装有 Ubuntu 14.04.02。它们不共享 UUID 或任何东西,并且它们从不同时插入。这是我上个月买的新磁盘,并进行了全新安装。
事情是这样的:
只插入磁盘 1,一切正常。我可以启动,并且没有出现任何错误
拔下磁盘 1,插入磁盘 2,我也可以启动这个系统
拔下磁盘 2,插入磁盘 1,现在磁盘 1 无法再启动。根据我选择的启动项(从主板),我收到“找不到此类设备”、“grub 救援”或“插入媒体”错误。我尝试使用 (U?)EFI 选项启动,但它也不起作用。这不是启动优先级问题,它只是停止工作了。
在磁盘 1 上运行启动修复后,它又开始工作了。
我的主板是http://www.asus.com/Motherboards/P8P67_LE/并且 BIOS 上也没有“快速启动”选项。
就像是使用 UUID 或其他东西缓存条目一样。我的 BIOS 菜单上还有两个选项。它们来自以前的安装,如“Ubuntu”和“Windows Bootloader”。即使没有插入磁盘,它们也会显示出来。
答案1
EFI 启动项存储在计算机的 NVRAM 中。这些项指的是引导加载程序,它们是存储在硬盘的EFI 系统分区 (ESP)。为了唯一地标识这些文件,NVRAM 条目通过文件所在的分区的 GUID 值来引用这些文件,这些 GUID 值是唯一的。因此,两个安装的引导加载程序条目是不同的,并且不可互换。
问题在于,某些 EFI 会“主动”删除它们认为无效的条目。当计算机启动时找不到条目,则该条目被视为无效,固件会将其删除。因此,在拔下第一个磁盘启动时,您就丢失了该条目。
如果你知道如何修复,这种损坏很容易解决,但修复起来很麻烦,特别是如果你经常更换磁盘。最好的解决方案是不是定期更换磁盘。如果必须更换,请准备一张 CD-R 或 USB 闪存盘,里面放着我的rEFInd 启动管理器。当您需要从丢失了引导加载程序条目的磁盘启动时,请使用 rEFInd 磁盘来启动 Linux。然后,您可以使用 重新创建丢失的引导加载程序条目efibootmgr
,如下所示:
sudo efibootmgr -c -l \\EFI\\ubuntu\\grubx64.efi -L "ubuntu"
您可能需要更多或不同的选项,具体取决于您如何对磁盘进行分区、是否在安全启动处于活动状态的情况下进行启动以及其他因素。
另一个解决方案(可能有效也可能无效,具体取决于您的配置细节)是将您的/boot/efi/EFI/ubuntu
目录复制到/boot/efi/EFI/BOOT
并将grubx64.efi
或shimx64.efi
文件重命名为bootx64.efi
。ESPEFI/BOOT/bootx64.efi
上的文件是后备引导加载程序——如果没有其他文件可以引导,它将引导。因此,将 GRUB(或 Shim,如果您使用安全引导)复制到该名称可能会使其在其正常引导项丢失时自动运行。不过,这种解决方法并不适用于所有系统。