找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 4084|回复: 2

【操作系统】GPT分区表资料

[复制链接]

1110

主题

1651

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24221 个
贡献
46222 次
宅之契约
0 份
在线时间
2296 小时
注册时间
2014-1-26
发表于 2015-8-10 19:30:35 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
GPT分区的硬盘结构:
1、MBR扇区
2、GPT头扇区
3、GPT分区表
4、分区
看图。
GPT.png
GPT分区的硬盘在开头有个保留的MBR扇区,这个是兼容性考虑。其中这个MBR扇区的分区表里通常只有一个分区表,那就是整个硬盘。它表示“这个分区的内容,就是GPT格式的分区。”
可以用这样一张图来表示这个MBR的作用。
MBR_GPT.png
你可能会想:“它有个MBR分区表,那我能不能让硬盘的一部分是GPT分区,而另一部分则归这个MBR分区来分呢?”当然可以,但是这样的话Windows也许就不滋磁了。
Hybrid.png
这种“杂交”的既有MBR分区又有GPT分区的硬盘格式对于某些操作系统(比如一些Linux系统)是滋磁的,而Windows虽然能引导,但是操作系统会在加载的时候蓝屏。呵呵。

然后我们来看GPT头扇区,也就是GPT分区表头,它的数据用NASM汇编表示的话,大概是这个样子的(数据是从我自己用的一块3TB硬盘中采集的):
  1. GPTHeader:
  2. Signature        db"EFI PART"        ;签名
  3. Unknown1        dd 0x10000                ;版本
  4. SizeOfPTH        dd GPTSize                ;分区表头大小
  5. CRC32OfPTH        dd 0x5B2369D7        ;分区表头的CRC32校验
  6. Reserved1        dd 0                        ;保留
  7. CurLBA                dq 1                        ;这个分区表头的位置
  8. BackupLBA        dq 0x15D50A3AF        ;备份的分区表头的位置
  9. LBAStart        dq 0x22                        ;第一个可用于分区的LBA
  10. LBAEnd                dq 0x15D50A38E        ;最后一个可用于分区的LBA
  11. GUIDOfDisk        dq 0x46C44A6F627B8904,0x4ACE5DD5017B1C98;硬盘GUID
  12. PTStartLBA        dq 2                        ;分区表项的起始LBA
  13. NbPT                dd 0x80                        ;分区表项的数量
  14. SizeOfPT        dd 0x80                        ;一个分区表项的大小
  15. PTSNCRC32        dd 0x3F3F0FFF        ;整个GPT分区表的CRC32校验

  16. GPTHeaderEnd:
  17. GPTSize equ GPTHeaderEnd-GPTHeader

  18. Reserved2
  19.         times 0x200-GPTSize db 0;保留字节
复制代码
我还是大致解释一下这些汇编语句吧。
db表示插入字节,dw表示插入字,dd表示插入双字(也就是32位整数),dq是插入一个64位整数。左边是标识符,右边是值。

以下是GPT头部的格式。
偏移长度描述
08GPT引导扇区的签名,可以在WinHex看到“EFI PART”这样的字符串。
84GPT的版本号
124分区表头大小,也就是这一整块结构体的字节数。
164这个分区表头的CRC32校验值。计算这个校验值前,要将其归零,然后计算整个GPT分区表的CRC32校验值,最后计算GPT分区表头的校验值。
204保留不用,归零。
248当前的这个分区表头所在扇区的位置,LBA格式,64位。
328备份的分区表头所在扇区的位置。同样是LBA格式,64位。
408可用于分区的磁盘空间的起始LBA位置。
488最后一个可用于分区的扇区的LBA位置。
5616硬盘的GUID。用于区分硬盘。
728分区表项的起始LBA,也就是真正的分区表的开始位置。
804分区表项的数量,Windows设置其为128。
844每个分区表项的长度,Windows下为128字节。
884所有GPT分区表的CRC32校验值。

然后是GPT表的表项的结构体。用NASM汇编来表示就是这样的:
  1. struc GPTTable_s
  2.         .PartTypeGUID        resb 16        ;分区类型GUID
  3.         .PartGUID                resb 16        ;分区GUID
  4.         .StartLBA                resq 1        ;起始LBA
  5.         .EndLBA                        resq 1        ;末尾LBA
  6.         .AttrFlags                resq 1        ;属性标签
  7.         .PartName                resw 36        ;UNICODE的分区名
  8. end struc
复制代码
用表格来表示就是这样的:
偏移长度描述
016分区类型GUID(后面有描述)
1616这个分区的GUID
328分区起始LBA
408分区末尾LBA
488分区属性标签(后面有描述)
5672这个分区的名字,用UNICODE表示

分区类型GUID:(资料来自维基百科
操作系统分区类型全球唯一标识符(GUID)
(无)未使用表项00000000-0000-0000-0000000000000000
(无)MBR分区方案024DEE41-33E7-11D3-9D690008C781F39F
(无)EFI系统分区C12A7328-F81F-11D2-BA4B00A0C93EC93B
(无)BIOS引导分区[e]21686148-6449-6E6F-744E656564454649
(无)Intel快速闪存(iFFS)分区(用于Intel Rapid Start技术)[23][24]D3BFE2DE-3DAF-11DF-BA40E3A556D89593
(无)索尼引导分区[f]F4019732-066E-4E12-8273346C5641494F
(无)联想引导分区[f]BFBFAFE7-A34F-448A-9A5B6213EB736C22
Windows微软保留分区(MSR)E3C9E316-0B5C-4DB8-817DF92DF00215AE
Windows基本数据分区[g]EBD0A0A2-B9E5-4433-87C068B6B72699C7
Windows逻辑磁盘管理器(LDM)元数据分区5808C8AA-7E8F-42E0-85D2E1E90434CFB3
Windows逻辑磁盘管理器数据分区AF9B60A0-1431-4F62-BC683311714A69AD
WindowsWindows RE系统DE94BBA4-06D1-4D40-A16ABFD50179D6AC
WindowsIBM通用并行文件系统(GPFS)分区37AFFC90-EF7D-4E96-91C32D7AE055B174
Windows存储空间分区E75CAF8F-F680-4CEE-AFA3B001E56EFC2D
HP-UX数据分区75894C1E-3AEB-11D3-B7C17B03A0000000
HP-UX服务分区E2A1E728-32E3-11D6-A6827B03A0000000
LinuxLinux文件系统数据[g]0FC63DAF-8483-4772-8E793D69D8477DE4
LinuxRAID分区A19D880F-05FC-4D3B-A006743F0F84911E
Linux内存交换分区0657FD6D-A4AB-43C4-84E50933C84B4F4F
Linux逻辑卷管理器(LVM)分区E6D6D379-F507-44C2-A23C238F2A3DF928
Linux/home分区933AC7E1-2EB4-4F13-B8440E14E2AEF915
Linux/srv (服务器数据)分区[26]3B8F8425-20E0-4F3B-907F1A25A76F98E8
Linux纯dm-crypt分区[27][28]7FFEC5C9-2D00-49B7-89413EA10A5586B7
LinuxLUKS分区[27][28]CA7D7CCB-63ED-4C53-861C1742536059CC
Linux保留8DA63339-0007-60C0-C436083AC8230908
FreeBSD引导分区83BD6B9D-7F41-11DC-BE0B001560B84F0F
FreeBSD数据分区516E7CB4-6ECF-11D6-8FF800022D09712B
FreeBSD内存交换分区516E7CB5-6ECF-11D6-8FF800022D09712B
FreeBSDUnix文件系统(UFS)分区516E7CB6-6ECF-11D6-8FF800022D09712B
FreeBSDVinum卷管理器分区516E7CB8-6ECF-11D6-8FF800022D09712B
FreeBSDZFS分区516E7CBA-6ECF-11D6-8FF800022D09712B
Mac OS X分层文件系统+(HFS+)分区48465300-0000-11AA-AA1100306543ECAC
Mac OS X苹果UFS55465300-0000-11AA-AA1100306543ECAC
Mac OS XZFS[h]6A898CC3-1DD2-11B2-99A6080020736631
Mac OS X苹果RAID分区52414944-0000-11AA-AA1100306543ECAC
Mac OS X苹果RAID分区,下线52414944-5F4F-11AA-AA1100306543ECAC
Mac OS X苹果引导分区426F6F74-0000-11AA-AA1100306543ECAC
Mac OS X苹果标签4C616265-6C00-11AA-AA1100306543ECAC
Mac OS X苹果TV恢复分区5265636F-7665-11AA-AA1100306543ECAC
Mac OS X苹果内核存储(比如狮子FileVault)分区53746F72-6167-11AA-AA1100306543ECAC
Solaris引导分区6A82CB45-1DD2-11B2-99A6080020736631
Solaris根分区6A85CF4D-1DD2-11B2-99A6080020736631
Solaris内存交换分区6A87C46F-1DD2-11B2-99A6080020736631
Solaris备份分区6A8B642B-1DD2-11B2-99A6080020736631
Solaris/usr分区6A898CC3-1DD2-11B2-99A6080020736631
Solaris/var分区6A8EF2E9-1DD2-11B2-99A6080020736631
Solaris/home分区6A90BA39-1DD2-11B2-99A6080020736631
Solaris备用扇区6A9283A5-1DD2-11B2-99A6080020736631
Solaris保留分区6A945A3B-1DD2-11B2-99A6080020736631
6A9630D1-1DD2-11B2-99A6080020736631
6A980767-1DD2-11B2-99A6080020736631
6A96237F-1DD2-11B2-99A6080020736631
6A8D2AC7-1DD2-11B2-99A6080020736631
NetBSD内存交换分区49F48D32-B10E-11DC-B99B0019D1879648
NetBSDFFS分区49F48D5A-B10E-11DC-B99B0019D1879648
NetBSDLFS分区49F48D82-B10E-11DC-B99B0019D1879648
NetBSDRAID分区49F48DAA-B10E-11DC-B99B0019D1879648
NetBSD级联分区2DB519C4-B10F-11DC-B99B0019D1879648
NetBSD加密分区2DB519EC-B10F-11DC-B99B0019D1879648
ChromeOSChromeOS内核FE3A2A5D-4F32-41A7-B725ACCC3285A309
ChromeOSChromeOS根文件系统3CB8E202-3B7E-47DD-8A3C7FF2A13CFCEC
ChromeOSChromeOS“将来使用”2E0A753D-9E48-43B0-8337B15192CB1B5E
HaikuHaiku BFS42465331-3BA3-10F1-802A4861696B7521
MidnightBSD引导分区85D5E45E-237C-11E1-B4B3E89A8F7FC3A7
MidnightBSD数据分区85D5E45A-237C-11E1-B4B3E89A8F7FC3A7
MidnightBSD内存交换分区85D5E45B-237C-11E1-B4B3E89A8F7FC3A7
MidnightBSDUnix文件系统(UFS)分区0394EF8B-237E-11E1-B4B3E89A8F7FC3A7
MidnightBSDVinum卷管理器分区85D5E45C-237C-11E1-B4B3E89A8F7FC3A7
MidnightBSDZFS分区85D5E45D-237C-11E1-B4B3E89A8F7FC3A7
CephCeph Journal[j]45B0969E-9B03-4F30-B4C6B4B80CEFF106
CephCeph dm-crypt加密Journal[j]45B0969E-9B03-4F30-B4C65EC00CEFF106
CephCeph OSD[j]4FBD7E29-9D25-41B8-AFD0062C0CEFF05D
CephCeph dm-crypt OSD[j]4FBD7E29-9D25-41B8-AFD05EC00CEFF05D
CephCeph 磁盘创建[j]89C57F98-2FE5-4DC0-89C1F3AD0CEFF2BE
CephCeph dm-crypt 磁盘创建[j]89C57F98-2FE5-4DC0-89C15EC00CEFF2BE
OpenBSD数据分区824CC7A0-36A8-11E3-890A952519AD3F61
QNX电源安全(QNX6)文件系统[34]CEF5A9AD-73BC-4601-89F3CDEEEEE321A1
Plan 9Plan 9分区C91818F9-8025-47AF-89D2F030D7000C2C

分区属性标签:(资料来自维基百科
内容
0系统分区(磁盘分区工具必须保留这个分区。)
1EFI固件应该忽略分区的内容并且不去尝试读取它
2传统BIOS可引导(相当于MBR分区表的“活动扇区”(典型的是设置第一个字节的最高位))
3–47保留不用(给将来使用)
48–63根据不同的分区,意义不同

基本数据分区的分区属性标签格式:(资料来自维基百科
内容
60只读
62隐藏
63不要自动挂载(比如,不自动分配驱动器号)


维基百科资料:https://en.wikipedia.org/wiki/GUID_Partition_Table
百度百科资料(不靠谱):http://baike.baidu.com/subview/10817/15336680.htm
MBR相关资料:http://www.0xaa55.com/thread-7-1-1.html
有关MBR和GPT分区的区别请看这里:http://www.0xaa55.com/thread-1273-1-1.html
GPT硬盘的引导方式:UEFI引导,请参考:http://www.0xaa55.com/thread-1106-1-1.html
CRC32算法的C语言和汇编语言实现:http://www.0xaa55.com/thread-784-1-1.html
有关混合分区硬盘的实际折腾经验:http://www.0xaa55.com/thread-1242-1-1.html
回复

使用道具 举报

0

主题

2

回帖

9

积分

用户组: 初·技术宅

UID
1045
精华
0
威望
1 点
宅币
5 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2015-8-16
发表于 2015-8-16 23:31:33 | 显示全部楼层
谢谢楼主无私的分享
回复 赞! 靠!

使用道具 举报

0

主题

41

回帖

45

积分

用户组: 初·技术宅

UID
3351
精华
0
威望
2 点
宅币
0 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2018-1-14
发表于 2018-1-14 15:51:11 | 显示全部楼层
可以可以!!
回复

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-4-18 22:45 , Processed in 0.052745 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表