我在设置启动顺序时遇到问题,因为我希望它位于包含 Windows 10 - Ubuntu 15.10 - Fedora 23 的多启动计算机上。
这是我所做的:我仅使用 Windows 10 和 Ubuntu 15.10 进行双启动,其运行符合预期:
- 我可以对其进行配置,例如设置一个主题。
- 我可以轻松地在 USBLive 上启动。
由于我想尝试其他 Linux 发行版,因此我安装了 Fedora 23。
启动时 Fedora 接管了电源。我首先需要更改 Fedora 启动配置,用 linuxefi 和 initrdefi 替换 linux 和 initrd,以便在 Ubuntu 上启动,如所述这里。
然后我就可以访问计算机上安装的所有操作系统。但我想将启动权交还给 Ubuntu。
因此我首先尝试从 Ubuntu 启动引导修复,但效率不高。
然后我尝试使用 efibootmgr:
$ sudo efibootmgr
Mot de passe [sudo] pour xavier :
BootCurrent: 0004
Timeout: 2 seconds
BootOrder: 0004,0006,0000,0007,0001,0002,0003
Boot0000* Windows Boot Manager
Boot0001* ubuntu
Boot0002 UEFI: IP4 Qualcomm Atheros PCIe Network Controller
Boot0003 UEFI: IP6 Qualcomm Atheros PCIe Network Controller
Boot0004* Fedora
Boot0006* grub
Boot0007* ubuntu
然后我尝试在 Ubuntu 和 Fedora 上更改顺序:
$ sudo efibootmgr --bootorder 0006,0004,0000,0001,0007,0002,0003
BootCurrent: 0004
Timeout: 2 seconds
BootOrder: 0006,0004,0000,0001,0007,0002,0003
Boot0000* Windows Boot Manager
Boot0001* ubuntu
Boot0002 UEFI: IP4 Qualcomm Atheros PCIe Network Controller
Boot0003 UEFI: IP6 Qualcomm Atheros PCIe Network Controller
Boot0004* Fedora
Boot0006* grub
Boot0007* ubuntu
但是在重新启动时,我使用 efibootmgr 所做的更改不适用,如果我再次向 efibootmgr 询问启动顺序,它会给我一个 Fedora 的启动顺序...
我认为问题可能来自我不太了解的不同参数,例如:
- efi boot、grub、grub2 有什么区别
- 安全启动有什么影响?
- 传统启动是什么?
感谢任何能帮助我获得干净设置的人。
编辑:Rod Smith 的回答让我意识到我可以使用 -v 参数获取更多信息:
$ sudo efibootmgr -v
BootCurrent: 0004
Timeout: 2 seconds
BootOrder: 0004,0006,0000,0007,0001,0002,0003
Boot0000* Windows Boot Manager HD(2,GPT,e0e2d47c-9086-47d6-b1e5-0ec248d9d6f0,0x12c800,0x96000)/File(\EFI\MICROSOFT\BOOT\BOOTMGFW.EFI)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...3................
Boot0001* ubuntu HD(2,GPT,e0e2d47c-9086-47d6-b1e5-0ec248d9d6f0,0x12c800,0x96000)/File(\EFI\UBUNTU\SHIMX64.EFI)
Boot0002 UEFI: IP4 Qualcomm Atheros PCIe Network Controller PciRoot(0x0)/Pci(0x1c,0x3)/Pci(0x0,0x0)/MAC(448a5b4783b6,0)/IPv4(0.0.0.0:0<->0.0.0.0:0,0,0)..BO
Boot0003 UEFI: IP6 Qualcomm Atheros PCIe Network Controller PciRoot(0x0)/Pci(0x1c,0x3)/Pci(0x0,0x0)/MAC(448a5b4783b6,0)/IPv6([::]:<->[::]:,0,0)..BO
Boot0004* Fedora HD(2,GPT,e0e2d47c-9086-47d6-b1e5-0ec248d9d6f0,0x12c800,0x96000)/File(\EFI\FEDORA\SHIM.EFI)
Boot0006* grub HD(2,GPT,e0e2d47c-9086-47d6-b1e5-0ec248d9d6f0,0x12c800,0x96000)/File(\EFI\GRUB\SHIMX64.EFI)
Boot0007* ubuntu HD(2,GPT,e0e2d47c-9086-47d6-b1e5-0ec248d9d6f0,0x12c800,0x96000)/File(\EFI\UBUNTU\GRUBX64.EFI)
得益于此邮政来自 Rod Smith,我了解了这两个 ubuntu 条目的作用。但是 grub 条目似乎是不需要的,因为该文件不存在:
$ ls -a
. .. Boot fedora Microsoft MSI ubuntu
或许我应该把它删掉?
然后我尝试了不同的顺序:
$ sudo efibootmgr --bootorder 0001,0004,0000,0006,0007,0002,0003
但令人悲伤的是,这些改变并没有起到作用。
那么,如果我理解 Rod Smith 的回答,唯一的解决方案就是清除 fedora 条目?如果有一天我只想保留 fedora,那可能会引起一些问题,但在此之前,它允许我在 USBLive 上启动?
再次感谢!
答案1
我将首先回答您文章末尾的问题:
- EFI 模式启动使用固件的原生启动模式,而 BIOS/CSM/传统模式启动使用兼容性支持模块,允许启动较旧的 BIOS 模式引导加载程序。请参阅这个问题以及我在 superuser.com 上的回答了解有关此主题的更多信息。
- GRUB 是几个用于 Linux 的 EFI 模式引导加载程序。(还有适用于 BIOS 和其他固件类型的 GRUB 版本。)GRUB Legacy(又名 GRUB 1)从未正式支持 EFI,尽管 Fedora 确实有一个经过大量修补的版本,但现在已不再使用。因此,在 EFI 上下文中,大多数对 GRUB 的引用都是指 GRUB 2。
- 安全启动是一项可选的 EFI 功能,旨在通过阻止 EFI 启动未经受信任机构加密签名的二进制文件来提高系统安全性。原则上,这个机构可能是你;也可能是其他人。实际上,微软拥有安全启动的唯一常用密钥,因此控制着这个过程。幸运的是,微软会签署第三方二进制文件,Ubuntu 已经利用这一点让微软签署了一个名为垫片反过来,它包含 Canonical 的密钥,用于签署 GRUB 和 Ubuntu 中的 Linux 内核。请注意,当双启动两个 Linux 发行版时,两个发行版的 Shim 都不会包含另一个发行版的密钥。因此,您必须使用机器所有者密钥 (MOK) 列表注册另一个发行版的密钥,您可以使用
MokManager.efi
EFI 下的实用程序执行此操作。我认为该sb-updatevar
实用程序也可以在 Linux 中执行此操作,但我对此经验较少。请参阅这里可以将多把钥匙放在一个方便的地方;您需要.cer
或.der
钥匙。请参阅我的安全启动页面了解有关此主题的更多信息。
至于你的主要问题,efibootmgr -o
(或efibootmgr --bootorder
)命令应该将控制权交给您指定的任何引导程序。但请注意,您可能想将控制权交给Boot0001
或Boot0007
,而不是Boot0006
—— Ubuntu 使用名称ubuntu
,而不是grub
来描述其自己的引导条目。您可以通过键入 来更好地识别每个条目sudo efibootmgr -v
,这将产生引导条目的完整路径(使用 EFI 路径标识符标识,这些标识符很长且很复杂,除其他外,它们还引用分区的 GUID 编号,您可以使用gdisk
或 的某些版本获取blkid
它们)。因此,在执行任何其他操作之前,您可能希望尝试将引导顺序更改为正确的值,而不是Boot0004
。
实际上,efibootmgr
由于 EFI 存在问题或机器 NVRAM(efibootmgr
存储显示和调整的数据的位置)中的数据损坏,更改有时会失败。解决此类问题通常采用三种解决方案:
- 清除不需要的条目-- 有时删除不需要的或重复的条目(如
sudo efibootmgr -b 0004 -B
删除Boot0004
)可以解决问题。(不过,您可能真的想删除也可能不想删除此条目。)有时您可能需要删除多个启动条目才能使系统重新运行。不要不过,请删除需要启动的条目。此外,大多数计算机都有固件本身创建的条目,就像Network Controller
输出中的两个条目一样。删除这些条目通常是不明智的。 - 将固件重置为默认值-- 大多数 EFI 都提供了在固件设置实用程序中将所有设置重置为默认值的选项。(有些人称之为“BIOS 设置屏幕”或类似名称——尽管 EFI 在技术上不是 BIOS,尽管许多人,甚至制造商,经常这样称呼它们。)这种方法的缺点是它可能会抹去全部EFI 条目,导致系统无法启动,直到您使用紧急磁盘恢复至少一个工作条目。
- 在另一个条目上搭载你的引导加载程序-- 此方法涉及复制或移动/重命名所需的引导加载程序,以使用 EFI 坚持启动的文件名。它通常在 EFI 拒绝启动除 Windows 引导加载程序之外的任何程序时使用,因此在您的情况下不需要它。
不过,再退一步来说,我想说的是,你使用哪个 GRUB(Fedora 的还是 Ubuntu 的)其实并不重要;它们基本上是相同的软件。如果你在配置 Fedora 的 GRUB 以执行你想要的操作时遇到问题,你可以随时调整其设置——但另一方面,一旦你超越了一些非常基本的东西,GRUB 2 的配置就会变得非常困难。出于这个原因,许多双启动多个 Linux 发行版的人更喜欢使用独立于发行版的引导加载程序——要么是他们自己的 GRUB,要么是其他东西。我自己的rEFInd 启动管理器这种配置有几个优点,例如无需依赖配置文件来检测内核更新,并且独立于任何给定操作系统的配置脚本。也就是说,如果您在efibootmgr
从一个 GRUB 切换到另一个 GRUB 时遇到问题,那么您在启动 rEFInd(或任何其他引导加载程序)时也可能会遇到问题。此外,如果您使用安全启动,您可能需要在 MOK 中注册至少一个安全启动密钥才能使 rEFInd 正常工作。因此,如果您想切换到 Ubuntu 的 GRUB 的原因是 Fedora 的 GRUB 无法启动 Ubuntu 的内核,那么问题很可能是安全启动;为 Canonical/Ubuntu 添加安全启动密钥应该可以解决这个问题。
编辑:
Boot0001
是最有可能执行您想要的操作的条目,因此它应该位于启动列表的开头;但这听起来不适合您。
如果您可以接受让 Fedora 负责启动过程,那么最好这样做,以免最终引发一系列新问题。当然,彻底删除 Fedora 条目是有风险的,因为如果您无法让其他任何东西正常工作,您可能无法启动任何东西。
你可以尝试禁用安全启动,假设它当前已启用,因为该功能可能会导致问题,特别是在复杂的设置中。
答案2
最后,感谢 Rod Smith 的帮助,我找到了选择我想要的启动顺序的解决方案。
正如他提到要禁用安全启动,我已经访问了 BIOS 设置,并且正如预期的那样,安全启动已经被禁用,但我借此机会在 BIOS/uefi 设置中更改了启动顺序,而无需 efibootmgr。
然后我选择首先在 USB 设备上启动,然后我设置了硬盘启动的顺序,首先是 ubuntu,然后它就工作了!
因此我清楚地认为,当 efibootmgr 出于某种原因无法更改顺序时,直接进入 bios/uefi 设置可能是最好的选择,而且并不是很困难。
我希望这可以帮助其他人。
再次感谢你的帮助。
泽维尔