我可以在辅助 GPT 驱动器上从 Grub 链式加载 MBR 吗?我可以在辅助驱动器上取消 MSR 吗?

Emi*_* L. 4 linux windows-7 mbr multi-boot gpt

所以我有一个支持 UEFI 的主板和三个硬盘:

  • /dev/sda - 256G SSD (MBR)
  • /dev/sdb - 230G 硬盘 (MBR)
  • /dev/sdc - 512G SSD (GPT)

由于历史原因,sda 和 sdb 有 MBR 分区表,它们是较旧的驱动器。sda 驱动器包含一个有效的 Windows 7 安装,我非常希望保留它,而 sdb 包含我也非常希望保留的大数据...档案和视频等。

sdc 驱动器是我购买的新驱动器,并使用 Windows 磁盘管理器进行分区,其中一半用于 Windows,一半用于稍后的双引导 linux。我在对它进行分区时没有注意它,它创建了一个 GPT 分区表和一个 Microsoft 保留分区。时间过去了,sdc 现在包含了很多我不想弄乱的数据,是时候安装那个双引导 linux 了。

由于分区表是 GPT,Grub2 想要在驱动器的头部(被 MSR 占用)一个 EFI 系统分区(ESP),实际上拒绝安装。

所以我的问题是:

  1. 我可以将 MSR 从轨道核弹到 ESP 中的三明治,也许是 /boot 吗?在安装硬盘之前,我的 Win7 启动良好,所以我看不出它会如何影响任何事情。
  2. 如果我将引导顺序更改为使用 UEFI 并从 sdc 引导,它会加载 grub,grub 是否能够从 sda 上的 MBR 链式加载(保持 sda 未修改)?

(澄清:我不关心 MSR 使用的空间,它只是妨碍我想进入那里以便我可以启动的 ESP)

Emi*_* L. 6

我的问题源于混乱和缺乏知识。我将尝试总结我在这里学到的东西,希望有人觉得它有用。

BIOS 与 UEFI 硬件

当您打开计算机电源时,它必须在某处开始执行程序。通常,这是主板上的 ROM,其中包含一个程序,长期以来该程序被称为 BIOS,它以特定(有些)标准方式运行。它控制着一些硬件功能,但最重要的是,它以明确定义的方式将控制权传递给其他媒体上的操作系统。

BIOS“标准”程序后来被 UEFI 取代,它具有相同的目的(主要是)并且它也有一种方法可以将控制权传递给某些其他媒体上的操作系统。

BIOS 启动

当 BIOS 启动时,它从假定包含引导加载程序的主引导设备读取第一个扇区并开始执行它。第一个扇区称为主引导记录 (MBR)。假定磁盘使用 DOS 分区方案。

在旧的 DOS 分区方案(有时也称为 MBR)中,为 MBR 中的引导加载程序保留了高达 446 字节的程序空间。谁会需要超过 446 字节的 amirite?因此,较大的引导加载程序通常会利用 DOS 分区方案的“功能”,即在 MBR 之后有大约 1-2 MB 左右的未使用空间。引导加载程序将具有“阶段 1”和“阶段 2”,其中阶段 1 存储在 MBR 中,并且仅加载存储​​在此“未使用”区域中的阶段 2。

UEFI 启动

当 UEFI 启动时,它假定主启动设备正在使用 GPT,并查找具有特定类型的分区,即:“EFI 系统分区”。该分区假定为 FAT 12,16 或 32。一旦找到,它就会通过查找名称以.efi.

我发现在安装 grub 的上下文中,我阅读的文本将 UEFI 引导程序称为简单的 UEFI,将 BIOS 引导程序称为 BIOS。这令人困惑,因为我以为他们在谈论主板 ROM 上的实际软件。

无论如何,UEFI 主板仍然可以执行 BIOS 引导程序,通常在 UEFI 设置中称为“传统引导”或 CSM。

GPT 和 DOS/MBR

虽然 GPT 与旧的 MBR/DOS 分区方案有很大不同,但它保留了 MBR 分区磁盘上引导加载程序将驻留的区域。这意味着您可以在 GPT 上的这个保留空间中安装“传统”引导加载程序并使用 BIOS 引导。但是有一个警告,还记得阶段 1/2 的事情吗?是的 GPT 没有那个“功能”,保留区域仍然只有 446 字节。因此,为了容纳引导加载程序的第 2 阶段,引入了一种特殊的分区类型:“bios_boot”。所以引导加载程序必须知道它正在安装在 GPT 磁盘上并找到“bios_boot”分区并将它的第 2 阶段放在那里,让第 1 阶段以某种方式找到这个分区。

概括

因此,您可以通过三种方式启动:

UEFI 启动 + GPT

创建一个分区来保存引导加载程序,100 MB 左右应该绰绰有余,将其类型设置为“EFI 系统分区”,使用 FAT 12,16 或 32 对其进行格式化。将其安装在某处,通常为/boot/efi。然后告诉GRUB安装的EFI装载机:grub-install --efi-directory=/boot/efi

UEFI 启动应该通过查看分区表来找到分区。

有人告诉我,您也可以将 ESP 用于“/boot”,但我还没有尝试过。

BIOS 启动 + GPT

创建一个分区来保存加载程序的第 2 阶段,通常为 1-2 MB,并将类型设置为“bios_boot”。你不需要在这个分区上放置文件系统或挂载它,grub 将“拥有”它做它需要的事情。该分区在磁盘上的位置应该无关紧要。然后像往常一样在 MBR 上安装 grub grub-install /dev/sdx。Grub 应该检测到它是 GPT 磁盘,找到 bios 引导分区(如果没有,请抱怨!)并安装适当的第 1 阶段和第 2 阶段。

BIOS 启动 + MBR

只需在您的磁盘上创建一个 DOS 分区方案并用于grub-install /dev/sdx写入 MBR,不需要 bios 引导分区。

从带有 GPT 的主驱动器链式加载带有 MBR 的辅助驱动器

所以我发现无论出于何种原因,grub 都不允许从 UEFI 引导加载程序链式加载 BIOS 引导加载程序。我个人不明白为什么不可能,但至少 grub 似乎不支持它。

因此,为了解决我的问题,我将 GPT 驱动器设置为 UEFI 设置中的主引导设备,然后使用 BIOS 引导从 GPT 设备加载 grub,如上所述。这意味着它能够从第一张磁盘上的 MBR 链式加载 Win7。