恢复GPT分区的研究与实现

2021-08-02 03:48陈培德吴建平
计算机技术与发展 2021年7期
关键词:扇区磁盘校验

陈培德,吴建平

(云南大学 信息学院,云南 昆明 650223)

0 引 言

全局唯一标识GPT是globally unique identifier partition table的缩写,其含义是“全局唯一标识磁盘分区表”[1],它是可扩展固件接口(EFI)标准的一部分[2]。GPT的出现是为了替代旧式的MBR(master boot record)[3],主要解决了MBR分区表不支持容量大于2.2 TB的分区问题[4]。

由于MBR分区最多包含4个项目,多于4分区则采用扩展分区的形式来管理,每个分区项目定义了主分区在磁盘上的位置[5]。

目前,微软公司Windows 10使用了GPT磁盘分区格式,同时Windows 10不再支持MBR。计算机如果使用Windows 10就必须采用MBR分区格式,这样不同分区表误操作、误转换的结果是硬盘中原有的磁盘分区表丢失,磁盘中的数据不能正常读取。在Windows 7和Windows 10用户数量庞大的今天,这种因GPT分区表问题导致硬盘中的数据无法读取和使用的问题较为突出[6]。

当GPT存储磁盘出现误操作或操作系统本身故障所造成的分区表损坏、数据不可见、不可读的数据等问题的时候,有可能是GPT分区表的逻辑出错,可以通过一定的技术手段,对保存在台式机硬盘、笔记本硬盘、服务器硬盘等设备上丢失的宝贵数据进行抢救和恢复。

1 GPT磁盘介绍

从整体来看,GPT磁盘主要由6大部分组成[7]。即保护MBR、GPT头、GPT分区表、GPT分区区域(即文件系统所在区域)、GPT分区表备份和GPT头备份[8]。大致结构如图1所示[8](注:假设GPT磁盘的扇区号范围为0 ~n-1,其中n为GPT磁盘的总扇区数)。

图1 GPT磁盘的整体结构

(1)保护MBR。

保护MBR位于GPT磁盘的0号扇区[9],也是由主引导记录、磁盘签名、MBR分区表和结束标志4个部分组成[10-11]。在MBR分区表中,分区标志为0XEE[2],相对扇区为1,总扇区数为4 294 967 295,也就是分区总数的最大值[2],即该磁盘已经被GPT分区占用,不能再进行MBR分区。

(2)GPT头。

GPT头位于GPT磁盘的1号扇区[12],该扇区是在将MBR磁盘转换成GPT磁盘后自动生成的,GPT头定义了GPT分区各参数的基本信息[12],GPT头也就是对整个GPT磁盘的整体描述。其定义如表1所示。

表1 GPT头各项参数含义

续表1

(3)GPT分区表。

GPT分区表位于GPT磁盘的2~33号扇区,共占用32个扇区,每个分区表占128字节,最多可以容纳128个分区表,由于第1个分区表为系统保留,所以用户在GPT磁盘上最多可以再建立127个分区,每个分区表管理一个分区。其定义如表2所示。

表2 GPT分区表各项参数含义

表3 GPT分区类型GUID定义说明[2]

(4)分区区域。

GPT分区区域是整个GPT磁盘中最大的区域,位于GPT磁盘的中间位置,GPT分区区域的开始扇区和结束扇区由GPT头定义[2],一般情况下,开始扇区为34号扇区,而结束扇区为GPT磁盘总扇区数减去35。该区域由多个具体的分区组成,如:微软保留分区、EFI系统分区、LDM元数据分区、LDM数据分区、OEM分区和主分区等[2]。各分区的开始扇区和结束扇区在各分区表中均有定义。

(5)分区表备份。

一般情况下,分区表备份位于GPT磁盘的倒数33号扇区~倒数2号扇区,也是占用32个扇区,是GPT分区表位于GPT磁盘的2~33号扇区的备份。其定义如表4所示。

表4 GPT头备份各参数含义

(6)GPT头备份。

GPT头备份位于GPT磁盘的倒数1号扇区,该扇区也是在将MBR磁盘转换成GPT磁盘后自动生成的,GPT头备份也是定义了GPT分区各参数的基本信息,但该扇区不是GPT头的简单备份,GPT头备份对GPT分区各参数基本信息的定义与GPT头对GPT分区各参数基本信息的定义稍有不同。GPT头备份也是对整个GPT磁盘的整体描述。

2 实验环境及制作实验素材

2.1 实验环境

(1)操作系统:Windows 7;

(2)数据恢复软件及分析工具:WinHex 15.08。

2.2 制作GPT模板

(1)在Windows 7操作系统下,使用Windows 7的虚拟磁盘管理功能在D盘的根目录上建立一个名为abc1.vhd的文件,文件大小为1 GB;

(2)将abc1.vhd文件附加为虚拟磁盘1,转换成GPT磁盘;在磁盘1上依次建立6个分区,磁盘1中6个分区的容量分别为150 MB、60 MB、100 MB、180 MB、230 MB和270 MB;

(3)使用WinHex软件打开磁盘1,将磁盘1的0号扇区以文件的形式保存,文件为“保护MBR.vhd”;

将磁盘1的1号扇区以文件的形式保存,文件为“GPT头.vhd”;

将磁盘1的2~3号扇区以文件的形式保存,文件名为“GPT分区表.vhd”;

将磁盘1的2 097 151号扇区以文件的形式保存,文件为“GPT头备份.vhd”;

至此,保护的MBR、GPT头、GPT分区表、GPT头备份的模板已制作完成。

(4)分离abc1.vhd文件。

2.3 制作实验素材

(1)在Windows 7操作系统下,使用Windows 7的虚拟磁盘管理功能在D盘的根目录上建立一个名为abc2.vhd的文件,文件大小为2 GB;

(2)将abc2.vhd文件附加为虚拟磁盘2,转换成GPT磁盘;在磁盘1上依次建立4个分区,并对4个分区进行快速格式化操作,文件系统均选择NTFS,磁盘1中4个分区依次对应4个逻辑盘情况如下:

H盘,文件系统:NTFS,容量:350 MB

I盘,文件系统:NTFS,容量:600 MB

J盘,文件系统:NTFS,容量:800 MB

K盘,文件系统:NTFS,容量:260 MB

(3)分别在H盘、I盘、J盘和K盘中存储一些文件夹和文件;

(4)将H盘、I盘、J盘和K盘的GPT分区删除;并将GPT磁盘转换为MBR磁盘。

至此,实验素材已制作完成。

3 恢复GPT分区的基本思路与方法

3.1 恢复GPT分区的基本思路

(1)恢复0号扇区保护的MBR;

(2)恢复GPT头;

(3)恢复GPT头备份;

(4)恢复GPT分区表和GPT分区表备份。

3.2 恢复GPT分区的基本方法

恢复GPT分区的基本方法如下:

(1)通过计算机管理中的磁盘管理功能将MBR磁盘转换为GPT磁盘;从而实现恢复0号扇区保护的MBR、GPT头和GPT头备份;

(2)由于将MBR磁盘转换为GPT磁盘后,在2号扇区只存储了一个微软保留的GPT分区表,所以,GPT头中的“GPT头CRC32校验和”和“GPT分区表CRC32校验和”这两个参数要重新计算[13];

(3)同理,GPT头备份中的“GPT头备份CRC32校验和”和“GPT分区表备份CRC32校验和”这两个参数也要重新计算;

(4)通过WinHex的“扫描丢失分区”获得4个逻辑盘的开始扇区号和4个逻辑盘的容量,通过4个逻辑盘的容量可以计算4个逻辑盘的总扇区数;

(5)通过4个逻辑盘的开始扇区号和总扇区数,可以计算4个逻辑盘的结束扇区号;

(6)将“GPT分区表.vhd”文件复制到GPT分区表所在扇区号,并修改4个GPT分区表中的开始扇区号和结束扇区号;

(7)通过GPT分区表恢复GPT分区表备份;

(8)通过GPT分区表计算GPT头和GPT头备份中的“GPT分区表CRC32校验和”;

(9)计算GPT头中的“GPT头CRC32校验和”;

(10)计算GPT头备份中“GPT头备份CRC32校验和”。

通过以上操作,可以完整恢复GPT分区表、GPT分分区表备份、GPT头和GPT头备份。

4 恢复GPT分区的步骤

根据恢复GPT分区的基本思路与方法,恢复GPT分区的步骤如下:

1、获得4个逻辑盘的基本情况。

(1)在Windows 7操作系统下,启动WinHex;

(2)文件-->打开-->选择D盘根目录上的abc2.vhd文件,打开D盘根目录上的abc2.vhd文件;

(3)专家-->映象文件为磁盘,将abc2.vhd文件映像为磁盘;

(4)工具-->磁盘工具-->扫描丢失分区,可以获得4个丢失分区的基本情况,如图2所示;

图2 获得4个丢失分区的情况

(5)从图2可以获得4个逻辑盘的文件系统、容量和开始扇区号,填入表5中;

(6)通过各逻辑盘容量可以计算出各逻辑盘的总扇区数;

H盘总扇区数=容量*1 024*1 024/512

=350*1 024*1 024/512

=716 800

I盘总扇区数=容量*1 000*1 024*1 024/512

=0.6*1 024*1 024*1 024/512

=1 228 800

J盘总扇区数=容量*1 024*1 024*1 024/512

=0.8*1 024*1 024*1 024/512

=1 638 400

K盘总扇区数=容量*1 024*1 024/512

=260*1 024*1 024/512

=532 480

(7)通过各逻辑盘的总扇区数和DBR所在扇区号可以计算DBR备份所在扇区号;

H盘结束扇区= H盘开始扇区+H盘总扇区数-1

=65 664+716 800-1

=782 463

I盘结束扇区= I盘开始扇区+I盘总扇区数-1

=782 464+1 228 800-1

=2 011 263

J盘结束扇区= J盘开始扇区+J盘总扇区数-1

=2 011 264+1 638 400-1

=3 649 663

K盘结束扇区= K盘开始扇区+K盘总扇区数-1

=3 649 664+532 480-1

=4 182 143

将H盘、I盘、J盘和K盘的总扇区数和结束扇区号填入表5。

表5 磁盘1各逻辑盘基本情况

2、将MBR磁盘转换为GPT磁盘。

(8)在Windows 7操作系统下,使用Windows 7的虚拟磁盘管理功能附加D盘根目录上的abc2.vhd文件为磁盘1;

(9)将光标移动到“磁盘1 基本2 GB 联机”处,右击,从弹出的快捷菜单中选择“转换成GPT磁盘(V)”;

至此,磁盘1由MBR磁盘转换为GPT磁盘。

(10)将光标移动到“磁盘1 基本1.97 GB 联机”处,右击,从弹出的快捷菜单中选择“分离VHD”,将磁盘1分离。

3、重建4个逻辑盘GPT分区表。

(1)在Windows 7操作系统下,启动WinHex;

(2)文件-->打开-->选择D盘根目录上的abc2.vhd文件,打开D盘根目录上的abc2.vhd文件;

(3)专家-->映像文件为磁盘,将abc2.vhd文件映像为磁盘;

(4)打开“GPT分区表.vhd”文件,并全选该文件,单击“复制”按钮;

(5)将标移动到abc2.vhd文件的2号扇区开始位置,单击“粘贴”按钮;

(6)视图-->模板管理器-->GPT Partition table,在图3中分别输入4个逻辑盘的开始扇区和结束扇区。

图3 通过模版输入4个分区的开始扇区和结束扇区

至此,GPT分区表已恢复。

4、恢复4个逻辑盘GPT分区表备份。

(7)从GPT头可以获得GPT分区表备份在4 194 271号扇区,将2号扇区复制到4 194 271号扇区,至此,GPT分区表备份已恢复。

5、重建GPT头。

(8)选中2号扇区到33号扇区,即GPT分区表所在扇区号;

(9)工具-->比较Hash值-->CRC32(32Bit),可以获得GPT分区表的CRC32校验和为“F0E2AC5D”;GPT分区表的CRC32校验和在GPT头中的存储形式采用小头位序,占4个字节,所以,在GPT头扇区偏移0X58~0X5B中的存储形式为“5D AC E2 F0”;

(10)将1号扇区偏移0X58~0X5B处的值修改为“5D AC E2 F0”(注:存储形式);

(11)将1号扇区偏移0X20~0X23处的值修改为“00 00 00 00 00”(注:存储形式);

(12)选中1号扇区偏移0X00~0X5B这92个字节;

(13)工具-->比较Hash值-->CRC32(32Bit),可以获得GPT头的CRC32校验和为“DE370F6F”;GPT头的CRC32校验和在GPT头中的存储形式采用小头位序,占4个字节,所以,在GPT头扇区偏移0X20~0X23中的存储形式为“6F 0F 37 DE”;

(14)将1号扇区偏移0X20~0X23处的值修改为“6F 0F 37 DE”(注:存储形式);然后存盘。

至此,GPT头已恢复。

6、重建GPT头备份。

(15)将光标移动到4 194 303号扇区,将偏移0X58~0X5B处的值修改为“5D AC E2 F0”(注:存储形式);即修改GPT分区表备份的CRC32校验和;

(16)将4 194 303号扇区偏移0X20~0X23处的值修改为“00 00 00 00 00”(注:存储形式);

(17)选中4 194 303号扇区偏移0X00~0X5B,工具-->比较Hash值-->CRC32(32Bit),可以获得GPT头的CRC32校验和为“7E5F9703”;

(18)将4 194 303号扇区偏移0X20~0X23处的值修改为“03 97 5F 7E”(注:存储形式);然后存盘。

至此,GPT头备份已恢复。

完成以上操作后,GPT磁盘中的保护MBR、GPT头、GPT分区表、GPT分区表备份和GPT头备份已成功恢复。通过计算机管理中的磁盘管理附加abc2.vhd后,在资源管理器中可以看到到H盘、I盘、J盘和K盘符。

5 在0号扇区建立4个MBR分区

如果GPT磁盘总容量小于2.2 TB,且分区总数小于4个时,也可以在硬盘0号扇区通过重建4个MBR的形式来恢复各逻辑盘中的全部数据。

由于MBR分区表存储在0号扇区,逻辑盘的开始扇区也就是0号扇区MBR分区表中的相对扇区;根据相对扇区、总扇区数和分区标志可以得到存储在0号扇区的4个MBR分区表如表6所示。

表6 存储在0号扇区的4个MBR分区

使用WinHex软件打开abc2.vhd,并映像为磁盘,将H盘、I盘、J盘和K盘的4个MBR分区填入到0号扇区偏移0X01BE~0X01FD处,如图4所示;然后存储并退出WinHex;即可恢复0号扇区的4个MBR分区表。

图4 在0号扇区输入4个分区的MBR分区表

通过计算机管理中的磁盘管理附加abc2.vhd后,在资源管理器中可以看到H盘、I盘、J盘和K盘符。

6 结束语

综上所述,当GPT磁盘中的分区被删除,并将GPT磁盘转换为MBR磁盘后,通过扫描丢失分区功能获得逻辑盘的开始扇区号和容量,通过容量计算各逻辑盘的总扇区数,通过各逻辑性盘的开始扇区号和总扇区数,计算出各逻辑盘的结束扇区号,通过修改GPT分区表中的开始扇区号和结扇区号,就可以恢复GPT分区表。

通过计算GPT头中的GPT分区表CRC32校验和与GPT头校验和就可以恢复GPT头;通过计算GPT头备份中的GPT分区表CRC32校验和与GPT头备份校验和就可以恢复GPT头备份。这样也就可以恢复GPT磁盘中各逻辑盘的全部数据;如果GPT磁盘总容量小于2.2 TB,且分区总数小于4个时,也可以在硬盘0号扇区通过重建MBR的形式来恢复各逻辑盘中的全部数。

猜你喜欢
扇区磁盘校验
MBR磁盘转换为GPT磁盘的研究与实现
复杂多耦合仿真模型校验工具研究
分阶段调整增加扇区通行能力策略
使用Excel朗读功能校验工作表中的数据
电能表在线不停电校验技术
它的好 它的坏 详解动态磁盘
解决Windows磁盘签名冲突
浅述“4K对齐”及其发展前景
U盘故障排除经验谈
精通文件校验的“门道”