Hybrid MBR(MBR 混合分区表) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
atuocn
V2EX    问与答

Hybrid MBR(MBR 混合分区表)

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

    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     Solana     2573 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 04:10 PVG 12:10 LAX 21:10 JFK 00:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86