UEFI 启动顺序取决于是否插入 USB 驱动器

UEFI 启动顺序取决于是否插入 USB 驱动器

我想试用 Ubuntu 14.04 LTS。因为我不想在此之后重新安装 Windows,所以我通过 DVD-ROM 将其安装到我的 USB 3.0 棒(64GB)上。这很有效。

当我重新启动计算机时,我首先想知道的是,当没有插入 USB 驱动器时,Windows 不再启动。我找到了原因,并使用 efibootmgr 的 -o 参数更改了 GPT 分区中的启动顺序。

现在我必须按 F9 进入 HP 笔记本电脑的 UEFI 启动菜单,然后才能选择 ubuntu。一切正常。

还有一件事困扰着我:我可以配置当 USB 连接时 ubuntu 自动启动吗?如果没有 USB 连接,Windows 应该可以正常启动而不显示 grub 吗?

sudo efibootmgr -v
[sudo] password for alex: 
BootCurrent: 0000
Timeout: 0 seconds
BootOrder: 0001,0000,0004,9999
Boot0000* ubuntu    HD(2,145800,82000,1ec11f19-24da-44cd-8ac6cd26205992d2)File(\EFI\ubuntu\shimx64.efi)
Boot0001* Windows Boot Manager  HD(2,145800,82000,1ec11f19-24da-44cd-8ac6-cd26205992d2)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.}....................
Boot0004* Internal Hard Disk    ACPI(a0341d0,0)PCI(11,0)SATA(0,ffff,0)HD(2,145800,82000,1ec11f19-24da-44cd-8ac6-cd26205992d2)..BO
Boo9999* USB Drive (UEFI)   ACPI(a0341d0,0)PCI(1d,0)USB(10,0)..BO

alex@alex-desktop:~$ sudo parted -l
Modell: ATA SAMSUNG SSD 830 (scsi)
Festplatte  /dev/sda:  256GB
Sektorgröße (logisch/physisch): 512B/512B
Partitionstabelle: gpt
Disk-Flags: 

Nummer  Anfang  Ende    Größe   Dateisystem  Name                          Flags
 1      1049kB  683MB   682MB   ntfs         Basic data partition          versteckt, diag
 2      683MB   955MB   273MB   fat32        EFI system partition          boot, esp
 3      955MB   1089MB  134MB                Microsoft reserved partition  msftres
 4      1089MB  232GB   231GB   ntfs         Basic data partition          msftdata
 5      232GB   256GB   24,0GB  ntfs         Basic data partition          versteckt, msftdata


Modell: SanDisk Extreme (scsi)
Festplatte  /dev/sdb:  32,0GB
Sektorgröße (logisch/physisch): 512B/512B
Partitionstabelle: msdos
Disk-Flags: 

Nummer  Anfang  Ende    Größe   Typ       Dateisystem  Flags
 1      1049kB  28,4GB  28,4GB  primary   ext4         boot
 2      28,4GB  32,0GB  3652MB  extended
 5      28,4GB  32,0GB  3652MB  logical

答案1

背景:EFI 使用存储在 NVRAM 中的启动顺序变量来确定要启动的内容。(这是输出BootOrder:中的行efibootmgr。)这些条目指向存储在EFI 系统分区 (ESP),网络设备等。您可以拥有多个 ESP,每个 ESP 可以有多个 EFI 启动文件。如果一个启动文件失败,ESP 应该返回到其列表中的下一个启动文件。

您的问题是,虽然 Ubuntu 安装在您的 USB 闪存驱动器上,但该闪存驱动器没有 ESP,而 GRUB 似乎已安装在硬盘上的 ESP 中。不幸的是,您的 GRUB 配置依赖于 USB 驱动器上的配置文件,因此如果在 GRUB 启动时拔下 USB 驱动器,GRUB 将返回到提示符grub>,但它不会失败,返回到 EFI,以便 EFI 可以启动下一个引导加载程序。当您首次安装 Ubuntu 时,此 GRUB 被设置为默认引导加载程序,因此您看到了您描述的故障类型。您将默认设置为 Windows,这使其能够正确启动,但使启动 Ubuntu 变得更加困难。有几种方法可以清除此问题:

  • 您可以按原样使用它,并使用计算机的内置启动管理器(您提到的 F9 键)选择要启动的操作系统。此解决方案是最安全的,因为它不涉及任何可能使情况恶化的更改。
  • 您可以尝试重新配置 GRUB,使其从 ESP 而不是从 Ubuntu/boot目录读取配置文件,然后将 GRUB 重置为默认设置。然后 GRUB 应该会显示一个启动菜单,这将使您能够更轻松地选择所需的操作系统。不过,我对如何做到这一点有点生疏。检查这个旧文档页面了解所有细节(以及更多)。请注意,只有当 USB 驱动器插入时,GRUB 才会自动选择 Ubuntu —— 或者至少,如果可以配置它来做到这一点,我不知道如何配置。
  • 您可以重新分区内置硬盘,以包含 Ubuntu/boot分区并将其文件复制到那里。然后您需要重新安装 GRUB。理论上,无论是否插入 USB 驱动器,它都应该可以工作,但当插入 USB 驱动器时,它不会自动选择 Ubuntu,而当未插入 USB 驱动器时,它不会自动选择 Windows。此选项是最危险的选项之一,因为它涉及调整磁盘分区的大小。
  • 在 USB 闪存驱动器上创建 ESP,并使用后备文件名在那里安装 GRUB EFI/BOOT/bootx64.efi。(不过,安装过程可能有点复杂。)然后,您可以使用启动管理器 (F9) 在 USB 驱动器 (GRUB/Ubuntu) 和 Windows 之间切换。有些 EFI 可能会让您在插入 USB 驱动器时将其设置为默认驱动器,这样当 Ubuntu 可用时,您就可以自动启动它,但我不能保证这个细节会如您所愿。您肯定需要重新分区 USB 驱动器(这会增加一点风险),并且您可能需要将磁盘从 MBR 转换为 GPT。这种方法的一个优点是 USB 驱动器应该可以在几乎任何基于 EFI 的、具有相同架构的计算机上独立启动。
  • 你可以安装我的rEFInd 启动管理器到您的 ESP。通过一些配置调整(主要是设置default_selection vmlinuz,Windows或文件中的类似内容refind.conf),当 USB 驱动器插入时,它应该默认启动 Ubuntu,而当 USB 驱动器未插入时,它应该默认启动 Windows。

可能还有其他可能的解决方案,但这些是我首先想到的。其中最好的方法可能是保持原样,在 USB 驱动器上创建 ESP 并在那里重新安装 GRUB,然后使用 rEFInd。

相关内容