GUID 分区表

From Wikipedia, the free encyclopedia

Jump to: navigation, search

In computer hardware, GUID 分区表 (GPT) 是物理硬盘分区表的一种标准. 它是由Intel提出的用于替代从IBM PC上遗留下来的古老 PC BIOSExtensible Firmware Interface (EFI)  标准的一部分. EFI 使用 GPT 而 BIOS 使用 Master Boot Record (MBR).

Diagram illustrating the layout of the GUID Partition Table scheme.  Each logical block (LBA) is 512 bytes in size.  LBA addresses that are negative indicate position from the end of the volume, with −1 being the last addressable block.
Diagram illustrating the layout of the GUID Partition Table scheme. Each logical block (LBA) is 512 bytes in size. LBA addresses that are negative indicate position from the end of the volume, with −1 being the last addressable block.

Contents

[edit] 特点

现今的 PC BIOS 构架使用 Master Boot Record (MBR) 来进行磁盘的初始化过程. MBR 开头是一段 Master Boot Code 主启动代码, 包含一段用于识别和引导激活的启动分区的可执行二进制文件. PC BIOS的替代物, EFI, 自身就带有这种能力同时还保留了向下兼容性, GPT 保留 MBR 项在磁盘的第一个扇区,然后是主分区表头- GPT的真正的开头.

GPT 是用现代的 logical block addressing (LBA) 来代替 MBR 使用的 cylinder-head-sector (CHS) 地址. 传统 MBR 信息包含在 LBA 0,  GPT 位于 LBA 1, 分区表紧随其后. 在64位 Windows 操作系统中, 16,384 字节, 或者说 32 扇区, 被预留给 GPT, 因此 LBA 34 是磁盘上第一个可以使用的扇区.

GPT 同时支持冗余. GPT 表头和分区表同时被写在磁盘的开头和结尾.

[edit] 传统 MBR (LBA 0)

磁盘开头的 MBR 的目的是防止基于MBR的磁盘工具错误识别或者写入 GPT 磁盘. 其将整个的 GPT 分区描述成一个单个分区. 这个分区的系统 ID 被设置为 0xEE, 以指明其使用 GPT. 因此, EFI 忽略 MBR. 一些 32-位 不能支持 GPT 磁盘的操作系统只识别 ID 而将整个盘识别为不可用的 GPT 磁盘. 旧式的操作系统将该磁盘认作是包含一个未知格式的分区并且没有可用空间, 并且通常他们会拒绝修改该分区除非有显式的的要求删除该分区. 这样的结构用以防止意外的清除分区数据.

[edit] 分区表头 (LBA 1)

分区表头定义了可以被用户使用的区块. 它同时也定义了分区表中分区项的数量和大小. 在 64-位 Windows Server 2003 计算机中, 保留有 128 个分区项, 每个长 128 字节. 因此, 最多可以创建 128 个分区.

表头包含了磁盘的 GUID (全局唯一标识). 其记录了其自身的大小和位置 (通常在 LBA 1) 以及第二个 GPT 表头和分区表的位置 (通常在磁盘的最后一个扇区). 重要的是, 它还包含一个对其自身和分区表的 CRC32 校验码, 在启动时用于 EFI 的验证. 由于 EFI 使用并且验证这个校验码, 所以不要使用 8 进制编辑器来修改 GPT. 这样的修改会导致校验码失效. 这种情况下, EFI 会使用第二个 GPT 覆盖重写第一个, 或者, 如果两个 GPT 都包含无效校验码, 将无法读写磁盘.

Partition table format
偏移 长度 内容
0 8 bytes 签名 ("EFI PART", 45 46 49 20 50 41 52 54)
8 4 bytes 版本号 (For version 1.0, the value is 00 00 01 00)
12 4 bytes 表头大小 (in bytes, always 5C 00 00 00 meaning 92 bytes)
16 4 bytes 表头的CRC32校验值 (cyclic redundancy check)
20 4 bytes 预留, 必须为0
24 8 bytes 主 LBA (这个 LBA, 通常为 1)
32 8 bytes 备份 LBA (通常与磁盘最后的 LBA 相同)
40 8 bytes 第一个对分区可用的 LBA (分区表最后的 LBA + 1)
48 8 bytes 最后一个可用的 LBA (备份 LBA - 分区表大小 - 1)
56 16 bytes 磁盘 GUID (在类UNIX系统中被称为 UUID)
72 8 bytes 分区项起始 LBA (通常紧靠表头, 2)
80 4 bytes 分区项数量
84 4 bytes 一个分区项大小 (通常为 128)
88 4 bytes 分区列表的 CRC32 值
92 420 bytes 预留, 必须为0
512 TOTAL

[edit] 分区项 (LBA 2–33)

分区项是简单的由前到后的. 开头的16 字节指明了分区类型 GUID. 比如说, EFI系统分区的 GUID 是 {C12A7328-F81F-11D2-BA4B-00A0C93EC93B}. 第二个 16 字节该分区唯一的 GUID. 开头和结尾的 64-位 LBA a也记录于此, 以及分区名称和属性. 不幸的是, there is no central registry for GUID partition type designators, either de jure or de facto.

GUID partition entry format
偏移 长度 内容
0 16 bytes 分区类型 GUID
16 16 bytes 分区唯一 GUID
32 8 bytes 起始 LBA (little-endian)
40 8 bytes 结束 LBA (inclusive, usually odd)
48 8 bytes 属性标志 (e.g. bit 60 denotes read-only)
56 72 bytes 分区名称 (36 UTF-16LE code units)
128 总计

[edit] Partition type GUIDs

Assoc. OS Partition type Globally-Unique Identifier (GUID)[1]
(None) Unused entry 00000000-0000-0000-0000-000000000000
MBR partition scheme 024DEE41-33E7-11D3-9D69-0008C781F39F
EFI System Partition C12A7328-F81F-11D2-BA4B-00A0C93EC93B
BIOS Boot Partition 21686148-6449-6E6F-744E-656564454649
Windows Microsoft Reserved Partition E3C9E316-0B5C-4DB8-817D-F92DF00215AE
Basic Data Partition[2] EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
Logical Disk Manager metadata partition 5808C8AA-7E8F-42E0-85D2-E1E90434CFB3
Logical Disk Manager data partition AF9B60A0-1431-4F62-BC68-3311714A69AD
HP-UX Data partition 75894C1E-3AEB-11D3-B7C1-7B03A0000000
Service Partition E2A1E728-32E3-11D6-A682-7B03A0000000
Linux Data partition[2] EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
RAID partition A19D880F-05FC-4D3B-A006-743F0F84911E
Swap partition 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
Logical Volume Manager (LVM) partition E6D6D379-F507-44C2-A23C-238F2A3DF928
Reserved 8DA63339-0007-60C0-C436-083AC8230908
FreeBSD Boot partition 83BD6B9D-7F41-11DC-BE0B-001560B84F0F
Data partition 516E7CB4-6ECF-11D6-8FF8-00022D09712B
Swap partition 516E7CB5-6ECF-11D6-8FF8-00022D09712B
Unix File System (UFS) partition 516E7CB6-6ECF-11D6-8FF8-00022D09712B
Vinum volume manager partition 516E7CB8-6ECF-11D6-8FF8-00022D09712B
ZFS partition 516E7CBA-6ECF-11D6-8FF8-00022D09712B
Mac OS X Hierarchical File System (HFS+) partition 48465300-0000-11AA-AA11-00306543ECAC
Apple UFS 55465300-0000-11AA-AA11-00306543ECAC
ZFS[3] 6A898CC3-1DD2-11B2-99A6-080020736631
Apple RAID partition 52414944-0000-11AA-AA11-00306543ECAC
Apple RAID partition, offline 52414944-5F4F-11AA-AA11-00306543ECAC
Apple Boot partition 426F6F74-0000-11AA-AA11-00306543ECAC
Apple Label 4C616265-6C00-11AA-AA11-00306543ECAC
Apple TV Recovery partition 5265636F-7665-11AA-AA11-00306543ECAC
Solaris Boot partition 6A82CB45-1DD2-11B2-99A6-080020736631
Root partition 6A85CF4D-1DD2-11B2-99A6-080020736631
Swap partition 6A87C46F-1DD2-11B2-99A6-080020736631
Backup partition 6A8B642B-1DD2-11B2-99A6-080020736631
/usr partition[3] 6A898CC3-1DD2-11B2-99A6-080020736631
/var partition 6A8EF2E9-1DD2-11B2-99A6-080020736631
/home partition 6A90BA39-1DD2-11B2-99A6-080020736631
EFI_ALTSCTR 6A9283A5-1DD2-11B2-99A6-080020736631
Reserved partition 6A945A3B-1DD2-11B2-99A6-080020736631
6A9630D1-1DD2-11B2-99A6-080020736631
6A980767-1DD2-11B2-99A6-080020736631
6A96237F-1DD2-11B2-99A6-080020736631
6A8D2AC7-1DD2-11B2-99A6-080020736631
NetBSD[4] Swap partition 49F48D32-B10E-11DC-B99B-0019D1879648
FFS partition 49F48D5A-B10E-11DC-B99B-0019D1879648
LFS partition 49F48D82-B10E-11DC-B99B-0019D1879648
RAID partition 49F48DAA-B10E-11DC-B99B-0019D1879648
concatenated partition 2DB519C4-B10F-11DC-B99B-0019D1879648
encrypted partition 2DB519EC-B10F-11DC-B99B-0019D1879648
  1. ^  The GUIDs in this table are written assuming a little-endian byte order. For example, the GUID for an EFI System partition is written as C12A7328-F81F-11D2-BA4B-00A0C93EC93B here, which corresponds to the 16 byte sequence 28 73 2A C1 1F F8 D2 11 BA 4B 00 A0 C9 3E C9 3B — only the first three blocks are byte-swapped.
  2. a b  Linux and Windows use the same GUID for their respective data partitions.
  3. a b  The GUID for /usr on Solaris is used as a generic GUID for ZFS by Mac OS X.
  4. ^  Definitions are in src/sys/sys/disklabel_gpt.h. NetBSD had used the FreeBSD GUIDs before unique NetBSD-specific GUIDs were created.

[edit] See also

[edit] External links