延伸磁盘分割
目录
随着硬盘容量的增长,单一硬盘上建立多个磁盘分割区的需求开始增加,但如同前面提过的,MBR磁盘分割表在设计上是由固定的四组 16 bytes 磁盘分割纪录所组成,本身并没有预留扩充的空间,因此理论上每个硬盘上只能建立四个磁盘分割区,为了突破这个限制,因此后来便发展出了「延伸磁盘分割」的作法。

延伸磁盘分割的基本概念在于将硬盘上的磁盘分割区重新定义为主要磁盘分割与延伸磁盘分割两类,其中现有直接利用标准 MBR 所能给予的四组磁盘分割纪录的普通磁盘分割被重新命名为「主要磁盘分割(Primary partition)」,当使用者需要在同一硬盘上建立超过四个磁盘分割时,延伸磁盘分割定义允许「牺牲」MBR 当中的一笔记录空间用于建立虚拟的「延伸磁盘分割 (Extended partition)」。
在延伸磁盘分割的范围内用户可以建立多个「逻辑磁盘区 (logical volume)」,而每个逻辑磁盘区的起点磁区都会具有类似第一个磁区的 MBR 结构,称之为延伸开机纪录 (Extended Boot Record, EBR),当中会记载此逻辑磁盘区的起点、终点等信息以及下一个 EBR 磁区的位置, 透过这样的方式来实质突破单一硬盘上只能有四个分割区的限制。
但要特别注意的是,逻辑磁盘区并不能做为启动磁盘使用,除此之外在日常用途中与主要磁盘分割并没有什么显著差异。
定址能力的延伸
除了磁盘分割的数量上限外,另一项MOR磁盘分割的主要限制则是来自其所能寻址的硬盘大小范围,在最初的设计中MOR磁盘分割纪录主要是依赖CHS定址格式的起点、终点扇区来进行磁盘分割区的定位,但如同前面提及的,CHS定址格式的最多只能寻址约8.4 GB的磁盘空间,为了能够使用超出8.4 GB部分的磁盘空间,因此原有的定址机制势必需要调整。
但好在当初设计MDR时磁盘分割表当中除了CHS定址格式的磁盘分割区起点、终点之外还设计了纪录以LBA格式定址的绝对起点磁区位置(长度为4字节)与各磁盘分割的总磁区数(长度亦为4字节),因此可以透过转向采用LBA定址为主、忽略原有基于CHS格式定址的起终点扇区位置之方式来大幅扩增 MBR 磁盘分割表的寻址能力,从原有的8.4 GB 一举提升至2.2 TB(4字节长度的地址包含32个位,可定址出2^32个扇区,即4,294,967,296个磁区,以每个磁区512 bytes计算即为约2.2 TB)。
GUID 磁盘分割表 (GUID Partition Table,GPT)
随着电脑硬盘容量的快速发展,个人电脑硬盘的容量迅速逼近MOR磁盘分割表所能寻址的最大上限2.2TB,为了解决这个问题与修正MORW分割表在多年使用过程中为了实际使用需求而做出的妥协措施所造成的各种混乱与规范不一,Intel在发展可延伸固件接口(UEFI)时一并提出了全新的磁盘分割表规范GPT。
GUID 磁盘分割表的基本结构
相较于 MBR 将整个磁盘分割表全部塞在第一扇区而言,采用 GUID 磁盘分割表的硬盘会使用多个磁区存放磁盘分割表,除了第 0 磁区为了维持与 MBR 的兼容性会塞入格式类似于 MBR 的保护性 MBR (Protective MBR)、第 1 磁区会放置 GUID 磁盘分割表的表头 (包含分割表位置、定义磁盘可用空间、分割表目前的项目数量等信息) 之外,GUID 磁盘分区表将会使用多个磁盘用于存储磁盘分割表。

根据分配给磁盘分割表的扇区数多寡可以弹性扩增GUID磁盘分割表所能支持的磁盘分割数量,但在Windows系统中固定为使用32个磁区,因此在Windows系统中采用GPT格式的硬盘实际用于存放数据的磁区是自第35个磁区起(LBA编号为34)。
保护性 MBR (Protective MBR)
出于兼容性与避免数据损毁上的考虑,在 GPT 格式硬盘当中第一个扇区 (LBA 编号 0) 依然会摆放一组格式基本上与传统 MBR 一致的数据,当中除了与传统 MBR 一样会容纳初始启动程序之外还会包含一个类型标示为 0xEE 的特殊分割区,作为该硬盘采用 GPT 格式的识别依据。
这样的做法有什么意义呢? 实际上主要是为了让不支持GPT格式的操作系统在读取GPT格式的硬盘时会侦测到一个类型不明的磁盘分割区,从而避免系统误以为该硬盘为空白硬盘而径自使用导致该硬盘上的数据产生毁损,并且也避免使用者在不支持GPT格式的操作系统下因看不见依循 GPT 格式规范所建立的分割区而意外将这些分割区覆盖或移除。
GUID 磁盘分割表头 (GPT Header)
GPT 格式磁盘上的第二个扇区 (LBA 编号 1) 则固定作为 GUID 磁盘分割表的表头使用,包含了 GPT 版本识别、表头位置与可用空间的起点与终点等信息,此外为了避免 GUID 磁盘分割表表头损毁,在 GPT 格式规范中会将此磁区内的所有信息复制一份放在硬盘上的最后一个磁区中。
位置 | 长度 | 内容 |
00H – 07H | 8 bytes | EFI PART (固定标识标示) |
08H – 11H | 4 bytes | GPT 版本标示 |
12H – 15H | 4 bytes | 表头长度 |
16H – 19H | 4 bytes | 表头的 CRC32 校验码 |
20H – 23H | 4 bytes | 固定为0 |
24H – 31H | 8 bytes | 当前表头所在的磁区 LBA 定址 |
32H – 39H | 8 bytes | 另一表头所在的磁区 LBA 定址 |
40H – 47H | 8 bytes | 首个可用磁区的 LBA 定址 |
48H – 55H | 8 bytes | 最后可用磁区的 LBA 定址 |
56H – 71H | 16 bytes | 此硬盘的 GUID |
72H – 79H | 8 bytes | 首个分割表项目所在的 LBA 定址 |
80H – 83H | 4 bytes | 分割表项目数量 |
84H – 87H | 4 bytes | 单一分割表项目的长度 |
88H – 91H | 4 bytes | 分割表项目的 CRC32 校验码 |
92H 起 | 剩余空间 | 全数填 0 |
GPT 磁盘分志( Partition Entries)
自第三个磁区(LBA编号2)起即为存放GPT磁盘分割纪录的位置,不同于MOR当中每笔磁盘分割纪录的长度仅有16 bytes,由于GPT格式内的磁盘分割纪录不再需要与初始启动程序共享第一扇区的空间,因此GPT格式中各笔磁盘分割纪录的长度一举大幅提高至128 bytes(每个磁区所能存放的磁盘分割纪录则仍然维持四笔, 但可透过增加用于存储磁盘分志之扇区数量的方式来弹性增加可建立之磁盘分记录数量,在Windows系统中目前固定为32个磁区,因此可存放多达128笔磁盘分志)。
除了可用的纪录空间增加外,GPT 格式中的磁盘分割纪录同时还舍弃了 CHS 定址字段,改为采用加长一倍的 LBA 定址来标示磁盘分割区的起点与终点,大幅提升了其所能处理的磁盘空间大小 (在使用 512 bytes 大小磁区的情况下可高达 9.44 ZB)。
此外,与 GUID 磁盘分割表头相同,在 GPT 格式中为了避免磁盘分割表遭遇损毁的情况,在设计上会将所有存放磁盘分割纪录的磁区内的所有信息复制一份,依序自硬盘的倒数第二个磁区往反向放置在硬盘的最末端。
位置 | 长度 | 内容 |
00H – 15H | 16 bytes | 磁盘分类型 ( GUID 格式) |
16H – 31H | 16 bytes | 磁盘分区的唯一标识符 ( GUID 格式) |
32H – 39H | 8 bytes | 起点磁区 LBA 定址 |
40H – 47H | 8 bytes | 终点扇区 LBA 定址 |
48H – 55H | 8 bytes | 磁盘分区特性标示 |
56H – 127H | 72 bytes | 磁盘分区名称 |
操作系统对 GPT 格式硬盘的支持
从前面的叙述我们大致可以知道 GPT 格式几乎在各方面都比传统的 MBR 磁盘分割表来得强大,但由于是较晚提出的标准,因此并非所有操作系统都能正常搭配 GPT 格式的硬盘使用,有部分较老旧的操作系统可能仅能支持对 GPT 格式的硬盘进行一般的读写操作,但并无法直接自 GPT 格式的磁盘分割启动。
操作系统 | 读写操作 | 启动磁盘 | 备注 |
Windows 2000 或更早版本 | 不支持 | 不支持 | |
Windows XP (32 位) | 不支持 | 不支持 | |
Windows Server 2003 (32 位) | 支持 | 不支持 | 自 Service Pack 1 起支援 |
Windows Server 2003 (64 位) | 支持 | 仅 IA64 版本支持 | 自 Service Pack 1 起支援 |
Windows Vista / Server 2008 (32 位元) | 支持 | 不支持 | |
Windows Vista / Server 2008 (64 位) | 支持 | 支持 | |
Windows 7 (32 位) | 支持 | 不支持 | |
Windows 7 / Server 2008 R2 (64 位元) | 支持 | 支持 | |
Windows 8 (32 位) | 支持 | 不支持 | |
Windows 8 / Server 2012 (64 位) | 支持 | 支持 | |
Windows 8.1 (32 位) | 支持 | 不支持 | |
Windows 8.1 / Server 2012 R2 (64 位元) | 支持 | 支持 | |
Windows 10 (32 位) | 支持 | 不支持 | |
Windows 10 / Server 2016 (64 位) | 支持 | 支持 | |
Windows Server 2019 (64 位) | 支持 | 支持 | |
Windows 11 (64 位) | 支持 | 支持 | |
Windows Server 2022 (64 位) | 支持 | 支持 |
