V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
atuocn
V2EX  ›  问与答

Hybrid MBR(MBR 混合分区表)

  •  2
     
  •   atuocn · 2018-06-29 13:17:53 +08:00 · 4584 次点击
    这是一个创建于 2356 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Hybrid MBR(MBR 混合分区表)

    Hybrid MBR(MBR 混合分区表)是一种丑陋危险的技术。它可以让不识别 GPT 格式的系统,把硬盘识别为 MBR 格式,达到兼容的目的。 部分磁盘空间,GPT 分区和 MBR 分区两者混合共存。同一个磁盘分区块,既有 GPT 分区表索引,又有 MBR 分区表索引。这样,GPT 感知的 系统和 MBR 感知的系统,都按各自的理解,得到磁盘分区。

    原理

    • MBR 分区方案中,磁盘的第一个扇区( 512 字节),存放磁盘引导代码和 4 个分区表项。这 512 个字节被称为 MBR
    • GPT 分区方案中,分区表放在第 2~33 扇区,共 33 个扇区( 512 * 33 字节),另外在磁盘最末尾 33 个扇区,备份一个分区表。
    • 因为第一个扇区已被 MBR 分区方案使用,GPT 分区方案保留第一扇区,被称为 protective MBR。 protective MBR 上只有一个分区项,并标记为特殊的"EE"类型,尽可能大的覆盖整个磁盘。防止只识别 MBR 的系统操作磁盘。

    Hybrid MBR 就是利用这个 protective MBR,重新开辟出分区表,并和 GPT 分区表的分区区块位置保持一致。从而激活 MBR 系统识别分区。

    工具

    gdisk, gptsync 可以制作 Hybrid MBR

    MBR 混合分区表问题

    之所以说丑陋,因为以下原因。然而从实用主义出发,绝大多数情况下,这都不是事。

    • 它很危险。它存在 2 个不相干的分区表。如果两个分区表数据不同步,然后又在不同系统上混用,那这个盘上的数据就毁了。所以会有 Hybrid MBR 制作程序取名为 gptsync 吧。
    • MBR 分区不能容纳所有 GPT 分区。MBR 分区先天限制,只能容纳 4 个分区项,整个磁盘最大 2 TB 的容量。 同时为了尽量保持兼容性 MBR 的第一分区最好设置成类型为“ EE ”的保护分区。所以混合分区,只能选 3 个分区,且这三个分区都在前 2 TB 空间。
    • 尽管脑洞打开,利用了 protective MBR,但这是非标准方式。各操作系统对此反应不一。
    • 使用 Hybrid MBR 的一个主要目的是为了从 BIOS 启动 GPT 分区上的系统。然而,linux,grub/syslinux 等已有更好方案。 Windows 则把 Hybrid MBR 当作 MBR 格式磁盘。

    从 BIOS 启动 GPT 上的系统

    从 BIOS 启动 GPT 上的系统,是个和 Hybrid MBR 有点相关,实际独立的命题。Hybrid MBR 当然可以实现启动,但它是把磁盘当作 MBR 来启动的。

    GPT 分区是和 UEFI 启动配合的。GPT 的启动磁盘上划出一个特殊的分区,称为 ESP 分区,UEFI ROM 从 ESP 分区加载系统启动代码。

    BIOS 时代,并没有 GPT 格式分区。然而 linux,grub/syslinux,可以从 BIOS 启动,并识别 GPT 磁盘格式,加载 GPT 分区内的操作系统。

    grub 方案

    BIOS 中 grub 的启动过程,简单地说,分四步。

    1. 第一步固化在 BIOS 中。BIOS 加载 MBR, MBR 内有极小的引导代码,BIOS 控制权交给 MBR 内的引导代码。
    2. MBR 加载安装在固定磁盘位置的 grub core image 代码。这个磁盘位置是磁盘扇区的绝对位置,在 grub 安装时硬编码入 MBR 和 core image。
    3. core image 代码也不大,但它能识别 grub 安装时指定的磁盘格式和文件系统,加载更多的 grub 模块和配置。
    4. grub 根据配置,加载指定的操作系统。控制权交给 OS 的引导代码。

    其实,在 BIOS 环境中 grub 启动 GPT 磁盘上的操作系统,问题不大。grub 有 GPT 识别模块。问题是如何把 grub 的 core image 引导代码安装在 GPT 磁盘上。对 core image 来说,安装在哪无所谓,反正是靠磁盘扇区的绝对位置硬编码定位。

    MBR 方案中,grub 的 core image 是安装在磁盘分区的间隙中。这个间隙通常是 MBR 到第一个分区的空闲保留区。以前是 63 个扇区,后来磁盘分区的扇区对齐技术,4K 对齐 /1M 对齐,基本上有接近 1M 的空间。

    GPT 分区方案中,第 2~33 扇区被 GPT 分区表使用了。装在磁盘间隙中也不是个事,名不正么。反正 GPT 分区表项多,不像 MBR 才区区四个。 所以 GPT 分区中增加一个特殊分区,就像 ESP 分区待遇一样。这个分区叫做 BIOS Boot Partition ,gdisk 中分区类型是 EF02。GPT 使用 GUID 表示类型,GUID 值是 21686148-6449-6e6f-744e656564454649 。这样,grub 安装的时候,就把 core image 镜像复制到这个分区,同时修改 MBR 和 core image 中硬编码的定位扇区地址就好了。

    注意BIOS Boot Partition 是存在于 GPT 分区表项中,和 MBR 分区表没关系哦,所以磁盘仍是 GPT 格式,和 Hybrid MBR 没关系了。

    限制

    • grub 要求 MBR 中的第一个分区项是 EE 类型。使用 Hybrid MBR,第一个分区必须是 EE 类型。
    • BIOS Boot Partition 显然也不能太后,BIOS 读不到嘛。尽量在磁盘的前面。

    参考

    关于 Hybrid MBR,这篇文章 Hybrid MBRs 讲的很详细。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1152 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:59 · PVG 01:59 · LAX 09:59 · JFK 12:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.