2023年11月25日发(作者:)
GPT和UEFI详解
我们的电脑想要快速开机,需要具备三个条件:一是主板要支持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方式表示]
00~07 GPT头签名十六进制为“45 46 49 20 50 41 52 54”(对应ASCII码为“EFI PART”)
08~0B
0C~0F GPT头的大小(字节数),通常为“5C 00 00 00”(0x5C),也就是十进制92字节。
10~13 GPT头CRC校验和(计算时把这个字段本身看做零值)
14~17
18~1F EFI信息区(GPT头)的起始扇区号,通常为“01 00 00 00 00 00 00 00”,也就是LBA1。
20~27
28~2F GPT分区区域的起始扇区号,通常为“22 00 00 00 00 00 00 00”(0x22),也即是LBA34。
30~37 GPT分区区域的结束扇区号,通常是倒数第34扇区。
38~47
48~4F
50~53
54~57
58~5B
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头定义的,一般占用磁盘LBA2~LBA33扇区。分区表中的每
个分区项由起始地址、结束地址、类型值、名字、属性标志、GUID值组成。分区表
建立后,128位的GUID对系统来说是唯一的。
每个分区项的数据结构具体如表2所示。
表2 分区项结构
相对字节偏移量
字节数
(十六进制)
00~0F
10~1F
20~27
28~2F
30~37
38~7F 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个扇区用来备份LBA2~LBA33扇区的分区表。
转载网址
/storage/
————————————————————————————————————待续


发布评论