该RAID-5由4块300GB的SAS硬盘组成,因服务器掉电而导致RAID-5无法访问。把4块SAS硬盘去RAID化后插入SAS模组中分别做成文件镜像,然后用WinHex同时打开4个文件镜像进行分析。首先做一个约定,我们这里称文件“0.img”为“硬盘0”、文件“1.img”为“硬盘1”、文件“2.img”为“硬盘2”、文件“3.img”为“硬盘3”,但请读者注意,这些文件的编号只是随意编排的,并不一定与RAID-5中各个硬盘的盘序相符。
下面开始分析该RAID-5的结构。
首先用WinHex查看“硬盘0”的第一个扇区,内容如图17-66所示。
“硬盘1”第一个扇区的内容如图17-67所示。
“硬盘2”第一个扇区的内容如图17-68所示。
“硬盘3”第一个扇区的内容如图17-69所示。
从图中看这4块成员盘的第一个扇区都不是MBR,而是一些杂乱无章看不懂的数据,非常像是服务器的配置信息,从这一点看该RAID的开始扇区应该不在硬盘的头部。
既然物理盘头部都没有MBR,那么MBR应该在配置信息之后,所以下一步可以在每块物理盘中搜索MBR。搜索MBR的方法即搜索MBR的结束标志“55 AA”。
经过搜索,在4块物理盘中都没有发现MBR,只在硬盘2的21380号扇区找到一个DBR,如图17-70所示。
这是一个NTFS文件系统的DBR,我们用模板看看其BPB参数,如图17-71所示。
首先我们注意“隐藏扇区数”的值为64 260,并不是常规情况下看到的63,这个要引起重视,“隐藏扇区数”也就是本分区的相对开始扇区号,该DBR是我们找到的第一个DBR,也就是说该DBR所在的分区是RAID-5逻辑盘的第一个分区,所以这个“隐藏扇区数”就应该是RAID-5逻辑盘的绝对扇区号。
RAID-5逻辑盘的第一个分区开始于64 260扇区,同时也说明在第一个分区之前有64 260个扇区,这些扇区是做什么用的呢?
现在我们先做一个计算:64260÷(RAID成员盘数-1)=64260÷(4-1)=21420。这个值跟该DBR所在扇区的扇区号21 380非常接近,这就说明了这个RAID-5的开始扇区是在物理盘的头部,4块物理盘组成RAID-5逻辑盘之后,先在逻辑盘中拿出了64 260个扇区存储了一些数据,这些数据应该是系统的管理信息,之后从64 260号扇区开始才作为第一个分区的开始,所以逻辑盘的64 260扇区是分区的DBR。
经过以上分析可以确定该RAID-5开始扇区就在物理盘的头部,但逻辑盘中第一个分区的开始位置在64 260扇区,这个要记住,在后面做RAID-5虚拟重组是会用到。
经过第一步的分析我们知道,4块物理盘的头部都有很多管理信息,这些数据很难看懂,所以无法用这些信息来分析盘序、块大小等结构,甚至连哪块物理盘可能是0号盘都无法看出,那么我们只能去找$MFT文件区域,从文件记录上入手分析RAID-5的结构。
找$MFT文件的方法一是可以通过搜索来找,二是可以通过计算来确定其大概位置,然后在附近稍作搜索就能快速找到。我们采用先计算的方法。
从图17-71中可以看到该分区$MFT文件起始簇号为3 432 350,每簇扇区号为1,所以$MFT文件在物理盘中的大概起始扇区号的计算方法为:(3 432 350×1÷3)+(64260÷3)=1 165 536,这就是把$MFT文件在分区中的起始簇号转化为在物理盘上的起始扇区号的数值,但因为RAID-5的数据是以条带为单位循环写入,所以计算出来的这个扇区号不会完全精确,只是一个出入非常小的大概位置。
用WinHex跳转到每块物理盘的1 165 536扇区,在附近很快找到了$MFT文件的文件记录,是在硬盘1的1 165 474号扇区,如图17-72所示。
硬盘1的1 165 474号扇区是$MFT文件自身的文件记录,也就是$MFT文件中的第一个文件记录。从该文件记录0x80属性的Run List中可以看出$MFT文件有三个碎片,我们从Run List模板中看一下具体数值,如图17-73所示。
从Run List模板中可以看出,第一个数据流只有32个簇的大小,该分区每簇为1个扇区,32个簇也就是32个扇区,相当于16个文件记录,所以第一个数据流文件记录太少,这么少的数据流显然不够分析RAID-5结构。从模板中看第二个数据流为20 056个簇,应该够分析了,所以应该找到第二个数据流,从第二个数据流入手分析RAID-5的结构。
第二个数据流的起始簇号为54 560,这是以第一个数据流的起始簇号3 432 350为起点的相对簇号。我们可以把这个相对簇号转换为第二个数据流在物理盘中的绝对扇区号,具体算法为:54 560×每簇扇区数÷3+第一个数据流在物理盘中的绝对扇区号,即
(54 560×1÷3)+1 165 474=1183660
这就是$MFT文件第二个数据流在物理盘中的起始扇区号,当然这个扇区号也不会完全精确,只是一个出入非常小的大概位置。
有读者可能觉得这样算太麻烦,直接搜索不是很方便吗。如果通过直接搜索的方式去找$MFT文件,就可能导致找到的$MFT文件不一定是本分区的$MFT文件,而是以前的逻辑盘或者物理盘中遗留的。用这些$MFT文件进行RAID结构分析,会导致分析的结果有误。
下面跳转到每块物理盘的1 183 660扇区附件寻找$MFT文件的第二个数据流,找的时候还有一个要求,就是4块物理盘要在同一个扇区都有文件记录,因为我们分析的时候需要对4块物理盘进行并列分析,所以必须位于同一扇区。
结果发现从1 183 744号扇区开始,每个物理盘都是文件记录了,那么我们的分析就从这里开始。
在RAID结构分析中,一般都是把条带大小放在第一位。该RAID-5的条带大小很好分析,因为这个服务器用的Windows 2003系统,文件记录中有记录号。根据我们前面介绍过的方法,两个相邻的记录号相减就是条带大小。
下面具体分析4块物理盘1 183 744号扇区的内容。“硬盘0”的1 183 744号扇区如图17-74所示。
“硬盘1”的1 183 744号扇区如图17-75所示。
“硬盘2”的1 183 744号扇区如图17-76所示。
“硬盘3”的1 183 744号扇区如图17-77所示。
4块物理盘1 183 744号扇区看起来都是文件记录,如何判断哪个是校验呢?
因为这个RAID-5由4块硬盘组成,盘数为偶数,所以在一个条带组内的三个数据条带的文件记录头标志“46 49 4C 45”经过异或运算后,结果依然是“46 49 4C 45”。单从头标志就看不出谁是校验了,但仔细分析一下,还是很容易分辨的。我们用文件记录模板看一下硬盘3的1 183 744号扇区,如图17-78所示。
从模板中看硬盘3的1 183 744号扇区前面的结构还比较正常,都符合文件记录的结构,但从0x30属性往后,就是非法数值了,显然这是一个校验扇区。
再看其他三块成员盘的1 183 744号扇区,都是标准的文件记录,其中硬盘0的文件记录号为47,硬盘1的文件记录号为111,硬盘2的文件记录号为175,两两之间都相差64个文件记录,所以条带大小为128扇区。
盘序和校验方向这两个参数有很大的相关性,所以分析的时候基本上没有先后次序,大多都是同时进行。
刚才从文件记录号上大概可以判断硬盘0、硬盘1、硬盘2是相邻的,不过还需要进一步验证。
通过前面分析的4块物理盘的1 183 744号扇区,判断出条带大小是128扇区,那么下一步就是从4块物理盘的1 183 744号扇区再往后跳转128个扇区,这样就进入了下一个条带组,从这个新的条带组的扇区中分析每块物理盘的记录号以及哪块盘是校验,分析完再往后跳转128个扇区。分析的同时把相应数据记录下来,如图17-79所示。
图17-79中“P”代表校验,镜像文件代表相应的物理硬盘,从图中每块物理盘相应条带中的记录号和校验位置,立刻能判断出该RAID-5的结构就是左同步,盘序跟4个镜像文件的编号相符。
针对这个RAID-5的实际情况,选择R-studio进行数据重组比较方便。打开R-studio把4个镜像文件加入,然后创建一个虚拟RAID-5,设置好结构参数。这些过程就不再详细演示了。
创建完成的虚拟RAID-5如图17-80所示。
在创建完成的虚拟RAID-5下并没有分区出现,难道是我们分析的结构不对?不是这个原因,导致看不到分区的原因是这个RAID-5的逻辑盘从64 260扇区开始,所以我们还需要在这个创建完成的虚拟RAID-5上再做一个区域,区域开始位置是64 260扇区,大小就是第一个分区的大小,具体数值可以到DBR中查看,如图17-81所示。
区域创建完成后就能看到分区了,如图17-82所示。
最后只需用鼠标双击“Direct Volume”就能看到数据了。