APP下载

基于WinHex的对GPT分区表的恢复研究

2020-04-30王剑雄李宗阳李晨昊

河北建筑工程学院学报 2020年4期
关键词:扇区磁盘备份

施 陶 王剑雄 李宗阳 李晨昊

(河北建筑工程学院,河北 张家口 075000)

0 引 言

GPT分区模式是一种区别于传统的主引导记录(MBR)分区方案的一种新的磁盘分区表结构标准,具有更加灵活的分区机制.由于Windows10操作系统在个人PC中的普及,以及用来引导Windows10操作系统的磁盘必须采用GPT分区模式,这导致使用GPT分区模式的磁盘在个人PC磁盘中所占比例非常高.与传统的MBR分区模式相比,GPT模式具有很多明显的优点.首先,GPT磁盘支持大小超过2TB的磁盘,而且每个分区的大小也不在受到2TB的约束.其次,Windows系统下的GPT磁盘最多可以有128个主分区,而不再仅限于MBR模式下的4个.再者,GPT磁盘的分区表自带备份,相比于MBR磁盘则更加安全.即便如此,在日常生活中,还是会常常出现由于误操作、病毒或者物理损坏等原因造成磁盘无法读取,从而损失里面重要的数据.而这其中,有很大一部分是由于分区表损坏引起的,由此可见,GPT分区表的恢复是至关重要的.

1 GPT磁盘的结构

GPT磁盘主要由6个部分组成,按照前后顺序分别为保护MBR、GPT头、分区表、分区区域、分区表备份、GPT头备份.

保护MBR位于GPT磁盘的第一个扇区,也就是0号扇区,是为了防止某些无法识别GPT磁盘的程序误以为磁盘没有进行分区进而对磁盘进行一些错误的操作,对于文件系统本身来说没有什么实际的作用.

GPT头位于GPT磁盘的第二个扇区,即1号扇区.它记录了GPT磁盘中各个重要组成部分所在的位置以及它们的一些属性信息,如分区表的起始位置和结束位置、分区表的项数以及每一项的字节数等.除此之外,还记录了分区表和GPT头本身的CRC校验和.需要指出的是,GPT头中记录的分区区域起始位置有时并不准确,实际情况以分区表中的记录为准.

分区表占用了GPT磁盘第2到33号扇区,总共32个扇区,最多可以容纳128个分区表项,其中每个分区表项占用128个字节.分区表是GPT磁盘中极其重要的组成部分,它记录了分区类型GUID、分区GUID、分区的起始地址和结束地址、分区的属性以及分区的名字,如图1所示.

分区表之后便是分区区域,通常起始于34号扇区,但不一定,比如图1中所示分区表中的第一个分区就起始于2048号扇区.分区区域通常由多个具体的分区组成,如EFI系统分区、微软保留分区、主分区等.分区区域之后紧跟着分区表的备份,同样占用32个扇区,再之后便是GPT头的备份,占用整个GPT磁盘的最后一个扇区.需要注意的是GPT头的备份并不是和GPT头完全一样,它们的结构相同,但个别参数不同.

图1 2号扇区的分区表

2 GPT分区表恢复的原理

分区表中每一个表项都对应着分区区域的一个具体分区,记录着这些分区的分区类型GUID、分区GUID、分区的起始地址和结束地址、分区的属性以及分区的名字等信息.当分区表损坏导致磁盘无法使用时,我们可以根据分区区域存储的数据手动计算出分区的数量以及它们的起始地址和结束地址,然后利用WinHex软件填入被损坏的分区表的对应位置即可.在这个过程中,我们可能会遇到使用不同文件系统的分区,比如最常见的FAT32和NTFS文件系统.在FAT32文件系统的DBR中,偏移20H~23H处的四个字节记录了整个分区的扇区总数,该分区结束地址=分区起始地址+分区扇区总数-1.同样,在NTFS文件系统DBR的偏移28H~2FH处,也记录了整个NTFS分区的扇区总数,当然,这不包括最后一个扇区,即DBR备份扇区,因此该分区结束地址=分区起始地址+分区扇区总数.

除了各个分区的起始地址和结束地址,分区表中剩下的参数经过多次实验验证发现,对于数据恢复来说并非是必填不可的,因此我们可以随意填入一些合理的数据即可,甚至可以不填.在这之后,利用WinHex软件提供的工具计算出整个分区表区域和GPT头的CRC校验码,分别填入GPT头中对应的位置.GPT头中的其它参数除了GPT头备份所在扇区号和分区区域结束扇区号都是固定不变的,将它们对应的值依次填入即可.而GPT头备份所在扇区号和分区区域结束扇区号则可以根据之前重建分区表时得出的数据获得.至此,整个分区表的重建工作就已经完成,无法识别的磁盘可以正常工作,丢失的文件也可以正常访问了.

3 实 验

本次实验的平台是Windows10操作系统,数据恢复和分析工具是WinHex18.3软件,使用的工具是一块采用GPT分区模式的磁盘.为了模拟分区表损坏,磁盘无法打开的情况,利用WinHex将该磁盘的GPT头、分区表以及它们的备份全部填充为0.进行本步操作后,操作系统已无法正常读取该磁盘.本次实验的目标即重建该磁盘的GPT头和分区表,使得该磁盘可以被操作系统正常访问.

下面开始恢复操作,具体步骤如下:

第一步:使用WinHex打开该磁盘,由于GPT磁盘的第一个分区通常起始于34号扇区或者2048号扇区,我们利用WinHex直接跳转到这两个扇区查看,果然在2048号扇区找到了一个FAT32分区的DBR,接着由这个扇区偏移20H~23H处的记录得到这个分区的大小为614400个扇区,由此计算出第一个分区的起始地址为2048,结束地址为2048+614400-1=616447.

第二步:跳转到第一个分区结束后的下一个扇区,即616448号扇区,发现这个扇区并没有写入任何数据.其实这是由于在Windows环境下,GPT磁盘的第二个分区通常用作微软保留分区,在没有特殊情况下不写入任何数据.接着利用WinHex提供的搜索功能向后搜索FAT32或NTFS文件系统DBR的首字节值EB,很快在681984号扇区找到一个NTFS分区的DBR,因此,第二个分区(即微软保留分区)的起始地址为616448,结束地址为681983.

第三步:由687983号扇区偏移28H~2FH处的记录可知,当前NTFS分区的大小为10190847个扇区,由此可计算出第三个分区的起始地址为681984,结束地址为681984+10190847=10872831.

第四步:跳转到10872832号扇区,发现此扇区是FAT32文件系统的DBR,同样,由其偏移20H~23H处的记录可得当前分区的大小为10190848个扇区,进而可得,该分区起始地址为10872832,结束地址为10872832+10190848-1=21063679.

第五步:接着跳转到21063680号扇区,又发现了一个NTFS分区的DBR,同样由其偏移28H~2FH处记录的参数得到此分区的大小为9508574个扇区,所以这第五个分区的起始地址为21063680号扇区,结束地址为21063680+9508574=30572254.

第六步:同样跳转到30572255号扇区,发现这个扇区并不是文件系统的DBR且当前扇区距离磁盘尾部已经非常近,由此便可判断从当前扇区开始的32个扇区,即30572255~30572286号扇区,是分区表备份的位置.之后的30572287号扇区便是GPT头备份的地址.至此,各个分区的起始地址和结束地址都已明了,如表1所示.

表1 各分区位置信息

第七步:将前面得到的地址数据转换成十六进制依次填入2号扇区中的对应位置,同时,填入分区的GUID.由于分区GUID用于唯一标识分区,故5个分区的GUID只需不同即可,可以填入任意数据.填好后的分区表如图2所示.

第八步:将0x4546492050415254000001005C000000填入位于1号扇区的GPT头的前16个字节,再将GPT头所在扇区号、GPT头备份所在扇区号、分区区域起始扇区号、分区区域结束扇区号和分区表起始扇区号等信息依次填入对应位置.需要注意的是,此处记录的分区区域起始扇区号通常为34,即分区表之后的第一个扇区.

第九步:使用WinHex计算出整个分区表区域的CRC32校验码,填入1号扇区中偏移58H~5BH中的位置,再计算GPT头的CRC32校验码填入1号扇区偏移10H~13H处,保存.至此,恢复工作已经全部完成,重新打开资源管理器,发现磁盘已经可以正常识别,打开磁盘,里面的文件也已全部恢复.

图2 重建后的分区表

4 总 结

GPT分区模式的磁盘在个人电脑领域非常常见,而GPT分区表的恢复又在GPT磁盘数据恢复领域占有举足轻重的地位.本文通过实验的方式,总结出了一种快速恢复GPT分区表,进而恢复磁盘数据的方法.实验结果表明,这种方法确实快速、有效.然而,美中不足的是,此方法比较依赖各个分区的DBR,在DBR也被损坏时便无法工作,因此这种情况下的恢复还有待研究.

猜你喜欢

扇区磁盘备份
浅谈数字化条件下的数据备份管理
叶腊石聚合成型及其旋转磁盘的制作方法
分阶段调整增加扇区通行能力策略
它的好 它的坏 详解动态磁盘
创建vSphere 备份任务
解决Windows磁盘签名冲突
Windows10应用信息备份与恢复
空中交通管制扇区复杂网络建模与特性分析
空域扇区网络级联失效抗毁性及优化策略
U盘故障排除经验谈