修复在受保护的 MBR GPT 上使用 GRUB 多次启动 Linux 时 Windows 10 启动的问题

修复在受保护的 MBR GPT 上使用 GRUB 多次启动 Linux 时 Windows 10 启动的问题

目前我的磁盘设置如下:

Disk /dev/sda: 1953525168 sectors, 931.5 GiB
Model: WDC WD1003FZEX-0
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): 8F14ACC0-7807-4C09-BCB0-C340A635CF07
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 1953525134
Partitions will be aligned on 2048-sector boundaries
Total free space is 3437 sectors (1.7 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            6143   2.0 MiB     EF02  BIOS boot partition
   2            6144       524294143   250.0 GiB   8300  Linux filesystem
   3       524294144      1048582143   250.0 GiB   8300  Linux filesystem
   4      1048582144      1427140607   180.5 GiB   8300  Data
   5      1427140608      1949331455   249.0 GiB   0700  Microsoft basic data
   6      1949331456      1953523711   2.0 GiB     2700  Windows RE

为此,我在 MBR 分区方案上首次安装了 Windows 10(现在为 5)和基于 Gentoo 的 Linux(现在为 2)。一切都很顺利。后来我尝试了 Linux,更改为带有保护性 MBR 的 GPT,然后添加了第二个分区来容纳另一个基于 Gentoo 的 Linux(现在是 3)。一切都很顺利,直到 Windows 10 更新为止。我知道在更新之前,Windows 10 都是以 MBR 启动的。我推测它在升级过程中检测到了 GPT 并将其引导更改为 UEFI。系统是 BIOS,无法升级到 UEFI,现在 Windows 无法启动 - 进行短暂启动尝试并循环重新启动。我使用 Microsoft 提供的 Windows 10 ISO 在 Ventoy Live Stick 上安装和修复系统。这无法修复启动,我认为它无法处理 GRUB 和保护性 MBR 并且停止。我已进入其命令行故障排除,尝试修复启动并通过发出以下命令强制将其重建为 BIOS:

bcdboot C:\Windows /s C: /f BIOS

不走运,它似乎现在尝试安全启动,因为它在启动时显示以下内容来抱怨:

error: invalid signature

我尝试过的 GRUB 条目:

menuentry "Windows 10 BIOS MBR" {
    savedefault
    insmod part_msdos
    insmod ntfs
    insmod chain
    chainloader (hd1,msdos1)+1
}

然后:

menuentry "Windows 10 BIOS MBR" {
    savedefault
    insmod part_msdos
    insmod ntfs
    insmod chain
    drivemap hd0 hd1
    chainloader (hd1,msdos1)+1
}

但我不确定这应该是怎样的。

所以,我知道 Windoes 10 可以工作是因为它的初始 MBR 引导设置。升级后如何解决此问题并保留保护性 MBR?

答案1

你可以试试:

menuentry "Windows 10 BIOS MBR" {
    search -u $uuid -s
    ntldr /bootmgr
}

$uuid替换为以下输出:

blkid -no UUID /dev/sda5

(显然您将 Windows Boot Manager 安装到 /C:是第五个分区。)

然而,由于磁盘是用 GPT 分区的,很可能bootmgr最终会失败在启动 Windows 安装时。

相关内容