2023年11月25日发(作者:)

GPT磁盘及ID号介绍

全局唯⼀标识分区表(GUID Partition Table,缩写:GPT)是⼀个物理硬盘的分区结构。它是

可扩展固件接⼝标准的⼀部分,⽤来替代BIOS中的主引导记录分区表。但因为MBR分区表不⽀

持容量⼤于2TB的分区,所以也有⼀些BIOS系统为了⽀持⼤容量硬盘⽽⽤GPT分区表取代MBR

分区表。GPT分区表⽀持最多128PB的硬盘和分区。

EFI介绍:

了解GUID分区表之前我们先要了解⼀下什么是EFI(Extensible Firmware Interface 可扩展固件接

)

含义EFI的产⽣

BIOS技术的兴起源于IBM PC/AT机器的流⾏以及第⼀台由康柏公司研制⽣产的克隆”PC。在PC

启动的过程中,BIOS担负着初始化硬件,检测硬件功能,以及引导操作系统的责任,在早

期,BIOS还提供⼀套运⾏时的服务程序给操作系统及应⽤程序使⽤。BIOS程序存放于⼀个掉电

后内容不会丢失的只读存储器中,系统加电时处理器的第⼀条指令的地址会被定位到BIOS的存

储器中,便于使初始化程序得到执⾏。

众所周知,英特尔在近⼆⼗年来引领以x86系列处理器为基础的PC技术潮流,它的产品如

CPU,芯⽚组等在PC⽣产线中占据绝对领导的位置。因此,不少⼈认为这⼀举动显⽰了英特尔

公司欲染指固件产品市场的野⼼。事实上,EFI技术源于英特尔安腾处理器(Itanium)平台的推

出。安腾处理器是英特尔瞄准服务器⾼端市场投⼊近⼗年研发⼒量设计产⽣的与x86系列完全不

同的64位新架构。在x86系列处理器进⼊32位的时代,由于兼容性的原因,新的处理器(i80386)

保留了16位的运⾏⽅式(实模式),此后多次处理器的升级换代都保留了这种运⾏⽅式。甚⾄在含

64位扩展技术的⾄强系列处理器中,处理器加电启动时仍然会切换到16位的实模式下运⾏。英

特尔将这种情况归咎于BIOS技术的发展缓慢。⾃从PC兼容机⼚商通过净室的⽅式复制出第⼀套

BIOS源程序,BIOS就以16位汇编代码,寄存器参数调⽤⽅式,静态链接,以及1MB以下内存

固定编址的形式存在了⼗⼏年。虽然由于各⼤BIOS⼚商近年来的努⼒,有许多新元素添加到产

品中,如PnP BIOSACPI,传统USB设备⽀持等等,但BIOS的根本性质没有得到任何改变。

这迫使英特尔在开发更新的处理器时,都必须考虑加进使效能⼤⼤降低的兼容模式。有⼈曾打

了⼀个⽐喻:这就像保时捷新⼀代的全⾃动档跑车被⼈⽣套上去⼀个蹩脚的挂档器。

然⽽,安腾处理器并没有这样的顾虑,它是⼀个新⽣的处理器架构,系统固件和操作系统之间

的接⼝都可以完全重新定义。并且这⼀次,英特尔将其定义为⼀个可扩展的,标准化的固件接

⼝规范,不同于传统BIOS的固定的,缺乏⽂档的,完全基于经验和晦涩约定的⼀个事实标准。

基于EFI的第⼀套系统产品的出现⾄今已经有五年的时间,如今,英特尔试图将成功运⽤在⾼端

服务器上的技术推⼴到市场占有率更有优势的PC产品线中,并承诺在2006年间会投⼊全⼒的技

术⽀持。

⽐较EFIBIOS

⼀个显著的区别就是EFI是⽤模块化,C语⾔风格的参数堆栈传递⽅式,动态链接的形式构建的

系统,较BIOS⽽⾔更易于实现,容错和纠错特性更强,缩短了系统研发的时间。它运⾏于32

64位模式,乃⾄未来增强的处理器模式下,突破传统16位代码的寻址能⼒,达到处理器的最

⼤寻址。它利⽤加载EFI驱动的形式,识别及操作硬件,不同于BIOS利⽤挂载实模式中断的⽅

式增加硬件功能。后者必须将⼀段类似于驱动的16位代码,放置在固定的0x000C0000

0x000DFFFF之间存储区中,运⾏这段代码的初始化部分,它将挂载实模式下约定的中断向量

向其他程序提供服务。例如,VGA图形及⽂本输出中断(INT 10h),磁盘存取中断服务(INT 13h)

等等。由于这段存储空间有限(128KB)BIOS对于所需放置的驱动代码⼤⼩超过空间⼤⼩的情

况⽆能为⼒。另外,BIOS的硬件服务程序都已16位代码的形式存在,这就给运⾏于增强模式的

操作系统访问其服务造成了困难。因此BIOS提供的服务在现实中只能提供给操作系统引导程序

MS-DOS类操作系统使⽤。⽽EFI系统下的驱动并不是由可以直接运⾏在CPU上的代码组成

的,⽽是⽤EFI Byte Code编写⽽成的。这是⼀组专⽤于EFI驱动的虚拟机器指令,必须在EFI

动运⾏环境(Driver Execution Environment,或DXE)下被解释运⾏。这就保证了充分的向下兼

容性,打个⽐⽅说,⼀个带有EFI驱动的扩展设备,既可以将其安装在安腾处理器的系统中,也

可以安装于⽀持EFI的新PC系统中,⽽它的EFI驱动不需要重新编写。这样就⽆需对系统升级带

来的兼容性因素作任何考虑。另外,由于EFI驱动开发简单,所有的PC部件提供商都可以参

与,情形⾮常类似于现代操作系统的开发模式,这个开发模式曾使Windows在短短的两三年时

间内成为功能强⼤,性能优越的操作系统。基于EFI的驱动模型可以使EFI系统接触到所有的硬

件功能,在操作操作系统运⾏以前浏览万维⽹站不再是天⽅夜谭,甚⾄实现起来也⾮常简单。

这对基于传统BIOS的系统来说是件不可能的任务,在BIOS中添加⼏个简单的USB设备⽀持都曾

使很多BIOS设计师痛苦万分,更何况除了添加对⽆数⽹络硬件的⽀持外,还得凭空构建⼀个16

位模式下的TCP/IP协议栈。

⼀些⼈认为BIOS只不过是由于兼容性问题遗留下来的⽆⾜轻重的部分,不值得为它花费太⼤的

升级努⼒。⽽反对者认为,当BIOS的出现制约了PC技术的发展时,必须有⼈对它作必要的改

变。

EFI和操作系统

EFI在概念上⾮常类似于⼀个低阶的操作系统,并且具有操控所有硬件资源的能⼒。不少⼈感觉

它的不断发展将有可能代替现代的操作系统。事实上,EFI的缔造者们在第⼀版规范出台时就将

EFI的能⼒限制于不⾜以威胁操作系统的统治地位。⾸先,它只是硬件和预启动软件间的接⼝规

范;其次,EFI环境下不提供中断的访问机制,也就是说每个EFI驱动程序必须⽤轮询的⽅式来

检查硬件状态,并且需要以解释的⽅式运⾏,较操作系统下的驱动效率更低;再则,EFI系统不

提供复杂的存储器保护功能,它只具备简单的存储器管理机制,具体来说就是指运⾏在x86处理

器的段保护模式下,以最⼤寻址能⼒为限把存储器分为⼀个平坦的段,所有的程序都有权限存

取任何⼀段位置,并不提供真实的保护服务。当EFI所有组件加载完毕时,系统可以开启⼀个类

似于操作系统Shell的命令解释环境,在这⾥,⽤户可以调⼊执⾏任何EFI应⽤程序,这些程序可

以是硬件检测及除错软件,引导管理,设置软件,操作系统引导软件等等。理论上来说,对于

EFI应⽤程序的功能并没有任何限制,任何⼈都可以编写这类软件,并且效果较以前MS-DOS

的软件更华丽,功能更强⼤。⼀旦引导软件将控制权交给操作系统,所有⽤于引导的服务代码

将全部停⽌⼯作,部分运⾏时代服务程序还可以继续⼯作,以便于操作系统⼀时⽆法找到特定

设备的驱动程序时,该设备还可以继续被使⽤。

EFI的组成

⼀般认为,EFI由以下⼏个部分组成:

1. Pre-EFI初始化模块

2. EFI驱动执⾏环境

3. EFI驱动程序

4.兼容性⽀持模块(CSM)

5. EFI⾼层应⽤

6. GUID磁盘分区

各部分功能

在实现中,EFI初始化模块和驱动执⾏环境通常被集成在⼀个只读存储器中。Pre-EFI初始化程

序在系统开机的时候最先得到执⾏,它负责最初的CPU,主桥及存储器的初始化⼯作,紧接着

载⼊EFI驱动执⾏环境(DXE)。当DXE被载⼊运⾏时,系统便具有了枚举并加载其他EFI驱动的

能⼒。在基于PCI架构的系统中,各PCI桥及PCI适配器的EFI驱动会被相继加载及初始化;这

时,系统进⽽枚举并加载各桥接器及适配器后⾯的各种总线及设备驱动程序,周⽽复始,直到

最后⼀个设备的驱动程序被成功加载。正因如此,EFI驱动程序可以放置于系统的任何位置,只

要能保证它可以按顺序被正确枚举。例如⼀个具PCI总线接⼝的ATAPI⼤容量存储适配器,其

EFI驱动程序⼀般会放置在这个设备的符合PCI规范的扩展只读存储器(PCI Expansion ROM)

中,当PCI总线驱动被加载完毕,并开始枚举其⼦设备时,这个存储适配器旋即被正确识别并加

载它的驱动程序。部分EFI驱动程序还可以放置在某个磁盘的EFI专⽤分区中,只要这些驱动不

是⽤于加载这个磁盘的驱动的必要部件。在EFI规范中,⼀种突破传统MBR磁盘分区结构限制的

GUID磁盘分区系统(GPT)被引⼊,新结构中,磁盘的分区数不再受限制(MBR结构下,只能存

4个主分区),并且分区类型将由GUID来表⽰。在众多的分区类型中,EFI系统分区可以被EFI

系统存取,⽤于存放部分驱动和应⽤程序。很多⼈担⼼这将会导致新的安全性因素,因为EFI

统⽐传统的BIOS更易于受到计算机病毒的攻击,当⼀部分EFI驱动程序被破坏时,系统有可能

⾯临⽆法引导的情况。实际上,系统引导所依赖的EFI驱动部分通常都不会存放在EFIGUID

区中,即使分区中的驱动程序遭到破坏,也可以⽤简单的⽅法得到恢复,这与操作系统下的驱

动程序的存储习惯是⼀致的。CSM是在x86平台EFI系统中的⼀个特殊的模块,它将为不具备

EFI引导能⼒的操作系统提供类似于传统BIOS的系统服务。

EFI的发展

英特尔⽆疑是推⼴EFI的积极因素,近年来由于业界对其认识的不断深⼊,更多的⼚商正投⼊这

⽅⾯的研究。包括英特尔,AMD在内的⼀些PC⽣产⼚家联合成⽴了联合可扩展固件接⼝论坛,

它将在近期推出第⼀版规范。这个组织将接⼿规划EFI发展的重任,并将英特尔的EFI框架解释

为这个规范的⼀个具体实现。另外,各⼤BIOS提供商如Phoenix, AMI等,原先被认为是EFI发展

的阻碍⼒量,现在也不断的推出各⾃的解决⽅案。分析⼈⼠指出,这是由于BIOS⼚商在EFI

构中重新找到了诸如Pre-EFI启动环境之类的市场位置,然⽽,随着EFIPC系统上的成功运

⽤,以及英特尔新⼀代芯⽚组的推出,这⼀部分市场份额将会不出意料的在英特尔的掌控之

中。

引⼊主题开始了解GPT分区表,⾸先简要的介绍⼀下GPT分区的⼀些特点:

MBR硬盘中,分区信息直接存储于主引导记录(MBR)中(主引导记录中还存储着系统的引导

程序)。但在GPT硬盘中,分区表的位置信息储存在GPT头中。但出于兼容性考虑,硬盘的第

⼀个扇区仍然⽤作MBR,之后才是GPT头。

跟现代的MBR⼀样,GPT也使⽤逻辑区块地址(LBA)取代了早期的CHS寻址⽅式。传统MBR

信息存储于LBA 0GPT头存储于LBA 1,接下来才是分区表本⾝。64Windows操作系统使⽤

16,384字节(或32扇区)作为GPT分区表,接下来的LBA 34是硬盘上第⼀个分区的开始。

苹果公司曾经警告说:不要假定所有设备的块⼤⼩都是512字节。⼀些现代的存储设备如固态

硬盘可能使⽤1024字节的块,⼀些磁光盘(MO)可能使⽤2048字节的扇区(但是磁光盘通常

是不进⾏分区的)。⼀些硬盘⽣产商在计划⽣产4096字节⼀个扇区的硬盘(⽬前市⾯上西部数

据就有4096字节的⼀个扇区),但截⾄2010年初,这种新硬盘使⽤固件对操作系统伪装成512

字节⼀个扇区。

使⽤英特尔架构的苹果机也使⽤GPT

为了减少分区表损坏的风险,GPT在硬盘最后保存了⼀份分区表的副本。

传统MBR (LBA 0)

GPT分区表的最开头,处于兼容性考虑仍然存储了⼀份传统的MBR,⽤来防⽌不⽀持GPT

硬盘管理⼯具错误识别并破坏硬盘中的数据,这个MBR也叫做保护MBR。在⽀持从GPT启动的

操作系统中,这⾥也⽤于存储第⼀阶段的启动代码。在这个MBR中,只有⼀个标识为0xEE的分

区,以此来表⽰这块硬盘使⽤GPT分区表。不能识别GPT硬盘的操作系统通常会识别出⼀个未

知类型的分区,并且拒绝对硬盘进⾏操作,除⾮⽤户特别要求删除这些分区。这就避免了意外

删除分区的危险。另外,能够识别GPT分区表的操作系统会检查保护MBR中的分区表,如果分

区类型不是0xEE或者MBR分区表中有多个项,也会拒绝对硬盘进⾏操作。

在使⽤MBR/GPT混合分区表的硬盘中,这部分存储了GPT分区表的⼀部分分区(通常是前四个

分区),可以使不⽀持从GPT启动的操作系统从这个MBR启动,启动后只能操作MBR分区表中

的分区。如Boot Camp就是使⽤这种⽅式启动Windows

分区表头 (LBA 1)

偏移字节长度说明

0x008签名,固定为ASCII “EFI PART”,16进制表⽰0x54524

0x084版本号,⽬前的版本为V1.016进制表⽰0x00010000

0x0C4分区表头的⼤⼩(单位是字节,通常是92字节,即 5C 00 00 00

0x104GPT头中字节的CRC32校验

0x144固定值00 00 00 00

0x188当前LBA(这个分区表头的位置)

0x208备份LBA(另⼀个分区表头的位置)

0x288第⼀个可⽤于分区的LBA(主分区表的最后⼀个LBA + 1

0x308最后⼀个可⽤于分区的LBA(备份分区表的最后⼀个LBA− 1

0x3816磁盘GUID

0x488分区表项的起始LBA

0x504分区表项的数量

0x544⼀个分区表项的⼤⼩(通常是128

0x584分区表CRC32校验

0x5C420保留,剩余的字节必须是0(对于512字节LBA的硬盘即是420个字节)

分区表头定义了硬盘的可⽤空间以及组成分区表的项的⼤⼩和数量。在使⽤64Windows

Server 2003的机器上,最多可以创建128个分区,即分区表中保留了128个项,其中每个都是

128字节。(EFI标准要求分区表最⼩要有16,384字节,即128个分区项的⼤⼩)分区表头还记

录了这块硬盘的GUID,记录了分区表头本⾝的位置和⼤⼩(位置总是在LBA 1)以及备份分区

表头和分区表的位置和⼤⼩(在硬盘的最后)。它还储存着它本⾝和分区表的CRC32校验。固

件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错了,

可以使⽤软件从硬盘最后的备份GPT中恢复整个分区表,如果备份GPT也校验错误,硬盘将不

可使⽤。所以GPT硬盘的分区表不可以直接使⽤16进制编辑器修改。

分区表项 (LBA 2–33)

GUID分区表项

偏移字节长度说明

0x0016分区类型GUID

0x1016唯⼀的分区GUID

0x208开始LBA

0x288结束LBA

0x308分区属性

0x3872分区名称 (Unicode)

分区属性

说明

Bit 0 系统分区 00 00 00 00 00 00 00 00

Bit 60 分区只读 00 00 00 00 00 00 00 10

Bit 62 隐藏分区 00 00 00 00 00 00 00 40

Bit 63 不挂载此分区(不分配盘符)00 00 00 00 00 00 00 80

分区类型GUID

相关操作系统分区类型GUID

(None)未使⽤

MBR分区表

EFI系统分区

BIOS引导分区

Windows微软保留分区

基本数据分区

逻辑软盘管理⼯具元数据分区

逻辑软盘管理⼯具数据分区

Windows恢复环境

IBM通⽤并⾏⽂件系统(GPFS)

HP-UX数据分区

服务分区

Mac OS XHFS(HFS+)分区

Solaris启动分区

数据分区

交换分区

UFS分区

en:Vinum volume manager分区

ZFS分区

苹果公司UFS

ZFS

苹果RAID分区

苹果RAID分区,下线

苹果启动分区

Apple Label

Apple TV恢复分区

根分区

交换分区

备份分区

/usr分区

/var分区

/home分区

备⽤扇区

保留分区

516E7CB4-6ECF-11D6-8FF8-00022D09712B

516E7CB5-6ECF-11D6-8FF8-00022D09712B

516E7CB6-6ECF-11D6-8FF8-00022D09712B

516E7CB8-6ECF-11D6-8FF8-00022D09712B

516E7CBA-6ECF-11D6-8FF8-00022D09712B

48465300-0000-11AA-AA11-00306543ECAC

55465300-0000-11AA-AA11-00306543ECAC

6A898CC3-1DD2-11B2-99A6-

52414944-0000-11AA-AA11-00306543ECAC

52414944-5F4F-11AA-AA11-00306543ECAC

426F6F74-0000-11AA-AA11-00306543ECAC

4C616265-6C00-11AA-AA11-00306543ECAC

5265636F-7665-11AA-AA11-00306543ECAC

6A82CB45-1DD2-11B2-99A6-

6A85CF4D-1DD2-11B2-99A6-

6A87C46F-1DD2-11B2-99A6-

6A8B642B-1DD2-11B2-99A6-

6A898CC3-1DD2-11B2-99A6-

6A8EF2E9-1DD2-11B2-99A6-

6A90BA39-1DD2-11B2-99A6-

6A9283A5-1DD2-11B2-99A6-

6A945A3B-1DD2-11B2-99A6-

6A9630D1-1DD2-11B2-99A6-

6A980767-1DD2-11B2-99A6-

6A96237F-1DD2-11B2-99A6-

6A8D2AC7-1DD2-11B2-99A6-

49F48D32-B10E-11DC-B99B-0019D1879648

49F48D5A-B10E-11DC-B99B-0019D1879648

49F48D82-B10E-11DC-B99B-0019D1879648

49F48DAA-B10E-11DC-B99B-0019D1879648

2DB519C4-B10F-11DC-B99B-0019D1879648

2DB519EC-B10F-11DC-B99B-0019D1879648

NetBSD交换分区

FFS分区

LFS分区

RAID分区

concatenated分区

加密分区

GPT分区表使⽤简单⽽直接的⽅式表⽰分区。⼀个分区表项的前16字节是分区类型GUID。例

LinuxIA-64

⼤多数x86架构的⼀些分区⼯具,如fdisk,不⽀

Linux发⾏版

Fedora 8+

Ubuntu 8.04+

10.4.0以后(⼀些

Mac OSx86x86-

功能要到10.4.6

X64

后)

x86x86-No (WorkNo (Work

SolarisSolaris 10以后64inin

SPARCProgress)Progress)

32Windows

x86-64

x86

识。

GPT

gdiskgrub2之类的新⼯具

⽀持GPT

操作系统版本备注

Windows XP(2001-10-25)x86不⽀持

Windows

(2003-04-24)x86不⽀持

Server 2003

WindowsService Pack 1

Server 2003(2005-03-30)

Windows

(2005-07-22)x86

VistaMBR

Windows

(2008-02-27)x86

Server 2008MBR

Windows 7(2009-10-22)x86

64Windows

BIOS/GPTEFI/GPT

启动启动

x86

仅⽀持作为数据盘使⽤,在MBR/GPT

混合硬盘中优先使⽤MBR

MBR/GPT混合硬盘中优先使⽤

MBR/GPT混合硬盘中优先使⽤

MBR/GPT混合硬盘中优先使⽤

MBR

下表列出了⽀持GPT64位版Windows。既包括IA-64架构的服务器版本,也包括x86-64

EM64T架构。

BIOS/GPTEFI/GPT

备注操作系统版本

启动启动

MBR/GPT混合硬盘中优先使

IA-Windows

MBR。可拆卸磁盘仅⽀持

64XP

MBR分区表。

MBR。可拆卸磁盘仅⽀持

MBR/GPT混合硬盘中优先使

MBR分区表。

MBR/GPT混合硬盘中优先使

MBR。默认使⽤GPTIA-64

架构的启动盘必须是GPT硬盘,

x64)分区表。

Windowsx86-

(2005-07-22)

Vista64

Windows

Server(2008-02-27)

2008

Windowsx86-

(2009-10-22)

764

Windows

(2009-10-22) (Server64,

Server

variant of Windows 7)IA-

2008 R2

x86-

64,

IA-

64

x86-

64

MBR/GPT混合硬盘中优先使

MBR

MBR/GPT混合硬盘中优先使

MBR

MBR/GPT混合硬盘中优先使

MBR

MBR/GPT混合硬盘中优先使

MBR

以下是为了⽅便读者⾃⾏分析GPT磁盘结构,本⼈做的WinHex模板,包含“GPT头模板分区

表项模板(使⽤时请将字体加粗部分复制到Windows中的记事本,另存为成*.tpl,放到WinHex

所在⽬录中即可使⽤)

1GPT头模板

template “GUID Partition Table Header”

description “GUID Partition Table Header”

applies_to disk

sector-aligned

requires 0x00 “45 46 49 20 50 41 52 54”

begin

{

read-only char [8] “

签名

hex 4 “ (HEX)”

版本

uint32 “GPT

头⼤⼩字节数

hex 4 “GPTCRC (HEX)”

校验和

int64 “GPTLBA”

分区表起始

uint32 “

分区表项数

uint32 “

每分区表项占⽤字节数

hex 4 “CRC (HEX)”

分区表校验和

hex 420 “ (420Byte HEX)”

保留

}

endsection

end

2、分区表项模板

template “GUID Partition Entry”

description “GUID Partition Entry”

在此为⼴⼤读者献出⼀个⽤于修复GPT磁盘的WinHex脚本,主要⽤于MBR、主GPT头、主分

区表项,损坏的修复,本脚本通过备份的GPT头与备份的分区表项进⾏修复,使⽤之前先判断

备份部分是否正常,脚本如下(使⽤时请将字体加粗部分复制到Windows中的记事本,另存为

*.whs,放到WinHex所在⽬录中即可使⽤):

GPT Header修复(⽤备份修复)

Assign DiskSize GetSize

Goto 0x1B8

Write 0x43C659CF //

磁盘签名

Move 2

Write 0x00000200EEFFFFFF01000000FFFFFFFF

Goto 0x1FE

Write 0x55AA

Goto (DiskSize-512)

Move 32

Read Temp1 8

Move 32

Write 0x0000

Goto (DiskSize-512+32)

Read Temp2 8

Goto (Temp1*512+24)

Write Temp2

Goto (DiskSize-512+24)

Read Temp3 8

Goto (Temp1*512+32)

Write Temp3

Goto (Temp1*512+72)

Write ((Temp1*512+512)/512)

Goto (Temp1*512)

Assign Header CurrentPos

Block Header (Header+91)

CalcHash CRC32 HeaderCRC32

Goto (Temp1*512+16)

Write HeaderCRC32

Save

MessageBox “

修复成功!

Windows GPT

常见问题解答

关于 GPT1. 什么是 GPT 磁盘?

以操作系统不依赖于对齐⽅式。MBR 分区规则很复杂并且规定不明确。例如,柱⾯对齐意味着

每个分区在长度上⾄少要为⼀个柱⾯吗?MBR 分区由⼀个 2字节字段标识,⽽且需要协调以避

免冲突。IBM 最初提供了这种协调⽅案,直到今天还没有权威的分区标识符列表。

另⼀个常⽤的实践是使⽤分区的或隐藏扇区保存特定信息。该实践没有正式⽂件并且会导致难

以调试的系统问题。这些年来,已经对公众发布了很多供应商独有的实现和⼯具,这使⽀持变

得很困难。

3. 为什么需要 GPT?

GPT 磁盘能够实现巨⼤的容量。GPT 磁盘上的分区数量不受临时⽅案(⽐如 MBR Extended

Boot Record (EBR) 定义的容器分区)的限制。

GPT 磁盘分区定义明确并能够完全⾃动识别。平台操作的关键数据被放置在分区中⽽不是未分

区或隐藏扇区中。GPT 磁盘使⽤原始的、备份的分区表存储冗余和 CRC32 字段,以提⾼分区

数据结构的完整性。GPT 分区格式使⽤版本号和容量字段⽀持进⼀步的扩展。

每个 GPT 分区都有独特的标识 GUID 和分区内容类型,所以不需要协调即可防⽌分区标识符冲

突。每个 GPT 分区都有⼀个 36 字符的 Unicode 名称,这意味着任何软件都能够呈现⼀个⼈⼯

可读的分区名称,⽽⽆需了解分区的其他内容。

4. 何处查看关于 GPT 磁盘分区的规范?

Extensible Firmware Interface (EFI) 规范的第 16 章定义了 GPT 格式。可在以下地址中获得该

⽂档:/ technology/ efi/

磁盘需要 EFI 吗?

不需要,GPT 磁盘是⾃动识别的。所有⽤于解释 GPT 磁盘分区⽅案所需的信息完全包含在物理

媒介指定位置的结构中。

6. GPT 磁盘容量有多⼤?

理论上,GPT 磁盘在长度上最⼤可达 2^64 个逻辑块。逻辑块容量⼀般为 512 字节。

最⼤分区(磁盘)容量受操作系统版本的影响。Windows XP Windows Server 2003 的原始

版本中,每个物理磁盘的最⼤容量为 2TB,包括所有分区。对于 Windows Server 2003 SP1

Windows XP x64 版本和以后的版本,⽀持的最⼤原始分区为 18 EB。(Windows ⽂件系统⽬

前的限制为每个 256 TB

7. 每个 GPT 磁盘可以有多少个分区?

规范对分区数量⼏乎没有限制,但是 Windows 实现限制的分区数量为 128 个。GPT 中的分区

条⽬的保留空间⼤⼩会限制分区数量。

8. 磁盘可以同时是 GPT MBR 吗?

不可以。但是,所有的 GTP 磁盘都包含⼀个 Protective MBR

9. 什么是 Protective MBR

Protective MBR 从扇区 0 内开始,在磁盘中先于 GPT 分区表。MBR 包含⼀种横跨整个磁盘的

0xEE 分区。

10. 为什么 GPT 要包含⼀个 Protective MBR

Protective MBR 保护 GPT 磁盘不受以前发布的 MBR 磁盘⼯具(如 Microsoft MS-DOS FDISK

Microsoft Windows NT 磁盘管理器)的危害。这些⼯具不能感知 GPT,也⽆法正确地访问

GPT 磁盘。不能识别 GPT 的旧软件在访问 GPT 磁盘时只解释 Protected MBR。这些⼯具通过

解释 Protected MBR,将 GPT 磁盘看成⼀个封装的(可能⽆法识别)分区,⽽不是错误地当成

⼀个未分区的磁盘。

11. 为什么分区的磁盘上会有⼀个 MBR 呢?

如果出现这种情况,您⼀定是使⽤了只能感知 MRB 的磁盘⼯具访问 GPT 磁盘。参阅上⽂第 8

条⾄第 10 条中的答案。

12. 如果磁盘容量⼤于 MBR 能够报告的最⼤容量,整个磁盘内容会受保护么?

Protective MBR 中的 EE 分区是 MBR 中允许的最⼤容量。

Windows XP 磁盘⽀持

13. Windows XP x64 能在 GPT 磁盘上读、写和启动么?

Windows XP x64 版本只能使⽤ GPT 磁盘进⾏数据操作。只有基于 Itanium Windows 系统才

能从 GPT 分区上启动。

14. Windows XP 32 位版本能在 GPT 磁盘上读、写和启动吗?

不能。32 位版本只能查看 Protective MBREE 分区将不会被装载或公开给应⽤软件。

15. Windows Server 2003 32 位版本能在 GPT 磁盘上读、写和启动吗?

Server Pack 1 以后的所有 Windows 2003 版本都能使⽤ GPT 分区磁盘进⾏数据操作。只有基

Itanium 的系统⽀持启动。

16. Windows Vista Windows Server 2008 能在 GPT 磁盘上读、写和启动吗?

是的,所有版本都能使⽤ GPT 分区磁盘进⾏数据操作。只有基于 EFI 的系统⽀持启动。

17. Windows 2000Windows NT 4 Windows 95/98 能在 GPT 上读、写和启动吗?

不能。旧软件只能查看 Protective MBR

18. 可以在同⼀个系统上混合使⽤和匹配 GPT MBR 磁盘吗?

GPT MBR 可以在⽀持 GPT 的系统上混合使⽤,但如前所述,需要遵循以下限制:

⽀持 EFI 的系统要求启动分区必须位于 GPT 磁盘上。另⼀个硬盘可以是 MBR,也可以是

GPT

MBR GPT 磁盘可以同时存在于⼀个动态磁盘组中。容量设置能扩展到 MBR GPT 磁盘。

·

但是,MBR 柱⾯对齐限制可能会在进⾏ MBR GPT 磁盘镜像和带区操作时引起⼀些⿇烦。

19. 对可移动媒介有哪些要求?

可移动媒介必须是 MBR 超级软盘

20. 什么是超级软盘

没有 GPT MBR 格式化的可移动媒介被称为超级软盘。整个媒介被看成是⼀个分区。

媒介制造商执⾏可移动媒介的任何 MBR 分区。如果媒介不具备 MBR,则只能⽀持⼀个分区。

⽤户很难辨别 MBR 分区的媒介和超级软盘之间的区别。

可移动媒介包括软盘驱动器、JAZ 磁盘、光盘媒介、DVD-ROM CD-ROM。外部总线上的硬

盘驱动器(如 SCSI IEEE 1394)不是可移动媒介。

21. 在对媒介进⾏分区时,Windows XP 64-Bit Edition Version 2003 的默认⾏为是什么?

对于 Windows XP 64-Bit Edition Version 2003 (只针对基于 Itanium 的系统)来说,使⽤ GPT

分区⽅案对固定磁盘分区。要将 GPT 磁盘转换成 MBR 磁盘,必须⾸先删除已有的分区,这会

造成数据的丢失。

22. 在对媒介进⾏分区时,Windows XP 32 位版本、Windows Server 2003 Windows XP

x64 的默认⾏为是什么?

只能使⽤ MBR 磁盘。MBR 磁盘不能转换成 GPT 磁盘。

23. 操作系统上的驱动器名如何映射到 EFI 固件分区?

在驱动器名和分区之间,不存在固有的可以确定彼此的映射。基本数据分区必须由⾃⾝的分区

GUID 识别。

24. 如何创建 ESP 分区?

可以使⽤ EFI 固件实⽤⼯具 Windows 命令⾏实⽤⼯具 创建 ESP

区,也可以使⽤ IOCTL_DISK_SET_DRIVE_LAYOUT 以编程⽅式创建 ESP 分区。

25. 可以对分区进⾏更改吗?

您不能直接更改任何分区标题项。不要使⽤磁盘⼯具或实⽤⼯具做任何转换或更改。

26. 对于可分离磁盘,Windows XP ⽀持什么分区⽅案?

可分离磁盘⼀般可以在机器之间移植,有时在操作系统上不可⽤。IEEE 1394 磁盘就是⼀个可

分离磁盘的⽰例,最终⽤户可以轻松断开连接;另⼀个⽰例是 Microsoft Cluster Services

(MSCS) 共享磁盘,它可以在群集的节点间移动。

Windows XP 仅⽀持在可分离磁盘上进⾏ MBR 分区。有关可移动媒介的更多信息,请参阅问题

19-21Windows 的更⾼版本⽀持在可分离磁盘上进⾏ GPT 分区。

Windows GPT 需要的分区EFI 系统分区27. 什么是 EFI 系统分区 (ESP)

ESP 包含 NTLDRHAL 和其他启动系统所需的⽂件,如驱动程序。分区 GUID 定义

ESP

DEFINE_GUID (PARTITION_SYSTEM_GUID, 0xC12A7328L, 0xF81F, 0x11D2, 0xBA, 0x4B,

0x00, 0xA0, 0xC9, 0x3E, 0xC9, 0x3B)28. 只有 GPT 磁盘具备 ESP 吗?不,MBR 磁盘也可以

具备 ESPEFI 指定从 GPT MBR 上启动。MBR 磁盘上的 ESP 由分区类型 0xEF 标识。但

是,Windows 不⽀持从 MBR 磁盘或 0xEF 分区上启动 EFI

29. ESP 有多⼤?ESP ⼤约为 100 MB

30. ⼀个磁盘可以有两个 ESP 吗?

不能创建也不⽀持这样的配置。

31. 那么,在两个不同磁盘上的两个 ESP 呢?

ESP 分区可以复制以实现⾼可⽤性配置。复制必须⼈⼯进⾏,⽽且在使⽤软件卷时,内容必须

⼈⼯实现同步。硬件供应商可以提供针对⾼可⽤性的附加解决⽅案。ESP 分区不能⽣成镜像。

32. Microsoft ESP 中放了什么?

Microsoft ESP 中放置了 HAL、加载器和其他启动操作系统所需的⽂件。

33. ESP 应该放在磁盘的什么位置?

ESP 应该放在磁盘的⾸要位置。当没有体系结构要求时,存在充⾜的理由证明为什么将 ESP

在⾸要位置是有益的。主要的原因在于,当 ESP 逻辑上位于您想要跨越的两个数据分区之间

时,跨越卷是不可能实现的。

34. 系统或设备制造商应该在 ESP 中放置什么?

ESP 应该只包括⽤于启动操作系统的⽂件,在操作系统启动前运⾏的平台⼯具,或者操作系统

启动前必须访问的⽂件,例如在执⾏预启动系统维护时。其他操作系统运⾏时所需的附加⽂件

或诊断信息不应该放在 ESP 中。需要明确的是:ESP 的空间是有限的系统资源,它的主要作⽤

是为启动操作系统必需的⽂件提供存储空间。

35. 系统制造商应该将平台诊断⽂件或其他附加⽂件放在哪⾥?

对于系统制造商来说,⾸选的是将附加内容放在特定于 OEM 的分区中。如 MBR OEM 分区⼀

样,GPT OEM(或其他⽆法识别的 OEM)分区内容不是公开的(给出驱动器名或在卷列表中

返回)。⽤户需要注意,删除这个分区会导致操作系统⽆法运⾏。特定于 OEM 的分区在磁盘中

应该放在 MSR 之前,ESP 之后。虽然不是体系结构的概念,但是这种布局的好处与将 ESP

·

在⾸要位置⼀样。例如,当特定于 OEM 的分区逻辑上位于您想横跨的两个数据分区之间时,横

跨卷是不可能实现的。

ESP 中的布局是在预操作系统启动环境中执⾏的应⽤程序或⽂件可以做出的⼀种选择。但

是,ESP 是体系结构概念上的共享空间,它提供有限的资源。所以,应该认真安排 ESP 内空间

的使⽤。与预操作系统启动环境⽆关的⽂件不应该放在 ESP 内。

Microsoft 保留分区36. 什么是 Microsoft 保留分区 (MSR)?

Microsoft 保留分区 (MSR) 在每个磁盘驱动器上保留空间以供以后的操作系统软件使⽤。GPT

磁盘不⽀持隐藏的扇区。以前使⽤隐藏扇区的软件组件现在为特定于组件的分区分配部分

MSR。例如,将基本磁盘转换为动态磁盘会导致该磁盘的 MSR 减少,由新创建的分区保留动

态磁盘数据库。MSR 具备 Partition GUID

DEFINE_GUID (PARTITION_MSFT_RESERVED_GUID, 0xE3C9E316L, 0x0B5C, 0x4DB8,

0x81, 0x7D, 0xF9, 0x2D, 0xF0, 0x02, 0x15, 0xAE)37. 哪些磁盘需要 MSR

每个 GPT 磁盘都包含⼀个 MSR。磁盘上分区的顺序应该为 ESP(如果有)、OEM(如果

必须

有)、MSR,后跟基本数据分区。⾮常重要的⼀点是:⼀定要在基本数据分区之前创建 MSR

38. 谁来创建 MSR

必须在磁盘分区信息第⼀次写⼊驱动器的时候创建 MSR。如果分区由制造商进⾏,那么制造商

必须同时创建 MSR。如果分区由 Windows 进⾏,那么在安装时创建 MSR

39. 为什么必须在第⼀次对磁盘分区时创建 MSR

因为在磁盘分区之后,不再有空间⽤来创建 MSR

40. MSR 多⼤?

当最初创建的时候,MSR 的容量决定于磁盘驱动器的容量。

·磁盘驱动器的容量⼩于 16GB 时,MSR 32 MB

·磁盘驱动器⼤于或等于 16 GB 时,MSR 128 MB

MSR 被进⼀步分成其他的分区时,容量变⼩。

Windows GPT ESP 实现41. Windows XP 需要什么分区?

对于 EFI 系统来说,每个可启动驱动器必须包含⼀个 ESP、⼀个 MSR 和⾄少⼀个包含操作系

统的基本数据分区。每个数据驱动器必须包含⾄少⼀个 MSR 和⼀个基本数据分区。

驱动器上的所有基本数据分区都应该是连续的。如上所述,在数据分区之间设置⼀个特定于

OME 的或其他⽆法识别的分区会限制以后的卷扩展。

42. 什么是基本数据分区?

基本数据分区对应主要 MBR 分区 0x6 (FAT)0x7 (NTFS) 0xB (FAT32)。每个基本分区都能

使⽤驱动器名或装⼊点、其他的卷设备对象进⾏装⼊。每个基本数据分区在 Windows 以卷设备

对象的形式呈现,也可以作为⼀个装⼊点或驱动器名。

43. 如何标识基本数据分区?

它有以下分区类型 GUID

DEFINE_GUID (PARTITION_BASIC_DATA_GUID0xEBD0A0A2L0xB9E50x4433

0x870xC0 0x68 0xB60xB70x260x990xC744. 最终⽤户可以查看 ESPMSR

和特定于 OEM 的分区吗?

⽤户不能在 Windows 资源管理器中查看这些分区,也不能查看向旧程序(如 Context

Indexing)公开的可识别系统⽂件。由于 ESP、特定于 OEM 以及其他⽆法识别的分区不具备可

识别的⽂件系统,所以它们只在 Disk Management MMC 管理单元中是可见的。

45. Windows 默认装⼊了什么分区?Windows XP 只公开基本数据分区。其他 FAT ⽂件系统分

区也可以被装⼊,但是不只以编程的⽅式公开。只有基本数据分区分配了驱动器名和装⼊点。

装⼊了 ESP FAT ⽂件系统,但它不是公开的。这使运⾏在 Windows 上的程序能更新 ESP

内容。使⽤ “mountvol /s” ESP 分配⼀个驱动器名能够实现对分区的访问。访问 ESP 需要管

理员权限。

虽然 MSR 以及从 MSR 创建的任何分区都具备可识别的⽂件系统,但它们都不是公开的。

Windows 不能识别任何特定于 OEM 的分区或与其他操作系统相关的分区。具备可识别⽂件系

统的⽆法识别的分区可以当作 ESP 处理。它们将被装⼊,但不是公开的。与 MBR 磁盘不同,

特定于 OEM 的分区和其他操作系统分区之间没有实际的区别,都是⽆法识别的

46. ⽤户如何查看 ESPOEM 以及其他⽆法识别的分区?

⽤户可以使⽤磁盘管理⼯具(如 Disk Management 实⽤⼯具)或者 Windows 命令

⾏来查看。MSR 和任何从 MSR 上创建的分区仅能通过命令⾏查看。

47. 动态磁盘的情形是怎么样的?

动态磁盘使⽤两个不同的 GPT 分区:

⼀个是对应 0x42 MBR 分区的数据容器分区,它使⽤以下 GUIDDEFINE_GUID

·

PARTITION_LDM_DATA_GUID0xAF9B60A0L0x14310x4F620xBC0x68

0x330x11 0x710x4A0x690xAD);

另⼀个是包含动态配置数据库的分区,它使⽤以下 GUID

·DEFINE_GUIDPARTITION_LDM_METADATA_GUID0x5808C8AAL0x7E8F

0x42E00x850xD20xE10xE90x040x340xCF0xB3);

卷是以默认的⽅式在数据容器中创建和装⼊的。同样,这与 0x42 MBR 分区内容是完全相同

的。

48. 将⼀个基本磁盘转换成动态磁盘会出现什么情况?

对于⼀个能够转换成动态磁盘的驱动器来说,驱动器上的所有数据库分区必须是相连的。如果

其他⽆法识别的分区分隔了基本数据分区,则磁盘不能转换。这也是为什么要在基本数据分区

之前创建 MSR 的原因之⼀。

第⼀步是要从 MSR 中分隔出⼀部分⽤来创建配置数据库分区。然后所有不可启动的基本分区被

合并到⼀个数据容器分区内。启动分区会作为分隔的数据容器分区保留下来。这类似于主要分

区的转换。

Windows 2000 不同的是,在 Windows XP 及以后版本的 Windows 操作系统中,基本分区

和扩展分区被优先转换成⼀个单⼀的 0x42 分区,⽽不像在 Windows 2000 中,作为多个独特的

0x42 分区保留下来。

49. ⼀个操作系统能同时包含 GPT MBR 两种动态磁盘吗?

是的。参阅本⽂第 18 条。

50. 如何装⼊某个指定分区?

您可以使⽤下表中所列的⼯具访问不同类型的 GPT 磁盘分区:

Windows固件

磁盘分区⼯具 ESP MSR 数据

磁盘分区⼯具ESP MSR 数据

逻辑磁盘管理器ESP 数据

⽂件资源管理器数据

您也可以使⽤ Microsoft Platform SDK API 开发属于⾃⼰的⼯具,在 GPT 磁盘分区的原语级别

对其进⾏访问。

51. Windows 中如何管理 GPT 磁盘?

GPT MBR 磁盘的管理⽅式是相同的。通过使⽤ 命令⾏实⽤⼯具或磁盘管理

管理单元,可以将磁盘格式成 GPT MBR。可以在 GPT MBR 上创建卷,并且两种磁盘

能够同时出现在同⼀个动态磁盘组中。

52. FTdisk 集是什么情形?

Windows XP 或以后的版本中,不再为 MBR GPT 磁盘提供 FTdisk 集⽀持。唯⼀对逻辑

卷的⽀持通过动态磁盘实现。

53. 磁盘能从 GPT 转换成 MBR 吗?或者相反?

可以,但是磁盘中不得存在分区或卷。磁盘上的数据都将毁坏。

54. GPT 磁盘⽀持什么⽂件系统?

建议在所有基本数据分区和动态卷上使⽤ NTFSWindows 安装和磁盘管理管理单元只提供

NTFS。要避开此缺陷,必须通过 Format 命令⾏⼯具对分区和卷进⾏明确地格式化。

操作 GPT 磁盘及其内容。55. 可以进⾏针对 GPT 磁盘的扇区到扇区复制吗?

不可以,磁盘和分区 GUID 不再是唯⼀的。永远不能执⾏这种操作。您可以进⾏针对 ESP 内容

或基本数据分区的扇区到扇区复制。

56. 有没有使⽤ OPK 映像⼯具复制整个 GPT 磁盘的⽅法?

是的,但是存在⼀些重要的注意事项。OEM 预安装⼯具包 (OPK) 会将磁盘和分区 GUID 初始化

0。在 Windows 第⼀次启动时,操作系统⽣成独特的 GUIDOPK 只⽀持⽣成 ESPMSR

和基本数据分区。

如果应⽤程序已经记录了任何它可能破坏的任何磁盘或分区 GUID。任何由系统制造商或应⽤程

序供应商提供的、依赖 GUID 的应⽤程序、驱动程序或固件执⾏⼯具都应该能够处理那些从

OPK 初始化值变为操作系统⽣成值的 GUID

57. 什么是 MAKE 命令?

它是⼀种⽤来简化操作系统预安装和系统恢复的 OEM ⽅法。这个命令能轻松扩展,以为平台创

默认磁盘配置。例如,系统制造商能够扩展 MAKE 命令,以⾃动对启动驱动器进⾏分区,

以形成⼀个 ESP、⼀个 MSR、⼀个特定于 OEM 的分区和⼀个基本数据分区。

例如,考虑⼀个名为 BOOT_DISK 的磁盘配置。在对业务失败恢复的事件中,MAKE

BOOT_DISK 允许客户对启动磁盘进⾏完全地重分区,还原为出⼚设置。

58. 如果检测到⼀个重复的磁盘或分区 GUID 会出现什么情况?

Windows 将为任何检测到的重复磁盘 GUIDMSR 分区 GUID MSR 基本数据 GUID ⽣成新

GUID。这与在 Windows 2000 中对重复 MBR 签名的处理⽅式类似。动态容器或数据库分区

上的重复 GUID 可能导致不可预知的后果。

GPT分区出现问题后的数据恢复拓飞数据恢复实验室

MBR,主引导记录(Master Boot Record),也就是现有的硬盘分区模式。MBR分区的标准决

定了MBR只⽀持在2TB以下的硬盘,超过2TB的硬盘只能管理2TB!为解决这个⼤问题,微软和

英特尔在EFI⽅案中开发了GPT分区模式。

GPT,全局唯⼀标识分区表(GUID Partition Table)GUID,全局唯⼀标识符 (Globally

Unique Identifier) GPTEFI⽅案的⼀部分,但并不依赖于EFI主板,在BIOS主板的PC中也可

使⽤GPT分区。与MBR最⼤4个分区表项的限制相⽐,GPT对分区数量没有限制,但Windows

最⼤仅⽀持128GPT分区。GPT可管理硬盘⼤⼩达到了18EB(1EB=1024PB=1,048,576TB)

不过NTFS格式最⼤仅⽀持256TB

GPT的分区信息是在分区中,⽽不象MBR⼀样在主引导扇区,为保护GPT不受MBR类磁盘管

理软件的危害,GPT在主引导扇区建⽴了⼀个保护分区(Protective MBR)MBR分区表,这种分

区的类型标识为0xEE,这个保护分区的⼤⼩在Windows下为128MBMac OS X下为200MB

Window磁盘管理器⾥名为GPT保护分区,可让MBR类磁盘管理软件把GPT看成⼀个未知格

式的分区,⽽不是错误地当成⼀个未分区的磁盘

GPT磁盘的0扇区保留着分区表和“55aa”标志,但只使⽤⼀个分区表项,描述⼀个⼤⼩为整个

磁盘、分区类型为0xEE的分区。因为GPT磁盘在EFI部分的结尾处备份了有关磁盘和分区的重

要信息,所以如果仅仅是磁盘前部的EFI信息和分区表遭到破坏,只要将备份的复制回原来的位

置即可。