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

GPTUEFI详解

我们的电脑想要快速开机,需要具备三个条件:一是主板要支持UEFI,二是操作系统要支

UEFI(比如Win8),最后就是硬盘需要采用GPT分区。下面我们就来经历一次二万五千里

长征的学习,仔细剖析一下什么是GPT,什么又是UEFI

GPT是英文GUID Partition Table Format的缩写形式,GUID又是英文Globally Unique

Identifier的缩写形式,所以GPT的中文意思直译为“全局唯一标示磁盘分区表格式”,但也有

人,特别在许多磁盘管理软件中经常又把它称为“GUID分区表格式”,实质都是一样的。在此

我把这些名词说清楚了,以后大家就不要被那些乱七八糟的称法所迷惑了。

1. GPT分区详解

1.1. 保护MBR

保护MBR包含一个DOS分区表(LBA0)只包含一个类型值为0xEE的分区项,在小

2TB的磁盘上,大小为整个磁盘;在更大的磁盘上,它的大小固定为2TB。它的

作用是阻止不能识别GPT分区的磁盘工具试图对其进行格式化等操作,所以该扇区

被称为保护MBR”。实际上,EFI根本不使用这个分区表。

1 GUID分区表模型

2 GUID分区表

1.2. EFI部分

EFI部分又可以分为4个区域:EFI信息区(GPT头)、分区表、GPT分区、

备份区域。

1.1.1. EFI信息区(GPT头)

EFI信息区,也称为GPT头,位于磁盘的1号扇区(LBA1),通常也只占用这

个单一扇区(512字节)。其作用是定义分区表的位置和大小。GPT头还包含头和分

区表的校验和,这样就可以及时发现错误。

EFI信息区的数据结构具体如表1所示。

1 EFI信息区结构

相对字节偏移量

(十六进制)

说明[整数皆以little endian方式表示]

0007 GPT头签名十六进制为“45 46 49 20 50 41 52 54”(对应ASCII码为“EFI PART”)

080B

0C0F GPT头的大小(字节数),通常为“5C 00 00 00”(0x5C),也就是十进制92字节。

1013 GPTCRC校验和(计算时把这个字段本身看做零值)

1417

181F EFI信息区(GPT)的起始扇区号,通常为“01 00 00 00 00 00 00 00”,也就是LBA1

2027

282F GPT分区区域的起始扇区号,通常为“22 00 00 00 00 00 00 00”(0x22),也即是LBA34

3037 GPT分区区域的结束扇区号,通常是倒数第34扇区。

3847

484F

5053

5457

585B

8

4

版本号,目前是1.0版,其值是“00 00 01 00”

4

4

4

保留,必须为“00 00 00 00”

8

8

EFI信息区(GPT)备份位置的扇区号,也就是EFI区域结束扇区号。通常是整个磁盘最

末一个扇区。

8

8

16

磁盘GUID(全球唯一标识符,UUID是同义词)

8

分区表起始扇区号,通常为“02 00 00 00 00 00 00 00”(0x02),也就是LBA2

4

分区表总项数,通常限定为“80 00 00 00”(0x80),也就是128个。

4

每个分区表项占用字节数,通常限定为“80 00 00 00”(0x80),也就是128字节。

4

分区表CRC校验和

5C*

*

保留,通常是全零填充

1.1.2. GPT分区表

分区表区域通常包含128分区项,每个分区项通常占用128字节。这个区

域是由前面所述的GPT头定义的,一般占用磁盘LBA2LBA33扇区。分区表中的每

个分区项由起始地址、结束地址、类型值、名字、属性标志、GUID值组成。分区表

建立后,128位的GUID对系统来说是唯一的。

每个分区项的数据结构具体如表2所示。

2 分区项结构

相对字节偏移量

字节数

(十六进制)

000F

101F

2027

282F

3037

387F UTF-16LE编码的人类可读的分区名称,最大32个字符。

16

16

8

8

8

72

说明[整数皆以little endian方式表示]

GUID表示的分区类型

GUID表示的分区唯一标示符

该分区的起始扇区,用LBA值表示。

该分区的结束扇区(包含),用LBA值表示,通常是奇数。

该分区的属性标志

注意,扇区尺寸不能假定为512字节,也就是说,一个扇区内可能存放4个以

上的分区项,也可能只存放一个分区项的一部分。也就是说,除了头两个扇区(LBA 0

LBA 1)之外,GPT规范仅定义了数据结构的尺寸,而不关心使用多少个扇区进

行存储。

分区类型的取值情况如表3所示。

3 分区类型

相关操作

系统

None 00000000-0000-0000-0000

None 024DEE41-33E7-11D3-9D69-0008C781F39F

None C12A7328-F81F-11D2-BA4B-00A0C93EC93B

GUID[little endian]

未使用

MBR分区表

EFI系统分区[EFI System partition

(ESP)]

BIOS引导分区,其对应的ASCII字符串是

21686148-6449-6E6F-744E-656564454649 None

"Hah!IdontNeedEFI"

Intel Fast Flash (iFFS) partition

D3BFE2DE-3DAF-11DF-BA40-E3A556D89593 None

(for Intel Rapid Start technology)

含义

Windows E3C9E316-0B5C-4DB8-817D-F92DF00215AE

微软保留分区

Windows EBD0A0A2-B9E5-4433-87C0-68B6B72699C7

基本数据分区

Windows DE94BBA4-06D1-4D40-A16A-BFD50179D6AC

Windows恢复环境

数据分区。Linux曾经使用和Windows基本

数据分区相同的GUID

0FC63DAF-8483-4772-8E79-3D69D8477DE4 Linux

这个新的GUID是由 GPT fdisk GNU

Parted 开发者根据Linux传统的"8300"

分区代码发明的。

x86根分区 (/) 这是systemd的发明,可

44479540-F297-41B2-9AF7-D131D5F0458A Linux

用于无fstab时的自动挂载

x86-64根分区 (/) 这是systemd的发明,

4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 Linux

可用于无fstab时的自动挂载

Server Data (/srv) 这是systemd的发

3B8F8425-20E0-4F3B-907F-1A25A76F98E8 Linux

明,可用于无fstab时的自动挂载

HOME分区 (/home) 这是systemd的发

933AC7E1-2EB4-4F13-B844-0E14E2AEF915 Linux

明,可用于无fstab时的自动挂载

交换分区(swap) 不是systemd的发明,

0657FD6D-A4AB-43C4-84E5-0933C84B4F4F Linux

同样可用于无fstab时的自动挂载

Linux A19D880F-05FC-4D3B-A006-743F0F84911E

Linux E6D6D379-F507-44C2-A23C-238F2A3DF928

Linux 8DA63339-0007-60C0-C436-083AC8230908

RAID分区

逻辑卷管理器(LVM)分区

保留

Microsoft还进一步对分区的属性进行了细分:低位4字节表示与分区类型

无关的属性,高位4字节表示与分区类型有关的属性。Microsoft目前使用了如表

4所列的属性。

4 Microsoft所用的分区属性

Bit

解释

0

系统分区(磁盘分区工具必须将此分区保持原样,不得做任何修改)

1

EFI隐藏分区(EFI不可见分区)

2

传统的BIOS的可引导分区标志

60

只读

62

隐藏

63

不自动挂载,也就是不自动分配盘符

1.1.3. GPT分区

这是最大的区域,由分配给分区的扇区组成。这个区域的起始和结束地址由GPT

头定义。

1.1.4. 备份区

备份区域位于磁盘的尾部,包含GPT头和分区表的备份。它占用GPT结束扇区

EFI结束扇区之间的33个扇区。其中最后一个扇区用来备份1号扇区的EFI

息,其余的32个扇区用来备份LBA2LBA33扇区的分区表。

转载网址

/storage/

————————————————————————————————————待续