更新后,Ubuntu 12.04 无法在 UEFI 机器上启动

更新后,Ubuntu 12.04 无法在 UEFI 机器上启动

我有一台运行 Ubuntu 12.04 64 位和 UEFI 的计算机。今天 (2013-09-21),我安装了所有可用的更新,却没有仔细阅读列表(真丢脸),因为几周来没人碰过这台计算机,而列表却长达 100 多项……

我记得另一台机器上有一个更新改变了 UEFI 机器上的启动系统,以便始终使用 shim,即使禁用了限制启动。

好吧,问题诊断相当简单:引导加载程序更新出了点问题,尽管没有给出错误,并且 UEFI 启动菜单中缺少 Ubuntu 条目,导致计算机尝试以 BIOS 模式启动,当然失败了。如果我efibootmgr从可启动 USB 运行,它只会显示 HDD 的 BIOS 启动模式...

如何恢复 UEFI 菜单中的 Ubuntu 条目以使机器再次可启动?

答案1

比 soulsource 提供的解决方案更简单的解决方案是:

  1. 使用紧急光盘启动在 EFI 模式下. Ubuntu 安装光盘应该可以解决这个问题。
  2. 如果需要,请安装efibootmgr
  3. 输入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 或与启动有关的任何其他程序可能会再次破坏系统……

相关内容