UEFI Boot损坏,如何安全地进行?

我有一台双启动Windows 10(从Windows 8.1升级)和我的主操作系统Ubuntu 14.04的笔记本电脑。 我把系统配置为UEFI启动,直到今天早上,它运行良好。

昨晚我用Windows做了一些东西,这在这台机器上很少见。 今天早上,计算机直接启动进入Windows。 我怀疑Windows搞乱了启动设置,所以我在启动时使用’escape’来手动选择有grub安装的驱动器。

计算机首先在启动时检查的默认grub / boot分区现在直接启动Windows – 没有grub菜单。 幸运的是,我在初始安装期间使用了引导修复,并选择了让第一扇区的其他分区指向grub / boot分区的选项。 当我选择根分区时,我收到BIOS通知它不安全。

在我考虑之前,我进入BIOS并禁用安全启动并尝试从根分区启动。 GRUB很好,所以我选择了Ubuntu并进入我的LUKS密码屏幕。

此时,我认为禁用安全启动并尝试加载Ubuntu可能是一个错误。 毕竟,UEFI的意义是什么,如果它被禁用了第二个东西,一个非常精细和function正常的签名启动加载器混乱?

对于安全进行的正确方法,我有点不知所措。 有没有办法在不安全启动的情况下恢复Ubuntu? 建议?

-谢谢

我想在你的主要观点更直接的答案之前解决你的问题中的一些误解。 请多多包涵….

计算机首先在启动时检查的默认grub / boot分区现在直接启动Windows

在基于EFI的计算机上,引导加载程序作为普通文件存储在EFI系统分区(ESP)上。 由于存储在NVRAM中的条目,计算机知道在启动时要启动哪个文件,这些条目标识要运行的分区和文件。 在EFI下没有“默认…启动分区”这样的东西; 这是BIOS启动的方式,而不是EFI。

我在初始安装期间使用了引导修复,并选择了让第一扇区的其他分区指向grub / boot分区的选项。

在EFI下,“引导扇区”不存在 – 或者更准确地说,引导代码不存储在磁盘或分区的第一扇区中。 它全部通过文件处理,并由NVRAM中的条目引用。

当我选择根分区时,我收到BIOS通知它不安全。

你没有选择分区; 您选择了引导加载程序文件。 根据您的描述,我的猜测是您在ESP上选择了EFI/ubuntu/grubx64.efi 。 这开始解决问题,但我会回到那一点……

我进入了BIOS

你没有BIOS; 你有一个EFI。 我知道许多人,甚至制造商都将EFI称为BIOS,但这只会导致混乱,因为它鼓励人们拖拽BIOS关于启动过程的假设,就像你所做的那样。

我认为禁用安全启动并尝试加载Ubuntu可能是一个错误。 毕竟,UEFI的意义是什么,如果它被禁用了第二个东西,一个非常精细和function正常的签名启动加载器混乱?

不要混淆EFI(或UEFI,只是EFI 2.x)和安全启动。 安全启动只是UEFI的一个可选function。 反过来,EFI是BIOS的替代品 。 许多EFI(甚至UEFI)缺乏安全启动支持 – 但安全启动需要UEFI。

对于安全进行的正确方法,我有点不知所措。 有没有办法在不安全启动的情况下恢复Ubuntu? 建议?

为了支持安全启动,Ubuntu使用一个名为Shim的程序。 在Ubuntu中,它的文件shimx64.efi 。 Shim是硬编码的,可以启动GRUB( grubx64.efi ),然后可以调用Shim来validationLinux内核。

请注意,我之前写过您可能已经启动了grubx64.efi 。 这将在禁用安全启动时正常工作; 但是如果启用安全启动, grubx64.efi可能无法满足默认的安全启动要求,因此它将失败。 shimx64.efi ,OTOH,由Microsoft签署(其密钥几乎存在于所有计算机中),因此可以使用。 这是解决方案的关键(不希望,但这是最好的话):重新配置系统以通过Shim启动。 您可以使用efibootmgr实用程序在Ubuntu中执行此efibootmgr 。 首先,使用sudo efibootmgr -v查看可用选项:

 $ sudo efibootmgr -v BootCurrent: 0000 Timeout: 0 seconds BootOrder: 0000,0007,0003,2003,0001,2001,2002 Boot0000* ubuntu HD(2,1f4800,82000,5f6b4992-fcfe-4a2c-9e67-98b0a30dfe7d)File(\EFI\ubuntu\shimx64.efi) Boot0001* Lenovo Recovery System HD(3,276800,1f4000,de3b7563-97f5-48c6-ab7f-2f5d6d57c644)File(\EFI\Microsoft\Boot\LrsBootMgr.efi)RC Boot0002* EFI Network 0 for IPv4 (08-9E-01-FF-CA-4D) ACPI(a0341d0,0)PCI(1c,0)PCI(0,0)MAC(089e01ffca4d,0)IPv4(0.0.0.0:0<->0.0.0.0:0,0, 0RC Boot0003* ubuntu HD(2,1f4800,82000,5f6b4992-fcfe-4a2c-9e67-98b0a30dfe7d)File(\EFI\ubuntu\grubx64.efi)RC Boot0004* EFI Network 0 for IPv6 (08-9E-01-FF-CA-4D) ACPI(a0341d0,0)PCI(1c,0)PCI(0,0)MAC(089e01ffca4d,0)030d3c000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000RC Boot0007* Windows Boot Manager HD(2,1f4800,82000,5f6b4992-fcfe-4a2c-9e67-98b0a30dfe7d)File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...BCDOBJECT=.{.9.dea8.6.2.c.-.5.cdd-.4.e.7.0.-.acc1.-.f.3.2.b.3.4.4.d.4.7.9.5.}.................... 

这只是一个例子,你的很可能在很大程度上有所不同。 但请注意,有两个ubuntu条目,其中一个引用shimx64.efi ,另一个引用grubx64.efi 。 您可能正在通过grubx64.efi条目启动,如BootCurrent线所示。 grubx64.efi条目可能也是grubx64.efi第一个。 要更改此设置,必须使用efibootmgr-o选项创建新的efibootmgr ,如下所示:

 sudo efibootmgr -o 0000,0007 

您也可以添加其他选项,如果前两个选项失败,计算机将使用这些选项。 当然,您应该指定与您的Shim和GRUB条目相关联的数字,而不是0000,0007 (除非这些数字恰好是数字)。 另请注意,我首先使用GRUB条目指定Shim条目作为后备,以防一个失败; 理论上, 指定Shim条目应该可以正常工作。 最好将当前的BootCurrent值包含为第二个(或更晚的)选项,因为您知道它可以在禁用安全启动的情况下使用。 这样,如果您犯了错误或者您的Shim二进制文件被破坏了,您仍然可以通过使用计算机的内置启动管理器或通过调整其他一些启动命令来禁用安全启动并返回到您的工作系统办法。

完成此操作后,重新启动固件并重新启用安全启动。 从那时起它应该可以正常工作。