RAID5破坏的数据恢复流程和思考

问题说明:

4块硬盘组成的RAID5,由于服务器掉电导致无法访问。

使用工具:

raid5系统镜像 raid镜像还原_数据恢复


分析过程

1.明确分析思路:

针对RAID5破坏恢复,首先根据RAID5的特性明确分析的思路,具体分析思路如下:

No1. 做镜像

No2. 分析RAID信息:

Step1. 查找RAID5开始扇区:查看0号扇区是否为MBR,如果不是进行搜索MBR结束标志(查找55 aa);

Step2. 分析RAID5条带大小;

Step3. 分析RAID5的盘序;

Step4. 分析RAID5的校验方向:左结构、右结构;

Step5. 分析RAID5的数据方向:同步、异步。

2.通过工具做镜像

进行数据恢复,首先是不能破坏原有数据,如果直接在原有硬盘上进行数据恢复,一旦恢复失败,就可能导致原有数据被二次破坏,并不不符合数据恢复的原则(原则是不能恢复也不能二次破坏数据)。因此需要把故障盘做成镜像文件或镜像盘进行分析。对文件进行镜像的方法如下:

raid5系统镜像 raid镜像还原_数据恢复_02

本次以镜像文件进行分析,当然通过镜像硬盘一样。4块硬盘镜像后,文件名为0~3.img:

raid5系统镜像 raid镜像还原_raid5系统镜像_03


这些文件的编号只是随意编排的,并不一定与RAID-5中各个硬盘的盘序相符。3.开始分析

Step1. 通过WinHex将文件打开备份镜像:

raid5系统镜像 raid镜像还原_搜索_04


打开0.img后信息如下,其它镜像类似。

raid5系统镜像 raid镜像还原_搜索_05


Step2:分析RAID开始扇区

RAID5开始扇区一般在0号扇区,查看0号扇区,查看4个镜像的0号扇区,发现都没有MBR结束标志,因此判定RAID的开始扇区不是0号扇区。

MBR结构如下:

raid5系统镜像 raid镜像还原_搜索_06


既然物理盘头部都没有MBR,如果没有被破坏,MBR应该在后面,通过WinHex的搜索功能,搜索MBR的结束标志。

raid5系统镜像 raid镜像还原_数据_07


通过搜索并没有找到MBR,只在2.img找到了DBR。

DBR数据结构格式如下:

raid5系统镜像 raid镜像还原_raid5系统镜像_08

根据该格式看,2.img的00-02字节为一个跳转指令,且文件系统为NTFS格式,通过winhex下Boot Sector NTFS模板查看,确实是DBR格式。

raid5系统镜像 raid镜像还原_数据恢复_09


分析1C-1F(隐藏扇区),首先看“隐藏扇区数”的值为0x0000fb04(64260),并不是常规情况下看到的63,这个要引起重视,“隐藏扇区数”也就是本分区的相对开始扇区号,该DBR是我们找到的第一个DBR,也就是说该DBR所在的分区是RAID-5逻辑盘的第一个分区,所以这个“隐藏扇区数”就应该是RAID-5逻辑盘的绝对扇区号。RAID-5逻辑盘的第一个分区开始于64 260扇区,同时也说明在第一个分区之前有64 260个扇区,这些扇区是做什么用的呢?

推算起始扇区位置:64260÷(RAID成员盘数-1)=64260÷(4-1)=21420(因为RAID5有一块冗余,因此做减1操作)。这个值跟该DBR所在扇区的扇区号21 380非常接近,这就说明了这个RAID-5的开始扇区是在物理盘的头部,4块物理盘组成RAID-5逻辑盘之后,先在逻辑盘中拿出了64 260个扇区存储了一些数据,这些数据应该是系统的管理信息,之后从64 260号扇区开始才作为第一个分区的开始,所以逻辑盘的64 260扇区是分区的DBR。

因此该RAID-5开始扇区就在物理盘的头部,但逻辑盘中第一个分区的开始位置在64 260扇区。Step3.分析RAID结构

1.分析条带大小

在NTFS系统中分析条带大小一般通过元文件进行分析(MFT),在DBR的30~37h中存放的是MFT起始簇号,通过上面信息看起始簇号为0x345f34(3432350),通过0dh看,每簇扇区数为1,因此MFT文件在物理盘中的起始扇区为:(3 432 350×1÷3)+(64260÷3)=1 165 536。

在winHex中通过查找跳转到每块物理盘的1165536扇区号,在附近查找MFT文件的文件记录,主要是通过MFT的开始00-03一定为字符”FILE”字符串(对应ASICC码46,49,4C,45)来查找。

raid5系统镜像 raid镜像还原_数据恢复_10


从该文件记录0x80属性的Run List中可以看出$MFT文件有三个碎片,分别是31 20 9E 5F 34,32 58 4E 20 D5 00和33 08 B2 01 A2 7F 1A。以32 0C 1B 00 00 0C为例,碎片信息含义:

raid5系统镜像 raid镜像还原_raid5系统镜像_11


根据这个进行计算,第一个数据流只有32个簇的大小,该分区每簇为1个扇区,32个簇也就是32个扇区,相当于16个文件记录,所以第一个数据流文件记录太少,这么少的数据流显然不够分析RAID-5结构。第二个数据流为20 056个簇,应该够分析了,所以应该找到第二个数据流,从第二个数据流入手分析RAID-5的结构。

第二个数据流的起始簇号为54 560(0xd520),这是以第一个数据流的起始簇号3 432 350(0x345f9e)为起点的相对簇号。我们可以把这个相对簇号转换为第二个数据流在物理盘中的绝对扇区号,具体算法为:54 560×每簇扇区数÷3+第一个数据流在物理盘中的绝对扇区号,起始扇区号大致位置:(54 560×1÷3)+1 165 474(当前扇区号)=1183660。

跳转到每块物理盘的1 183 660扇区附件寻找$MFT文件的第二个数据流,找的时候还有一个要求,就是4块物理盘要在同一个扇区都有文件记录,因为我们分析的时候需要对4块物理盘进行并列分析,所以必须位于同一扇区。

结果发现从1 183 744号扇区开始,每个物理盘都是文件记录了,那么我们的分析就从这里开始。

MFT结构如下:

raid5系统镜像 raid镜像还原_搜索_12


通过两个相邻的记录号相减获取条带大小,对于RAID卡创建的RAID,一般可以通过配置信息就可以获取创建的RAID5条带大小。

通过记录号获取条带大小分析如下:

首先分析4块物理盘1 183 744号扇区的内容

raid5系统镜像 raid镜像还原_数据恢复_13

raid5系统镜像 raid镜像还原_搜索_14


raid5系统镜像 raid镜像还原_数据恢复_15


raid5系统镜像 raid镜像还原_搜索_16


通过分析3.img文件看,1 183 744号扇区从0x30属性往后,就是非法数值了,显然这是一个校验扇区,而其它硬盘该扇区为正常的文件记录,其中硬盘0的文件记录号为47,硬盘1的文件记录号为111,硬盘2的文件记录号为175,两两之间都相差64个文件记录,通过前面MFT信息看,每个文件记录为2个扇区,所以条带大小为128扇区。

分析盘序和校验方向:

从4块物理盘的1 183 744号扇区再往后跳转128个扇区,这样就进入了下一个条带组,从这个新的条带组的扇区中分析每块物理盘的记录号以及哪块盘是校验,分析完再往后跳转128个扇区。分析的同时把相应数据记录如下:

raid5系统镜像 raid镜像还原_数据恢复_17

从每块物理盘相应条带中的记录号和校验位置,立刻能判断出该RAID5的结构就是左同步,盘序跟4个镜像文件的编号相符。

RAID5左同步判别:

No1. 校验块从最后一块物理盘开始写起,然后依次往前面的盘中写入,当写到第一块物理盘后再回到最后一块物理盘,依次循环。

No2. 每个条带组内的第一个数据块首先写入校验块所在物理盘的下一物理盘中(注意看下图中数据块2和3以及数据块8和9的写入顺序),其余数据块再依次写入。

raid5系统镜像 raid镜像还原_搜索_18

Step4.数据重组

通过R-studio进行数据重组,打开工具,根据盘序加入镜像,如下图,

raid5系统镜像 raid镜像还原_数据恢复_19


填写参数:条带大小64k(128扇区),左同步RAID5,硬盘个数4,创建好RAID5.

raid5系统镜像 raid镜像还原_数据_20


在创建完成的虚拟RAID5下并没有分区出现,原因是这个RAID5的逻辑盘从64 260扇区开始,所以我们还需要在这个创建完成的虚拟RAID5上再做一个区域,区域开始位置是64 260扇区,大小就是第一个分区的大小,具体数值在前面DBR中可以看到,

raid5系统镜像 raid镜像还原_搜索_21


做好分区后,就可以看到硬盘上的信息了,如下:

raid5系统镜像 raid镜像还原_搜索_22

总结:
通过上面RAID5步骤分析,可以看出,对于恢复数据首先要把故障盘进行镜像,通过对镜像的分析对数据进行恢复。恢复数据首先要对文件系统和分区格式有初步了解,并根据文件系统和分区特性一步步对RAID5的分区、盘序、结构进行确定,最终通过工具进行恢复,当然也可以通过手动进行修改参数进行恢复。
思考:
在服务器故障中可能会存在RAID5破坏的情况,通过对RAID5的数据恢复过程,我们也可以将相同方法用到后续遇到的服务器问题中,并可以通过对RAID5的特性和文件系统特性分析,开发对应工具来应对可能遇到的类似问题。