我有一台运行 Ubuntu 12.04 64 位和 UEFI 的计算机。今天 (2013-09-21),我安装了所有可用的更新,却没有仔细阅读列表(真丢脸),因为几周来没人碰过这台计算机,而列表却长达 100 多项……
我记得另一台机器上有一个更新改变了 UEFI 机器上的启动系统,以便始终使用 shim,即使禁用了限制启动。
好吧,问题诊断相当简单:引导加载程序更新出了点问题,尽管没有给出错误,并且 UEFI 启动菜单中缺少 Ubuntu 条目,导致计算机尝试以 BIOS 模式启动,当然失败了。如果我efibootmgr
从可启动 USB 运行,它只会显示 HDD 的 BIOS 启动模式...
如何恢复 UEFI 菜单中的 Ubuntu 条目以使机器再次可启动?
答案1
比 soulsource 提供的解决方案更简单的解决方案是:
- 使用紧急光盘启动在 EFI 模式下. Ubuntu 安装光盘应该可以解决这个问题。
- 如果需要,请安装
efibootmgr
。 - 输入
sudo efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\ubuntu\\grubx64.efi -L Ubuntu
。如果您在启用安全启动的情况下启动,请更改grubx64.efi
为。如果不是,请更改为您的启动磁盘,然后更改为您的 EFI 系统分区 (ESP) 的编号。(我提供的命令假设 ESP 处于开启状态,根据您提供的信息,情况似乎确实如此。)shimx64.efi
-d /dev/sda
/dev/sda
-p 1
/dev/sda1
这引导修复工具也可以修复问题,但它会尝试做更多的事情,而不仅仅是恢复原始的 GRUB 条目。这有可能造成意外损坏,因此如果您习惯于发出 shell 命令,我建议您手动运行efibootmgr
此任务。
也可以使用 Windowsbcdedit
命令或 EFI shell 的bcfg
命令执行相同的操作。手动安装 rEFInd我的 rEFInd 文档的 部分描述了如何使用这些命令将 rEFInd 注册到固件。您应该能够轻松地将这些命令调整为 GRUB。
答案2
在提出这个问题时,我自己找到了一个解决方案,尽管我不相信这是解决这个问题的建议方法。
首先,我在 UEFI 模式下启动了 Ubuntu 12.04 64 位 USB 闪存驱动器。然后,我以正确的顺序从 HDD 挂载文件系统(接下来,当然要将设备节点替换为适合您系统的正确节点):
sudo -i #to get a root shell
mount /dev/sda4 /mnt #Root partition
mount /dev/sda2 /mnt/boot #Boot partition
mount /dev/sda1 /mnt/boot/efi #efi partition
然后我 chroot 到现在安装的 HDD:
mount -o bind /dev /mnt/dev #make system folders available in chroot environment
mount -o bind /proc /mnt/proc
mount -o bind /sys /mnt/sys
chroot /mnt
现在,网上有很多指南告诉您如何运行 grub-install,其中包含许多花哨的参数。这些参数让我的电脑崩溃了……最后,它变得非常简单,只需运行
grub-install
无需任何参数。现在,如果我运行,efibootmgr
我会得到一个名为 Ubuntu 的新条目,并将其放在启动选项列表的顶部(编号为 0000)。
重启后,系统又能正常工作了。我只是担心下次更新内核、grub 或与启动有关的任何其他程序可能会再次破坏系统……