3.10.1:http://bbs.intohard.com/thread-56314-1-3.html (续4楼未完的内容)
2.6.2GPT磁盘总体布局
可以在运行带有Service Pack 1 (SP1) 的 Windows Server 2003的磁盘管理中进行MBR与GPT磁盘的相互转换,然后进行相应的分区操作。也可以使用 DiskPart.exe 命令行实用程序或 EFI 固件实用程序 Diskpart.efi 在基本 GPT 磁盘上创建分区。
一个转换为GPT并建立分区后的磁盘,总体布局如图2.37所示。
图2.37GPT磁盘总体布局
我们可以看到,一个GPT磁盘可以分为两大部分:保护MBR和EFI部分。
(1)第一部分只由0号扇区组成,在这个扇区中包含一个DOS分区表,分区表内只有一个表项,这个表项描述了一个类型值为0xEE的分区,大小为整个磁盘(如图2.38所示)。这个分区的存在可以使计算机认为这个磁盘是合法的,并且已被使用,从而不再试图对其进行格式化等操作,所以该扇区又被称为“保护MBR”。实际上,EFI根本不使用这个分区表。
图2.38GPT磁盘的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号扇区的分区表。 有多厚呢?
1000页以上方显深度。
低于500页不买。 呵呵,会起始过500页,但绝不会达到1000页,因为考虑到书价的问题,搞太厚了会增加读者购买成本,也会影响销量。在书中几乎找不到为了增加厚度而强加进去的填充内容。出版后大家可以讨论一下存在的问题,也请大家提出宝贵意见。
GPT磁盘EFI信息扇区数据结构
EFI信息扇区位于磁盘的1号扇区,也称为GPT头。GPT磁盘创建后,由GPT头定义分区表的位置和大小,Windows限定分区表项为128个。GPT头还包含头和分区表的校验和。EFI信息扇区的结构如表2.21所示。表2.21EFI信息扇区结构
相对字节偏移
(十六进制) 字节数 说明
00~07 8 签名(ASCII码“EFI PART”
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头的实例。
具体分析如下:
1)0x00~0x07:8个字节,GPT头签名“4546492050415254”,ASCII码为“EFIPART”。
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个字节,保留。
[ 本帖最后由 ttnml 于 2009-2-9 13:10 编辑 ]
GPT分区表项数据结构
2.GPT分区表项数据结构GPT磁盘的2~33号扇区被系统保留用做存放GPT磁盘的分区表,以描述GPT区域内的各个分区。分区表共占用32个扇区,每个分区表项占用128个字节,32个扇区共可以存放128个分区表项。分区表项的数据结构见表2.22。
表2.22GPT分区表项数据结构
字节偏移
(十六进制) 字节数 含义
00~0F 16 分区类型GUID
10~1F 16 分区唯一GUID
20~27 8 分区起始LBA
28~2F 8 分区结束LBA
30~37 8 分区属性
38~7F 72 分区名的Unicode码
0x00~0x0F处的16个字节共128个bit用于确定分区的类型。对于一个GPT磁盘,分区既用来存储系统信息也用于存储文件系统。例如,任何使用EFI的计算机,必须有一个由启动硬件和软件所需要的文件组成的EFI系统分区。表2.23为Intel对GPT分区类型值的定义,表2.24为Microsoft对GPT分区类型值的定义。
表2.23Intel对GPT分区类型的定义
GUID类型值 含义
00000000-0000-0000-0000-000000000000 未分配项
C12A7328-F81F-11D2-BA4B-00A0C93EC93B EFI系统分区
024DEE41-33E7-11d3-9D69-0008C781F39F 包含DOS分区表的分区
表2.24Microsoft定义的一些GPT分区类型值
GUID类型值 含义
E3C9E316-0B5C-4DB8-817D-f92DF00215AE Microsoft 保留分区(MRP)
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 主分区(基本磁盘)
5808C8AA-7E8F-42E0-85D2-E1E90434CFB3 LDM元数据分区(动态磁盘)
AF9B60A0-1431-4F62-BC68-3311714A69AD LDM数据分区(动态磁盘)
Microsoft定义的GPT分区类型值含义如下:
Windows使用“保留分区”来存放临时文件和数据。
“主分区”是包含有文件系统的基本分区,类似于DOS分区的主分区。
“LDM元数据分区”和“LDM数据分区”用于Microsoft动态磁盘。
将磁盘转换为GPT磁盘而未进行分区前,系统就已经使用了第一个分区表项,这个分区表项用来描述一个被称为“Microsoftreservedpartition”的保留分区(如图2.40所示),这个分区紧接在分区表区域之后从34号扇区开始,大小因磁盘容量不同而有所不同。
分区表项内相对偏移0x20~0x27为该保留分区的起始扇区号,一般为34; 0x28~0x2F为分区结束扇区号,本例中为65569(0x010021)。
创建分区后,各分区的描述信息依次存放在“Microsoft保留分区”的分区表项之后,图2.41中第2、3个分区表项即为用户创建的第1、2个分区的分区表信息。我们可以看到,第一个用户分区起始于65570号扇区,结束于86049号扇区;第二个用户分区起始于86050号扇区,结束于127009号扇区。
创建分区的同时,系统会将各分区的起始扇区进行清零操作。
弟兄们帮着顶下啊,明天再贴!