重建GPT分区的研究与实现
2019-02-25陈培德吴建平钱文华曹良坤王林茂
陈培德,吴建平,钱文华,曹良坤,王林茂
(云南大学 信息学院 云南省高校数字媒体技术重点实验室,云南 昆明 650223)
0 引 言
GPT是globally unique identifier partition table的缩写,其含义是“全局唯一标识磁盘分区表”[1]。GPT的出现是为了替代旧式的MBR(master boot record),主要解决MBR分区表不支持容量大于2.2 TB的分区问题[2]。
目前,微软公司Windows 8使用了GPT磁盘分区格式,同时Windows 8不再支持MBR。计算机如果使用Windows 7就必须采用MBR分区格式,这样不同分区表误操作、误转换的结果是硬盘中原有的磁盘分区表丢失,磁盘中的数据不能正常读取。在Windows 7和Windows 8用户数量庞大的今天,这种因GPT分区表问题导致硬盘中的数据无法读取和使用的问题较为突出。
当GPT存储磁盘出现误操作或操作系统本身故障导致的分区表损坏、数据不可见、不可读的数据等问题时,有可能是GPT分区表的逻辑出错,可以通过一定的技术手段,将保存在台式机硬盘、笔记本硬盘、服务器硬盘等设备上丢失的宝贵数据进行抢救和恢复。
当GPT分区被破坏后,恢复分区常用的方法是:使用DiskGenius软件的“搜索已丢失分区(重建分区表)”功能来重新建立分区,但该方法只能重建MBR分区,不能重建GPT分区。
1 GPT磁盘简介
从整体来看,GPT磁盘主要由6大部分组成,即保护MBR、GPT头、GPT分区表、GPT分区区域(即文件系统所在区域)、GPT分区表备份和GPT头备份[3]。大致结构如图1所示[4](注:假设GPT磁盘的扇区号范围为0~n-1,其中n为GPT磁盘的总扇区数)。
图1 GPT磁盘的整体结构
(1)保护MBR。
保护MBR位于GPT磁盘的0号扇区,也是由主引导记录、磁盘签名、MBR分区表和结束标志4个部分组成[5]。在MBR分区表中,分区标志为0XEE,相对扇区为1,总扇区数为4 294 967 295,也就是分区总数的最大值,即该磁盘已经被GPT分区占用,不能再进行MBR分区[6]。
(2)GPT头。
GPT头位于GPT磁盘的1号扇区[6],该扇区是在将MBR磁盘转换成GPT磁盘后自动生成的,GPT头定义了GPT分区各参数的基本信息[7]。
(3)GPT分区表。
GPT分区表位于GPT磁盘的2~33号扇区,共占用32个扇区,每个分区表占128字节,最多可以容纳128个分区表[7],由于第1个分区表为系统保留,所以用户在GPT磁盘上最多可以再建立127个分区,每个分区表管理一个分区。
(4)分区区域。
GPT分区区域是整个GPT磁盘中最大的区域,位于GPT磁盘的中间位置,GPT分区区域的开始扇区和结束扇区由GPT头定义[7]。一般情况下,开始扇区为34号扇区,而结束扇区为GPT磁盘总扇区数减去35。该区域由多个具体的分区组成,如:微软保留分区、EFI系统分区、LDM元数据分区、LDM数据分区、OEM分区和主分区。各分区的开始扇区和结束扇区在各分区表中均有定义。
(5)分区表备份。
一般情况下,分区表备份位于GPT磁盘的倒数33号扇区~倒数2号扇区,也是占用32个扇区,是GPT分区表位于GPT磁盘的2~33号扇区的备份。
(6)GPT头备份。
GPT头备份位于GPT磁盘的倒数1号扇区,该扇区也是在将MBR磁盘转换成GPT磁盘后自动生成的,GPT头备份也是定义了GPT分区各参数的基本信息,但该扇区不是GPT头的简单备份,GPT头备份对GPT分区各参数基本信息的定义与GPT头对GPT分区各参数基本信息的定义稍有不同。
2 实验环境及制作实验素材
2.1 实验环境
(1)操作系统:Windows 7;
(2)数据恢复软件及分析工具:WinHex 15.08。
2.2 制作实验素材
(1)在Windows 7操作系统下,使用Windows 7的虚拟磁盘管理功能在D盘的根目录上建立一个名为abcd.vhd的文件,文件大小为1 GB。
(2)将abcd.vhd文件附加为虚拟磁盘1,转换成GPT磁盘;在磁盘1上依次建立4个分区,并对4个分区进行格式化操作,磁盘1中4个分区依次对应4个逻辑盘,如下所示:
·H盘,文件系统:FAT32,容量:200 MB;
·I盘,文件系统:NTFS,容量:160 MB;
·J盘,文件系统:FAT32,容量:300 MB;
·K盘,文件系统:NTFS,容量:330 MB。
(3)分别在H盘、I盘、J盘和K盘中存储一些文件夹和文件;磁盘1总体布局如图2所示。
图2 磁盘1的总体布局
(4)使用Windows 7的磁盘管理功能将H盘、I盘、J盘和K盘的GPT分区删除。
(5)将GPT磁盘转换为MBR磁盘;磁盘1总体布局如图3所示。
至此,实验素材已制作完成。
3 删除GPT分区前、后硬盘变化情况对比
删除GPT分区前,各逻辑盘在磁盘1中的分布情况如图2所示。即在磁盘1的2号扇区建立了4个分区(对应微软保留分区、H盘、I盘和J盘),在3号扇区建立了1个分区(对应盘符为K盘),各分区在硬盘中的位置如表1所示。
表1 磁盘1各逻辑盘在硬盘中的位置
从删除GPT分区前、后对比硬盘变化可知:
(1)删除GPT分区并转换为MBR磁盘后,0号扇区的保护MBR分区表已经被删除;
(2)GPT头仍然完好保存;
(3)第1个分区表(即对应微软保留分区)仍然保存;
(4)各逻辑盘中的数据仍然完好无损;
(5)第1个分区表备份(即对应微软保留分区)仍然保存;
(6)GPT头备份仍然完好保存。
由于各逻辑盘的GPT分区表和GPT分区表备份已经被删除,虽然各逻辑盘中的数据完好无损,但是通过磁盘管理附加磁盘1,在资源管理器中无法查看到各逻辑盘盘符,也就无法查看各逻辑盘中的文件和文件夹。
4 重建GPT分区的基本思路与方法
经过大量实验发现,在GPT磁盘中建立一个分区后,只要不将对应逻辑盘进行格式化操作,那么系统只将逻辑盘的开始扇区填充为“00”,而逻辑盘的剩余扇区即完好无损地保存着。
根据这一特点,恢复GPT分区中各逻辑盘的基本思路与方法如下:
(1)通过开始扇区(即DBR所在扇区)的特征值,查找并记录下各逻辑盘的DBR和DBR备份所在扇区号[8];
(2)通过DBR中的BPB参数,获得各逻辑盘的总扇区数[8];
(3)通过各逻辑盘的总扇区数,计算各逻辑盘的总容量;
(4)通过各逻辑盘总容量,依次建立各逻辑盘(注:在建立各逻辑盘时,不要格式化各逻辑盘) ;
(5)最后通过各逻辑盘的DBR备份依次恢复各逻辑盘的DBR[9]。
通过磁盘管理附加磁盘1,在资源管理器中可以查看到各逻辑盘的盘符。
5 重建GPT分区的步骤
根据重建GPT分区的基本思路与方法,重建GPT分区的步骤如下:
1.获得4个逻辑盘的基本情况。
(1)在Windows 7操作系统下,启动WinHex;
(2)使用WinHex的文件功能,打开D盘根目录上的abcd.vhd文件,并映像为磁盘;
(3)通过FAT32_DBR的特征值,查找FAT32_DBR及其备份,分别在65 664、65 670、802 944以及802 950号扇区找到;
(4)经过确认,65 664号扇区为FAT32_DBR,而65 670号扇区为65 664号扇区的备份,即FAT32_DBR备份;802 944号扇区为FAT32_DBR,而802 950号扇区为802 944号扇区的备份,即FAT32_DBR备份;
(5)通过NTFS_DBR特征值,查找NTFS_DBR及其备份,分别在475 264、802 943、1 417 344、2 093 183号扇区找到;
(6)经过确认,475 264号扇区为NTFS_DBR,而802 943号扇区为475 264号扇区的备份,即NTFS_DBR备份;802 943号扇区为NTFS_DBR,而2 093 183号扇区为802 943号扇区的备份,即NTFS_DBR备份;
(7)从65 664、475 264、802 944和802 943号扇区(即各DBR)所获得的总扇区数分别为327 680、614 399、675 840和409 599;
(8)退出WinHex。
综合步骤4、步骤6和步骤7,4个逻辑盘的DBR、DBR备份、总扇区数、容量和文件系统如表2所示。
表2 磁盘1各逻辑盘的基本情况
注:NTFS_DBR中存储的总扇区数要比实际分区所占扇区数少1个扇区。
2.将MBR磁盘转换为GPT磁盘。
(1)在Windows 7操作系统下,使用Windows 7的虚拟磁盘管理功能附加D盘根目录上的abcd.vhd文件为磁盘1;
(2)将光标移动到“磁盘1 基本1 023 MB 联机”处,右击,从弹出的快捷菜单中选择“转换成GPT磁盘(V)”。
至此,磁盘1由MBR磁盘转换为GPT磁盘。
3.重建4个逻辑盘GPT分区表。
(1)将光标移动到“磁盘1的992 MB 未分配”处,右击,从弹出的快捷菜单中选择“新建简单卷(I)…”;
(2)出现“新建简单卷向导”第1个窗口,单击“下一步”按钮;
(3)出现“新建简单卷向导”第2个窗口—指定卷大小,在“简单卷大小(MB)(S):”右侧的列表框中输入第1个逻辑盘的大小“200”,单击“下一步”按钮;
(4)出现“新建简单卷向导”第3个窗口—分配驱动器号和路径,在“分配以下驱动器号(A):”右侧的列表框中选择“H”,单击“下一步”按钮;
(5)出现“新建简单卷向导”第4个窗口—格式化分区,选择“不要格式化这个卷(D):”选项,单击“下一步”按钮;
(6)出现“新建简单卷向导”第5个窗口,单击“完成”按钮;
(7)重复步骤1~6,共计3次;在步骤3出现“新建简单卷向导”第2个窗口—指定卷大小,在“简单卷大小(MB)(S):”右侧的列表框中依次输入第2个、第3个和第4个逻辑盘的大小“160”、“300”和“330”;在出现“新建简单卷向导”第3个窗口—分配驱动器号和路径,在“分配以下驱动器号(A):”右侧的列表框中依次选择“I”、“J”和“K”。
至此,磁盘1中的4个GPT分区已经建立。
将光标移动到“磁盘1 基本1023 MB 联机”处,右击,从弹出的快捷菜单中选择“分离VHD”。
4.通过各自的DBR备份恢复DBR。
由于4个逻辑盘的DBR均被破坏,所以4个逻辑盘的文件系统均为RAW,需要通过各自的DBR备份来恢复,步骤如下:
(1)启动WinHex;
(2)使用WinHex的文件功能,打开D盘根目录上的abcd.vhd文件,并映像为磁盘;
(3)将65 670号扇区复制到65 664号扇区;将802 943号扇区复制到475 264号扇区;将802 950号扇区复制到802 944号扇区;将2 093 183号扇区复制到1 417 344号扇区;然后,存盘并退出WinHex。
至此,各逻辑盘的DBR已经通过DBR备份恢复成功。磁盘1总体布局如图2所示。
通过磁盘管理附加磁盘1,在资源管理器中可以查看各逻辑盘的盘符,并且可以看到各逻辑盘中的所有文件和文件夹。
6 通过重建MBR分区来恢复各逻辑盘中的数据
如果硬盘总容量小于2.2 TB,且分区总数小于或等于4个时,可以使用在硬盘0号扇区建立对应MBR分区表的形式来恢复各逻辑盘中的数据。
由于磁盘1正好满足这一条件,所以可以通过在硬盘0号扇区建立4个MBR分区表[10]。方法如下:
1.从表2中4个逻辑盘的DBR所在扇区号和总扇区数可以计算出磁盘1中H盘、I盘、J盘和I盘在硬盘0号扇区的分区表,如表3所示。
表3 分区表
对4个分区表说明如下:
(1)由于H盘、I盘、J盘和K盘均不引导系统,各分区表中第1个字节的值为“00”[11];
(2)目前硬盘的存取方式均为LBA,分区表中第2~4字节未定义,可以填充任意值,这里填充“01 01 00”[12];
(3)由于H盘和J盘的文件系统为FAT32,所以,分区标志为“0C”[13];而I盘和K盘的文件系统为NTFS,所以,分区标志为“07”[14];
(4)分区表中第6~8字节未定义,可以填充任意值,这里填充“FE FF FF”;
(5)分区表中第9~12字节为相对扇区,即各逻辑盘DBR所在扇区号;
(6)分区表中第13~16字节为总扇区数,即各逻辑盘所占扇区数。
2.将这4个分区表填入到硬盘0号扇区偏移0X01BE~0X01FD处,然后存盘并退出WinHex。磁盘1总体布局如图4所示。
图4 恢复4个MBR分区后的磁盘1总体布局
通过磁盘管理附加磁盘1,在资源管理器中可以查看各逻辑盘的盘符,并且可以看到各逻辑盘中的所有文件和文件夹。
7 结束语
综上所述,当GPT磁盘中的分区被删除,并将
GPT磁盘转换为MBR磁盘后,只要查找并获得各逻辑盘的DBR,通过DBR中的总扇区数,计算出各逻辑盘的总容量;依次重建各逻辑盘,在建立各逻辑盘时,只要不格式化各逻辑盘,最后通过各逻辑盘的DBR备份恢复各自的DBR,便可以恢复GPT磁盘中各逻辑盘的全部数据;如果GPT磁盘总容量小于2.2 TB,且分区总数小于4个时,也可以在硬盘0号扇区通过重建MBR的形式来恢复各逻辑盘中的全部数。