我想试用 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。