本文包含四个部分:
1.GPT磁盘分区的数据结构
2.初始化GPT磁盘,它有哪些变化
3.查看受损的GPT磁盘
4.删除一个分区,GPT硬盘有哪些变化
GPT磁盘的特点
1.GPT磁盘可以有128个分区
2.支持18EB的卷大小 (1EB=1024*1024*1024GB)
3.每个分区都有唯一的分区ID分区表的位置2-33扇区,每个分区表占128字节
GPT磁盘结构
保护MBR跟MBR很类似,不同之处在于:
1.分区表的类型是EE,表示GPT分区
2.分区的开始位置是1号扇区,结束扇区都是FF填充
GPT头
找到备份GPT头的扇区号,跳转
备份的GPT头与原GPT头有所差异,在这个备份中:
gpt头所在的扇区号是当前这个备份GPT头的扇区号
而备份GPT头的扇区号是1号扇区。
也就是说这个备份认为自己是GPT头,将原先的那个从1号扇区开始的GPT头视为备份
查看备份GPT头中的GPT分区表的起始扇区号,对应的是备份GPT分区表
GPT的分区表使用8个字节表示起始扇区号,但是MBR里只用4个字节,所以GPT分区表可以支持更大的分区。
创建一个VHD,在还没初始化之前,使用winhex查看
全部填充EE,方便之后观察
填充之后,全选,复制选块至新文件,命名为“初始化gpt之前的样子”
点击“专业工具”-“将镜像转换为磁盘”
磁盘管理,初始化磁盘
会发现初始化之后容量变小了,由“没有初始化”变成了“联机”,说明初始化成功
再次进入winhex,重新打开
点击“工具”-“文件工具”-“比较”
点一次确定后,会自动计算字节数
点击“同步窗口”“同步比较”
发现0号扇区被写入了保护MBR
1号扇区被写入GPT头
2号扇区被写入了分区表
分区表被清空
对照刚才生成的报告
接着向下查看有变化的位置,发现跳到了一个备份分区表
因为分区表有32个扇区,所以在此基础上,往后32个扇区,紧跟着的是GPT头备份
对照完成,试验成功
小结:
初始化GPT磁盘后:
1.0号扇区写入保护MBR
2.1号扇区写入GPT头,剩余字节清零
3.2-33号扇区写入系统默认的分区表,剩余字节清零
4.备份GPT头和备份分区表的改变也一样
准备一个分区,里面存放一个文件
使用winhex打开,人工破坏头部的几个扇区,把前四个扇区填充为00,关闭文件
磁盘管理,分离虚拟磁盘,再把这个虚拟磁盘附加进来,此时显示“没有初始化”
现在如何恢复?根据备份!
他有备份的GPT头,备份的分区表,但是没有保护MBR
所以第一步创建一个保护MBR
固定操作:先填入55AA,分区类型是EE,开始扇区是1,结束扇区FF FF FF FF
再次分离虚拟磁盘,再把这个虚拟磁盘附加进来,
到这一步,已经可以打开,并且查看里面的数据
为什么1号扇区的GPT头和2号扇区的分区表都没有填充,却可以读取数据?
Winhex无法读取,但是操作系统可以直接读取
因为操作系统根据保护MBR确定这个磁盘是GPT磁盘,然后自己读取尾部的备份信息,就可以打开了。
如果想恢复完整,将备份的数据复制过去,就可以用winhex查看了。
注意:严格来说,还需要改一下校验和
创建一个虚拟磁盘,初始化,使用GPT分区形式
新建简单卷,设置为FAT32文件系统,因为NTFS文件系统在不操作的时候也会产生很多日志文件
用winhex打开,复制至新文件“删除分区之前的状态”,然后“将镜像工具转换为磁盘”
删除卷
使用Winhex打开磁盘,进行比较
删除分区,对应的分区表项被删除
接着向下,发生改变的是一个备份分区表,分区表项也被清零
很明显,这是一个备份GPT头,并且两个校验和发生了改变
小结:
删除一个分区:
1.GPT头的校验和改变
2.分区对应的分区表项清零
3.备份GPT头的校验和改变
4.备份分区对应的分区表项清零