GPT磁盘体系结构详解.docx
《GPT磁盘体系结构详解.docx》由会员分享,可在线阅读,更多相关《GPT磁盘体系结构详解.docx(32页珍藏版)》请在冰豆网上搜索。
![GPT磁盘体系结构详解.docx](https://file1.bdocx.com/fileroot1/2023-4/20/c0bba4ee-74d9-46a2-a51b-3d8b7c11c707/c0bba4ee-74d9-46a2-a51b-3d8b7c11c7071.gif)
GPT磁盘体系结构详解
GPT磁盘体系结构详解
2009年04月16日星期四上午10:
24
之前对于GPT体系结构的认识有一些偏差,前段时间在happylearning的会议上同事大牛又training了我们一把,实在是受益匪浅。
LBA0和LBA1就不说了,前面已经描述过了。
从LBA2到LBA33这里面包含了4*32=128个entry,每个entry对应描述一个磁盘分区的信息。
所以可以很清楚的看出GPT磁盘可以支持128个分区,而我们所熟知的MBR磁盘最多只能分到4个主分区,这就是因为在MBR磁盘中只保留了一个LBA来存储entry的信息,所以最大只能是4个主分区,当然在这些磁盘中采取一些补救的措施,就是可以创建一些扩展分区,这些扩展分区的内容依附于某个主分区上,那么这个扩展分区的entry信息在哪了,如果我猜的没错的话,因为就在它所依附的主分区的数据信息的头上。
很显然,这种依附关系限制了分区的发展。
最下面的LBA-1到LBA-33就是上面LBA1到LBA33的备份。
关于LBA1和LBA-1的每个位的意思都是有它的意义的:
LBA
Size
Contents
0
8
Signature("EFIPART",4546492050415254)
8
4
Revision(Forversion1.0,thevalueis00000100)
12
4
Headersize(inbytes,usually5C000000meaning92bytes)
16
4
CRC32ofheader(0toheadersize),withthisfieldzeroedduringcalculation
20
4
reserved,mustbezero
24
8
CurrentLBA(locationofthisheadercopy)
32
8
BackupLBA(locationoftheotherheadercopy)
40
8
FirstusableLBAforpartitions(primarypartitiontablelastLBA+1)
48
8
LastusableLBA(secondarypartitiontablefirstLBA-1)
56
16
DiskGUID(alsoreferredasUUIDonUNIXes)
72
8
PartitionentriesstartingLBA(always2inprimarycopy)
80
4
Numberofpartitionentries
84
4
Sizeofapartitionentry(usually128)
88
4
CRC32ofpartitionarray
92
*reserved
mustbezeroesfortherestoftheblock(420bytesfora512-byteLBA)
首先,让我们将一块GPT磁盘的LBA0,LBA1,LBA2都dump到一个文件中,对它进行分析。
[root@maxxm~]# ddif=/dev/cciss/c0d0of=/root/imagebs=512count=3
[root@maxxm~]# hexdump/root/image
000000000000000000000000000000000000000
*
00001c00001feeeffff00010000597f11150000
00001d000000000000000000000000000000000
*
00001f00000000000000000000000000000aa55
0000200464520494150545200000001005c0000
000021099ce562a000000000001000000000000
0000220597f1115000000000022000000000000
0000230595e111500000000ca012c4ddaa24b22
0000240f9b8eb6e14dfeaa00002000000000000
0000250008000000080000047b2a6c300000000
000026000000000000000000000000000000000
*
00004007328c12af81f11d24bbaa0003ec93bc9
0000410afc2fc712e49411eee8088ed9c7cb4ca
000042000220000000000004021000600000000
000043000000000000000000000ffffffffffff
0000440ffffffffffffffffffffffffffffffff
*
0000480fd6d0657a4ab43c4e58433094bc84f4f
0000490ec29c51b2c7b4698d4ad0d04e6a6295c
00004a04022000600000000c021004400000000
00004b000000000000000000000ffffffffffff
00004c0ffffffffffffffffffffffffffffffff
*
0000500a0a2ebd0b9e54433c087b66826b7c799
0000510b3de4f2bedf84c2960bfcfa8d7e85371
0000520c022004400000000595e111500000000
000053000000000000000000000ffffffffffff
0000540ffffffffffffffffffffffffffffffff
*
000058000000000000000000000000000000000
*
0000600
还有关于entry的解释:
Offset
Length
Contents
0
16
PartitiontypeGUID
16
16
UniquepartitionGUID
32
8
FirstLBA(little-endian)
40
8
LastLBA(inclusive,usuallyodd)
48
8
Attributeflags(e.g.bit60denotesread-only)
56
72
Partitionname(36UTF-16LEcodeunits)
partitionattributesBitContent
0
systempartition(diskpartitioningutilitiesmustreservethepartitionasis)
60
read-only
62
hidden
63
donotautomount(eg.donotassigndriveletter)
每个分区对应的GUID:
Assoc.
OSPartitionType
Globally-UniqueIdentifier(GUID)
(None)
Unusedentry
00000000-0000-0000-0000-000000000000
MBRpartitionscheme
024DEE41-33E7-11D3-9D69-0008C781F39F
EFISystemPartition
C12A7328-F81F-11D2-BA4B-00A0C93EC93B
BIOSBootPartition
21686148-6449-6E6F-744E-656564454649
Windows
MicrosoftReservedPartition
E3C9E316-0B5C-4DB8-817D-F92DF00215AE
BasicDataPartition
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
LogicalDiskManagermetadatapartition
5808C8AA-7E8F-42E0-85D2-E1E90434CFB3
LogicalDiskManagerdatapartition
AF9B60A0-1431-4F62-BC68-3311714A69AD
HP-UX
Datapartition
75894C1E-3AEB-11D3-B7C1-7B03A0000000
ServicePartition
E2A1E728-32E3-11D6-A682-7B03A0000000
Linux
Datapartition
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
RAIDpartition
A19D880F-05FC-4D3B-A006-743F0F84911E
Swappartition
0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
LogicalVolumeManager(LVM)partition
E6D6D379-F507-44C2-A23C-238F2A3DF928
Reserved
8DA63339-0007-60C0-C436-083AC8230908
FreeBSD
Bootpartition
83BD6B9D-7F41-11DC-BE0B-001560B84F0F
Datapartition
516E7CB4-6ECF-11D6-8FF8-00022D09712B
Swappartition
516E7CB5-6ECF-11D6-8FF8-00022D09712B
UnixFileSystem(UFS)partition
516E7CB6-6ECF-11D6-8FF8-00022D09712B
Vinumvolumemanagerpartition
516E7CB8-6ECF-11D6-8FF8-00022D09712B
ZFSpartition
516E7CBA-6ECF-11D6-8FF8-00022D09712B
MacOSX
HierarchicalFileSystem(HFS+)partition
48465300-0000-11AA-AA11-00306543ECAC
AppleUFS
55465300-0000-11AA-AA11-00306543ECAC
ZFS
6A898CC3-1DD2-11B2-99A6-080020736631
AppleRAIDpartition
52414944-0000-11AA-AA11-00306543ECAC
AppleRAIDpartition,offline
52414944-5F4F-11AA-AA11-00306543ECAC
AppleBootpartition
426F6F74-0000-11AA-AA11-00306543ECAC
AppleLabel
4C616265-6C00-11AA-AA11-00306543ECAC
AppleTVRecoverypartition
5265636F-7665-11AA-AA11-00306543ECAC
Solaris
Bootpartition
6A82CB45-1DD2-11B2-99A6-080020736631
Rootpartition
6A85CF4D-1DD2-11B2-99A6-080020736631
Swappartition
6A87C46F-1DD2-11B2-99A6-080020736631
Backuppartition
6A8B642B-1DD2-11B2-99A6-080020736631
/usrpartition
6A898CC3-1DD2-11B2-99A6-080020736631
/varpartition
6A8EF2E9-1DD2-11B2-99A6-080020736631
/homepartition
6A90BA39-1DD2-11B2-99A6-080020736631
EFI_ALTSCTR
6A9283A5-1DD2-11B2-99A6-080020736631
Reservedpartition
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
Swappartition
49F48D32-B10E-11DC-B99B-0019D1879648
FFSpartition
49F48D5A-B10E-11DC-B99B-0019D1879648
LFSpartition
49F48D82-B10E-11DC-B99B-0019D1879648
RAIDpartition
49F48DAA-B10E-11DC-B99B-0019D1879648
concatenatedpartition
2DB519C4-B10F-11DC-B99B-0019D1879648
encryptedpartition
2DB519EC-B10F-11DC-B99B-0019D1879648
GPT,即GUIDPartitionTable(GUID 分区表,GPT)的简写形式,它是WindowsServer2003 中的一种新型磁盘架构,是一种由基于 Itanium 计算机中的可扩展固件接口 (EFI*) 使用的磁盘分区架构。
这种64位的Itanium版Windows系统采用的磁盘布局架构,与传统的32位磁盘完全不同。
与主启动记录 (MBR) 分区方法相比,GPT 具有更多的优点:
◆∙∙∙∙∙∙∙∙∙它允许每个磁盘有多达 128 个分区(MBR磁盘最多只能有4个主分区,或者3个主分区加一个扩展分区和无限制的逻辑驱动器)。
◆∙∙∙∙∙∙∙∙∙支持高达 18 千兆兆字节(EB,exabytes)的卷大小(MBR磁盘支持的最大卷为2TB)。
◆∙∙∙∙∙∙∙∙∙允许将主磁盘分区表和备份磁盘分区表用于冗余。
◆∙∙∙∙∙∙∙∙∙支持唯一的磁盘和分区 ID(GUID)。
◆∙∙∙∙∙∙∙∙∙性能更加稳定。
...
GPT磁盘总体布局
可以在运行带有ServicePack1(SP1) 的 WindowsServer2003的磁盘管理中进行MBR与GPT磁盘的相互转换,然后进行相应的分区操作。
也可以使用 DiskPart.exe 命令行实用程序或 EFI 固件实用程序 Diskpart.efi 在基本 GPT 磁盘上创建分区。
一个转换为GPT并建立分区后的磁盘,总体布局如图2.37所示。
图2.37 GPT磁盘总体布局
我们可以看到,一个GPT磁盘可以分为两大部分:
保护MBR和EFI部分。
(1)第一部分只由0号扇区组成,在这个扇区中包含一个DOS分区表,分区表内只有一个表项,这个表项描述了一个类型值为0xEE的分区,大小为整个磁盘(如图2.38所示)。
这个分区的存在可以使计算机认为这个磁盘是合法的,并且已被使用,从而不再试图对其进行格式化等操作,所以该扇区又被称为“保护MBR”。
实际上,EFI根本不使用这个分区表。
图2.38 GPT磁盘的0号扇区
(2)另一部分为EFI部分,EFI部分又可以分为4个区域:
EFI信息区(又称为GPT头)部分、分区表部分、GPT分区部分和备份区域。
◆∙∙∙∙∙∙∙∙∙EFI信息区,也称为GPT头,起始于磁盘的1号扇区,通常只占用这一个扇区。
GPT磁盘创建后,由GPT头定义分区表的位置和大小。
Windows限定分区表项为128个。
GPT头还包含头和分区表的校验和,这样就可以及时发现错误或者改变。
◆∙∙∙∙∙∙∙∙∙分区表区域包含分区表项。
这个区域由GPT头定义,一般占用磁盘2~33号扇区。
分区表中的每个表项由起始和结束地址、类型值、名字、属性标志和GUID值组成。
分区表建立后,128位的GUID对系统来说是唯一的。
◆∙∙∙∙∙∙∙∙∙分区部分是最大的区域,由分配给分区的扇区组成。
这个区域的起始和结束地址由GPT头定义。
◆∙∙∙∙∙∙∙∙∙备份区域位于磁盘的尾部,包含GPT头和分区表的备份。
它占用GPT结束扇区和EFI结束扇区之间的33个扇区。
其中最后一个扇区用来备份1号扇区的EFI信息,其余的32个扇区用来备份2~33号扇区的分区表。
数据结构
1. EFI信息扇区数据结构
EFI信息扇区位于磁盘的1号扇区,也称为GPT头。
GPT磁盘创建后,由GPT头定义分区表的位置和大小,Windows限定分区表项为128个。
GPT头还包含头和分区表的校验和。
EFI信息扇区的结构如表2.21所示。
表2.21 EFI信息扇区结构
相对字节偏移
(十六进制)
字节数
说明
00~07
8
签名(ASCII码“EFIPART”
08~0B
4
版本
0C~0F
4
GPT头大小字节数
10~13
4
GPT头CRC校验和
14~17
4
保留
18~1F
8
当前GPT头的LBA扇区号,也即为EFI区域起始扇区号
20~27
8
GPT头备份LBA扇区号,也即为EFI区域结束扇区号
28~2F
8
GPT分区区域起始LBA
30~37
8
GPT分区区域结束LBA
38~47
12
磁盘GUID
48~4F
8
GPT分区表起始LBA
50~53
4
分区表项数
54~57
4
每分区表项占用字节数
58~5B
4
分区表CRC校验和
5C~1FF
366
保留
通过这些结构中的描述值,我们可以确定GPT头、分区表、GPT分区区域、分区表的备份位置等结构布局。
图2.39显示了一个GPT头的实例。
图2.39 GPT头
具体分析如下:
1) 0x00~0x07:
8个字节,GPT头签名“4546492050415254”,ASCII码为“EFI PART”。
2) 0x08~0x0B:
4个字节,版本号。
3) 0x0C~0x0F:
4个字节,GPT头大小字节数,此处的值为0x5C,即92个字节。
4) 0x10~0x13:
4个字节,GPT头校验和。
5) 0x14~0x17:
4个字节,保留。
6) 0x18~0x1F:
8个字节,当前GPT头的LBA扇区号,即EFI区域起始扇区号,通常为1。
7) 0x20~0x27:
8个字节,GPT头备份位置的LBA扇区号,即EFI区域结束扇区号,此处的值为224909(0x086E8D)。
8) 0x28~0x2F:
8个字节,GPT分区区域起始LBA扇区号,此处的值为34(0x22)。
9) 0x30~0x37:
8个字节,GPT分区区域结束LBA扇区号,此处的值为224876(0x036E6C)。
10)0x38~0x47:
16个字节,磁盘GUID。
11)0x48~0x4F:
8个字节,GPT分区表起始LBA扇区号,此处的值为2(0x02),通常都是起始于2号扇区。
12)0x50~0x53:
4个字节,分区表项数,限定为128(0x80)。
13)0x54~0x57:
4个字节,每分区表项占用字节数,固定为128(0x80)。
14)0x58~0x5B:
4个字节,分区表CRC校验和。
15)0x5C~0x1FF:
420个字节,保留。
WindowsandGPTFAQ
Updated:
June15,2011
ThisarticleprovidesanswerstofrequentlyaskedquestionsabouttheGUIDPartitionTable(GPT).
Thisarticleappliestothefollowingoperatingsystems:
∙Windows7
∙WindowsServer2008
∙WindowsServer2008R2
∙WindowsVista
∙WindowsServer2003SP1
∙WindowsServer2003(64-bit)
∙WindowsXPx64edition
OnThisPage
AbouttheGPT
WindowsDiskSupport
WindowsGPTRequiredPartitions
WindowsGPTESPImplementation
ManipulatingGPTDisksandTheirContents
AbouttheGPT
Q.
WhatisaGPTdisk?
A.
TheGUIDPartitionTable(GPT)wasintroducedaspartoftheUnifiedExtensibleFirmwareInterface(UEFI)initiative.GPTprovidesamoreflexiblemechanismforpartitioningdisksthantheolderMasterBootRecord(MBR)partitioningschemethatwascommontoPCs.
Apartitionisacontiguousspaceofstorageonaphysicalorlogicaldiskthatfunctionsasifitwereaphysicallyseparatedisk.Partitionsarevisible