有没有基本的GPT 和 MBR 分区有什么区别?我说的不是分区表或布局,而是分区本身。
假设我已将分区格式化为 NTFS,我可以逐字节地在 MBR 和 GPT 磁盘之间复制它吗?
如果是这样,如果我有一个 Windows 分区,我可以将其逐字节从 MBR 磁盘复制到 GPT 磁盘吗?什么会阻止我将 NT 6.0 VBR(又名BOOTMGR
)贴在分区上并从 BIOS grub 链式加载它,尽管它位于 GPT 磁盘上?对于最初安装在 GPT 磁盘上的 Windows,也有同样的问题。是什么阻止我这样做?
答案1
没有。MBR 和 GPT 都不处理分区内的内容。您可以将分区从 MBR 克隆到 GPT 或反之亦然,并且仍然可以正常访问所有数据。当然,要保持在限制之内(例如 MBR 上每个分区的最大扇区数为 2^32)。
但是,当涉及到启动和操作系统时,事情会受到进一步的限制。Windows 有一个人为的限制,这意味着它无法从 GPT 磁盘进行 BIOS 启动。它需要 UEFI。Linux 不受此限制的影响。GRUB 不太可能对此进行任何改变。
BIOS 启动不关心 MBR 或 GPT 或其他任何东西。它只执行启动驱动器的第一个扇区。
那么是什么阻碍了你?Windows。你能让它工作吗?是的。只需为 Windows 创建一个兼容的启动分区(GPT 的 FAT32 EFI 系统分区或 NTFS 普通分区)并使用bcdboot
它进行配置。还有mbr2gpt
。
答案2
分区表不关心它们包含的数据,但另一个方向不一定是正确的:分区数据可能关心它们所包含的磁盘和分区表。
例如,FAT 和 NTFS 文件系统的引导扇区包含一个称为 BIOS 参数块* 的数据结构,其中包含带有 BIOS** 驱动器号和所谓的“隐藏扇区”等数据的字段,这些字段应包含分区偏移量。如果您将分区按字节复制到另一个位置,则 BPB 可能不再有效。引导扇区中的代码和读取分区的操作系统(尤其是 DOS 系列)可能依赖于 BPB 是否正确填充,因此复制的文件系统在某些实现上可能无法启动或无法访问。
不过,现代的、支持 GPT 的引导加载程序和操作系统可能不会关心这两个字段;它们通常通过 UUID 而不是硬编码偏移量来引用分区。特别是 GRUB,一旦其核心映像成功加载(通常从 MBR 分区磁盘上第一个分区之前的间隙加载,或者从 GPT 分区磁盘上的 BIOS 引导分区加载),它将访问所有分区而无需使用 BPB,无论平台如何。
然而,在一般情况下,您不能假设文件系统数据不包含对其所在特定磁盘上的特定分区的引用。
按位复制还可能导致其他问题;例如,文件系统的分区数据中可能包含 UUID,按位复制后,该 UUID 显然不再具有唯一性,这可能会破坏假定它是唯一的操作系统。但这并不意味着您将完全无法访问该分区。
* 这里的“BIOS”不是指存储在 ROM 中的 PC 固件,而是指 MS-DOS 和 PC DOS 的低级 I/O 子系统。
** 然而,在这里做参考PC固件,特别是中断0x13服务。