我有一个安装了 Windows 10 的 SSD,一个硬盘驱动器最初完全在 NTFS 中分区 - 但我使用 Debian 安装程序缩小了 NTFS 并在新释放的空间上安装了 Debian。
奇怪的是,安装程序告诉我它没有检测到 Windows,并要求我确认将 GRUB 写入 MBR。我拒绝了,并要求将 GRUB 安装到刚刚安装 Debian 的硬盘上(这与安装 Windows 的 SSD 不同)。
我在我的 BIOS 中禁用了安全启动,但即便如此计算机在 Windows 上自动启动而不显示 GRUB,并且 Windows 启动管理器是我的 BIOS 在启动管理器中检测到的唯一一个。我的 BIOS 中没有任何选项可以信任/选择 EFI 文件,正如我检查过的论坛中经常指出的那样。
我想在 Windows 上自动启动,除非我按住 SHIFT 在 Debian 上启动(我知道在启动时显示 GRUB 时如何执行此操作......但它没有)。我应该怎么办?
我的电脑是联想军团Y520。
如果您的 BIOS 有一个引导选项,字面意思是“Windows 引导管理器”,这强烈表明您的 Windows 已经以 UEFI 样式安装。Debian 安装程序甚至提供将 GRUB 写入 MBR 的事实表明 Debian 安装程序已以旧版 BIOS 样式启动。
16 位传统 BIOS 引导加载程序无法链式加载 UEFI 引导加载程序(无需先转换为 32 位或 64 位模式并设置 UEFI 环境,这有悖于首先处于传统 16 位模式的目的地方)。
通常,用于引导 OS 安装程序的引导模式(BIOS 与 UEFI)将自动确定要安装的新 OS 将使用哪种模式。在 UEFI 模式下运行的操作系统安装程序在技术上可以安装基于 BIOS 的引导加载程序,而不是基于 UEFI 的引导加载程序,但相反的情况通常是不可能的,因为激活旧版 BIOS 兼容性需要禁用 UEFI 运行时服务接口,这是编写引导程序所必需的设置到系统 NVRAM 中(例如 BIOS 设置中的“Windows 引导管理器”文本) - 这是完成 UEFI 引导加载程序安装的要求。
看起来您的笔记本电脑目前可能更喜欢在传统 BIOS 模式下启动而不是 UEFI,如果启动媒体具有两个可用选项,并且 Debian 10 安装媒体确实具有这两个选项。所以它可能在 BIOS 模式下启动了 Debian 安装程序,因此无法以标准方式完成 UEFI 引导加载程序的安装。在 BIOS 模式下,安装程序也不会告诉您安装 UEFI 引导加载程序需要在要安装 UEFI 引导加载程序的磁盘上具有 ESP(EFI 系统分区)。如果您没有选择在 HDD 上创建一个,则说明没有安装 UEFI 引导加载程序的有效位置。
还有一个问题是某些 UEFI 固件实现存在错误和/或以 Windows 为中心。正如 Debian Wiki 所说:
幸运的是,系统供应商偶尔会修复固件错误。因此,第一步,查看联想是否有适用于您的型号的更新固件(“BIOS 更新”),如果有,请安装它。这可能会使安装双引导配置更容易。
作为第二步,如果可以的话,您可能应该禁用旧版 BIOS 兼容性功能。如果您发现“BIOS”设置允许强制系统仅使用 UEFI,请选择该设置;或者有一个提到 CSM(“兼容性支持模块”)的设置,禁用它。现在应该更容易让 Debian 安装程序以 UEFI 模式启动,就像您现有的 Windows 安装一样。这将使它安装正确类型的引导加载程序。
作为第三步,请注意拥有 ESP(EFI 系统分区)的要求。它本质上是一个小的 FAT32 分区(仅 Debian 10 就足够了 256M),在 Debian 中应该挂载到
/boot/efi
. 如果你使用 MBR 分区,它应该有一个特殊的分区类型代码0xef
;如果使用 GPT 分区,将分区标记为“可引导”和/或“ESP”的分区选项应该是正确的。如果您以后想这样做,在您的 HDD 上安装 ESP 将允许您将 HDD 移动到另一个系统并从中引导您现有的 Debian 安装。为 Debian 在 HDD 上创建单独 ESP 的替代方法是在设置分区时选择 SSD 上的 Windows ESP,选择不对其进行格式化,而是将其与现有文件系统一起挂载为
/boot/efi
. ESP 上的标准化目录结构旨在处理同一 ESP 上多个操作系统的引导加载程序。如果您选择此选项,Debian 10 的 UEFI 引导加载程序应该很好地适合标准 Windows 10 ESP 并留有余地。但是您可能必须进入“高级/手动”分区选项才能执行此操作。如果您在此之后仍有问题,我建议您阅读Roderick W. Smith 关于 UEFI 引导加载程序挑战的文本。它是为 rEFInd 引导加载程序编写的,但其中描述的许多内容也适用于 UEFI 版本的 GRUB。
一旦你的两个操作系统都以 UEFI 风格启动:
如果您的 SSD 是 NVMe 类型,那么它在 Linux 中可能显示为
/dev/nvme0n1
(其分区为/dev/nvme0n1pN
,N = 分区号)。确保 Linux 看到您的 SSD,然后update-grub
以 root 身份运行。如果它没有说它检测到 Windows,
blkid
请以 root 身份运行:它应该报告所有文件系统和分区的 UUID。在 SSD 上找到 Windows ESP 的文件系统UUID。如果 Windows ESP 使用标准的 FAT32 文件系统类型,它应该在表格中列出UUID="xxxx-xxxx"
(它实际上是一个 FAT32 文件系统序列号)。知道 UUID 后,您可以为 Windows 配置自定义 GRUB 菜单条目,方法是将以下几行添加到末尾
/etc/grub.d/40_custom
:这应该是适用于 Windows 的基本 UEFI 链加载器条目。只需替换
xxxx-xxxx
为实际的 Windows ESP 文件系统 UUID。编辑文件后,update-grub
以 root 身份运行。然后将默认引导选项设置为debian
,你应该有你的引导菜单。联想可能选择超越 UEFI 规范要求并在其 UEFI 固件中实现 NTFS 文件系统支持,并提供在 ESP 上使用 NTFS 的 Windows 安装。在这种情况下,替换
insmod fat
为insmod ntfs
,文件系统 UUID 将具有不同的格式:在blkid
输出中将类似于UUID="A268B58668B559AD"
.注意:查看
efibootmgr
命令。您可以使用它来操作 Linux 中的固件启动设置,而无需进入 BIOS 设置菜单。在 Windows 中,bcdedit
也可以这样做,尽管我认为它的用户界面更尴尬。它没有检测到您的窗口,因为它位于不同的磁盘上。当您将操作系统安装在不同的磁盘上时,每个磁盘都会有不同的引导扇区而没有任何冲突,这是一件好事,因为如果其中一个损坏了,它不会影响其他的。
您需要进入 BIOS 设置并将引导设备从 SSD 更改为硬盘驱动器。