当我的计算机安装单系统 Windows 10 时,引导加载程序是 UEFI Bios,它具有许多功能,例如在启动时更改默认 GPU。安装 Ubuntu 后,引导加载程序更改为 grub。我只是想知道如何在这两个引导加载程序之间切换?
答案1
了解两种不同工具之间的区别非常重要:
- 引导加载程序是将操作系统内核加载到内存并将控制权交给内核的程序。这些程序通常是操作系统特定的,因此必须使用 Windows 引导加载程序引导 Windows,并使用 Linux 引导加载程序(例如 ELILO、GRUB 或 EFI 存根加载程序)引导 Linux。
- 启动管理器提供菜单或命令行,使您可以启动特定的引导加载程序或其他与引导相关的程序。专门用作引导管理器的程序不会直接启动操作系统内核,尽管它启动的引导加载程序会这样做。
这种区别非常简单且易于理解,但有一些复杂因素可能使差异看起来相当模糊:
- 一些程序(包括 GRUB)既是引导加载程序又是引导管理器。GRUB 提供了一个选项菜单,就像引导管理器一样;但它也可以直接引导 Linux 内核。但是,GRUB 无法直接启动 Windows 内核,因此要引导 Windows,GRUB 会将控制权交给 Windows 引导加载程序。Windows 引导加载程序也可以用作引导管理器,但它通常配置为直接引导至 Windows,因此此功能不太重要 —— 至少当人们像 Linux 用户一样进行设置时。(Windows 工具(如 EasyBCD)可以帮助配置 Winddows 引导加载程序的引导管理器功能,但我自己对这个工具不是很熟悉。我的理解是它在基于 EFI 的计算机上仍然几乎没用。)
- 从 3.3.0 版开始,Linux 内核包含了一项功能,称为EFI 存根加载器,将其变成自己的引导加载程序。因此,引导管理器(如 rEFInd 或 gummiboot/systemd-boot)开始看起来很像引导管理器/引导加载程序的组合,因为引导管理器会启动内核。关键的区别在于,引导管理器使用 EFI 系统调用来启动内核,就好像内核是一个引导加载程序一样——从技术上讲它确实是引导加载程序。
另一个需要注意的问题是,EFI 规范包含一个最小的启动管理器,它内置于固件中,而不是存储在磁盘上。此功能可以从 Linux 使用该efibootmgr
工具配置,也可以从 Windows 使用该工具bcdedit
或第三方简易UEFI。不幸的是,EFI 规范包括不引导管理器应提供何种用户界面的指导。因此,一台计算机的引导管理器用户体验可能相当不错,但另一台计算机的引导管理器体验可能很糟糕,甚至无法使用。此外,一些 EFI 存在错误,导致它们忘记或忽略其引导管理器配置。
现在,回到你的问题,目前还不清楚是什么工具提供了消失的功能——它可能是计算机的内置启动管理器、Windows 启动加载程序,或者制造商安装的自定义启动管理器。通常,Windows 启动加载程序提供的选项很少或根本没有,尽管可以将其配置为显示带有一些选项的菜单。但是,如果你仍然可以从 GRUB 启动 Windows,那是通过 Windows 启动加载程序完成的,因此,如果是 Windows 启动加载程序显示了这些选项,我希望它们仍然对你可用——但是后您从 GRUB 中选择 Windows。(另一方面,安装 Linux 可能会导致 Windows 引导加载程序以您不想要的方式调整其选项。)
有时添加启动项(通过efibootmgr
)会导致计算机固件删除其他项或以其他方式调整其操作。如果这是导致问题的原因,您必须联系制造商或(可能更好)在制造商特定的论坛上询问,因为您看到的是您的计算机特有的功能。不幸的是,制造商对此的客户支持通常很糟糕,但如果您朝这个方向探索,您可能会找到一些东西。如果有解决方案,则可能是访问计算机的内置启动管理器,这通常可以通过在启动过程的早期按 Esc、Enter 或功能键来完成。(有不关于如何做到这一点的标准化。
如果你看到的功能来自特定于制造商的启动程序,则可能可以将其添加到 GRUB 菜单;但你需要找到提供该功能的 EFI 程序,并手动将其添加到菜单中,或者使用类似GRUB 定制器。或者,我自己的重新索引可能会自动获取制造商的引导加载程序并将其显示为菜单选项,但我不能保证这一点。您可以在EFI 系统分区 (ESP),通常/boot/efi
在 Ubuntu 中安装在。EFI 程序通常有.efi
扩展,因此您可以查找它们。请注意,许多制造商还提供自己的类似 ESP 的分区,用于存储 EFI 工具和配置文件,但这些分区可能不会自动安装在 Ubuntu 中。您需要使用磁盘实用程序(例如)parted
找到它们,然后在文件管理器中或使用 中安装它们mount
。
答案2
有许多工具可让您切换 efi 引导加载程序。
efibootmgr
... 使用起来不是很有趣,但却是实际的答案。http://manpages.ubuntu.com/manpages/xenial/man8/efibootmgr.8.html(切换启动顺序,这里回答:使用 efibootmgr 更改启动顺序)rEFInd
是我最喜欢的。http://www.rodsbooks.com/refind/这个可以让你容易地设置自定义的引导加载程序显示,并且配置起来比较容易。grub2
也可以让您管理这一点,但它不像 rEFIND 那样直观。这里有很多相关资源:https://help.ubuntu.com/community/UEFIBooting
我还应该在这里提一下更多背景信息,您的硬盘上有一个特殊的分区,该分区使用fat32
文件系统格式化,通常128mb
但有时更大。它保存了您的所有 UEFI 启动配置和加载程序。像这样找到它(在 Linux 上使用parted
):
$ sudo parted
(parted) print all
Model: ATA SanDisk Ultra II (scsi)
Disk /dev/sda: 480GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1087MB 1086MB ntfs Basic data partition diag
2 1087MB 1360MB 273MB fat32 EFI System Partition boot, esp
3 1360MB 1494MB 134MB Microsoft reserved partition msftres
4 1494MB 190GB 189GB ntfs Basic data partition msftdata
8 190GB 349GB 158GB ext4 LinuxHome
...
(parted)
您可以使用此信息来挂载 UEFI 分区:/dev/sda2
要了解更多详细信息,请查看 Ubuntu 的社区 Wiki 条目:https://help.ubuntu.com/community/UEFI