该RAID-5由3块36GB的SCSI硬盘组成,服务器在运行中突然死机,重新启动服务器后无法识别RAID-5逻辑盘,原有数据全部丢失。
把3块SCSI硬盘去RAID化后分别进行检测,没有发现坏扇区,可能是RAID控制器或者RAID信息故障导致RAID-5崩溃。
物理盘检测完成后将它们插入SCSI模组中分别做成文件镜像,然后用WinHex同时打开3个文件镜像进行分析。首先做一个约定,我们这里称文件“0.img”为“硬盘0”、文件“1.img”为“硬盘1”、文件“2.img”为“硬盘2”,但这些文件的编号只是随意编排的,并不一定与RAID-5中各个硬盘的盘序相符。
下面开始分析该RAID-5的结构。
依然从每块物理盘的0号扇区入手,首先用WinHex查看“硬盘0”的第一个扇区,内容如图17-130所示。
“硬盘1”第一个扇区的内容如图17-131所示。
“硬盘2”第一个扇区的内容如图17-132所示。
从图中看这3块成员盘的第一个扇区都不是MBR,该RAID-5的MBR扇区是否被破坏了呢?为了弄清楚这一点,我们在每块物理盘中往后搜索MBR,搜索MBR的方法即搜索MBR的结束标志“55 AA”。
先从硬盘0开始搜索,结果在“硬盘0”的128号扇区找到一个MBR,如图17-133所示。
在该MBR的分区表中使用了3个分区表项,第一个是类型为“DE”的配置分区,第二个是NTFS分区,第三个是扩展分区,这三个分区表项的具体参数如图17-134所示。
接下来我们查看一下“硬盘1”的128号扇区,其内容如图17-135所示。
“硬盘1”的128号扇区显然也是MBR,并且与“硬盘0”的128号扇区内容完全一样,按照RAID-5的数据存储原理,“硬盘2”的128号扇区一定全是0字节。
跳转到“硬盘2”的128号扇区,内容如图17-136所示。
正如我们推断的那样,“硬盘2”的128号扇区完全是0字节,这就说明“硬盘0”的128号扇区和“硬盘1”的128号扇区的两个MBR中必定有一个是检验信息。
另外,从3块成员盘的128号扇区的数据来看,可以肯定该RAID-5的起始扇区就在每块物理盘的128号扇区。
该RAID-5的结构我们提供两种分析方法:第一种方法是利用该RAID-5逻辑盘中的第一个逻辑卷进行分析,这个逻辑卷是一个FAT16文件系统;第二种方法是利用该RAID-5逻辑盘中的第二个逻辑卷进行分析,这个逻辑卷是一个NTFS文件系统。
方法一利用FAT文件系统进行分析。
从图17-134的分区表参数模板中我们可以看到该RAID-5逻辑盘的第一个逻辑卷开始于63号扇区,也就是说RAID-5逻辑盘的63号扇区应该是逻辑卷的DBR。现在我们跳转到“硬盘0”的相对63号扇区,换算为绝对扇区号为191,该扇区内容如图17-137所示。
从图17-137可以看出来这个扇区的确是DBR,并且是FAT16文件系统的DBR,其BPB参数如图17-138所示。
DBR的BPB参数中显示分区的扇区总数为64 196,隐藏扇区数为63,这些数值都与128号扇区的MBR分区表中第一个表项的信息相符,说明这就是RAID-5逻辑盘第一个逻辑卷的DBR,同时也证明了该RAID-5的条带大小是大于或等于64扇区的。
DBR的BPB参数中还显示“DBR保留扇区数”为1,说明DBR之后紧跟着的扇区就是FAT表的开始,我们往下翻一个扇区,即192号扇区,其内容如图17-139所示。
“硬盘0”的192号扇区正是FAT的开始,从这里可以推断该RAID-5的条带大小一定大于64扇区,所以下一个可能的值就是128了,为了判断条带大小是否为128扇区,可以查看“硬盘0”的相对扇区号127和128的内容,如果这两个扇区的内容是衔接的,那么条带大小就不是128扇区;相反,如果这两个扇区的内容不衔接,则该RAID-5的条带大小就是128扇区。
“硬盘0”的相对扇区号127和128换算为绝对扇区号为255和256,先跳转到255号扇区,其内容如图17-140所示。
非常巧合,“硬盘0”的255号扇区也是FAT表的开始,不过这是FAT2的开始,因为在DBR的BPB参数中记录了每个FAT表的扇区数为63扇区,所以“硬盘0”的192号扇区是FAT1的开始,而255号扇区就正好是FAT2的开始位置。
再查看“硬盘0”的256号扇区,其内容如图17-141所示。
“硬盘0”的256号扇区内的数据显然不是FAT表所应该具有的数据结构,所以256号扇区与255号扇区的内容不衔接,这样就可以断定该RAID-5的条带大小是128扇区。
盘序和校验方向这两个参数有很大的相关性,所以分析的时候基本上没有先后次序,大多都是同时进行。
通过前面的分析已经知道,“硬盘0”和“硬盘1”的128号扇区都是MBR,并且其中一个必定是校验信息,现在我们先来判定这两个MBR哪一个是校验。
在刚才分析条带大小的过程中,我们主要利用了“硬盘0”的128号扇区到255号扇区之间的数据进行判断的,在分析中可以很清楚地看到这128个扇区的数据在结构上非常完整,并且与分区表信息、BPB参数完全匹配,也就是说,这一个条带不像校验信息,除非“硬盘1”的128号扇区到255号扇区的内容与“硬盘0”完全一样,否则“硬盘1”的第一个条带就是校验块。下面我们进行验证。
前面分析过,“硬盘0”的255号扇区是FAT2的起始扇区,我们就来看看“硬盘1”的255号扇区是否一样,跳转到“硬盘1”的255号扇区,内容如图17-142所示。
“硬盘1”的255号扇区显然不是FAT表的内容,所以“硬盘1”的第一个条带是校验块,也就是说“硬盘1”的128号扇区的MBR扇区是校验信息。
现在我们判断出“硬盘1”的第一个条带是校验块,那么如果该RAID-5是左结构,“硬盘1”就是“2号盘”,“硬盘0”是“0号盘”,“硬盘2”则是“1号盘”,其结构如图17-143所示。
如果该RAID-5是右结构,“硬盘1”就是“0号盘”,“硬盘0”是“1号盘”,“硬盘2”则是“2号盘”,其结构如图17-144所示。
只要把该RAID-5的左、右结构确定了,盘序也就可以确定了。
我们依然从“硬盘0”入手,现在已经确定“硬盘0”的第一个条带是数据块,只要判断出“硬盘0”的第二个条带是数据块还是校验块,就可以知道该RAID-5是左结构还是右结构了。可以对照图17-143和图17-144来看,如果“硬盘0”的第二个条带是数据块,那么该RAID-5就是左结构;如果硬盘0的第二个条带是校验块,那么该RAID-5就是右结构。
已经知道该RAID-5的起始扇区是物理盘的128号扇区,条带大小也是128扇区,所以第二个条带在物理盘中的绝对起始扇区号是256,跳转到“硬盘0”的256号扇区,其内容如图17-145所示。
不用去对比其他两块物理盘的256号扇区,也能够从图17-145中很明显地看出“硬盘0”的256号扇区一定是数据而非校验,也就是说“硬盘0”的第二个条带是数据块,所以该RAID-5一定是左结构,从而得出其盘序为:“硬盘0”是“0号盘”,“硬盘2”是“1号盘”,“硬盘1”是“2号盘”。
数据的循环方向即同步和异步。我们已经分析出该RAID-5是左结构,所以它要么是左异步,要么是左同步。如果是左异步,其结构如图17-146所示。
如果是左同步,其结构如图17-147所示。
现在我们只要分析数据块“1”最后一个扇区后面衔接的数据在“0号盘”上还是在“2号盘”上,如果在“0号盘”上,就是左异步;如果在“2号盘”上,就是左同步。
数据块“1”是“1号盘”的第一个条带,其最后一个扇区也就是硬盘2的255号扇区,该扇区的内容如图17-148所示。
从内容看,“硬盘2”的255号扇区是一个系统可执行文件的部分数据。为了判断该扇区之后的数据写入的位置,我们需要分别查看“0号盘”和“2号盘”第二个条带的开始扇区。
“0号盘”第二个条带的开始扇区也就是“硬盘0”的256号扇区,其内容在之前的分析中已经查看过,可以参看图17-145,很明显这个扇区的内容与图17-148中“硬盘2”的255号扇区的内容有相关性,是衔接的,所以数据块“1”最后一个扇区之后衔接的数据在“0号盘”上,该RAID-5应该为左异步结构。
方法二利用NTFS文件系统进行分析。
从图17-134的分区表参数模板中我们可以看到该RAID-5逻辑盘的第二个逻辑卷开始于64 260号扇区,也就是说RAID-5逻辑盘的64 260号扇区应该是第二个逻辑卷的DBR。我们现在需要把RAID-5逻辑盘的64 260号扇区换算为物理盘上的扇区号,计算方法为
64260÷(3-1)+128=32258
这就是把第二个逻辑卷的DBR在RAID-5逻辑盘中的扇区号转化为在物理盘上的扇区号的数值,但因为RAID-5的数据是以条带为单位循环写入,所以计算出来的这个扇区号不会完全精确,只是一个出入非常小的大概位置。
首先跳转到“硬盘0”的32 258号扇区,但并不是DBR,往后翻了两个扇区到达32 260号扇区,结果就是DBR了,如图17-149所示。
该扇区的BPB参数如图17-150所示。
该BPB的“隐藏扇区数”和“扇区总数”两个参数的值都与第二个逻辑卷分区表项中的值一致,所以这的确是RAID-5逻辑盘中第二个逻辑卷的DBR。
为了分析RAID-5的结构,我们还需要去找$MFT文件区域,从文件记录上入手分析RAID-5的结构。
找$MFT文件的方法一是可以通过搜索来找,二是可以通过计算来确定其大概位置,然后在附近稍作搜索就能快速找到。我们采用先计算的方法。
从图17-150中可以看到该分区$MFT文件起始簇号为20 380,每簇扇区号为1,所以$MFT文件在物理盘中的大概起始扇区号的计算方法为:(20308×1÷2)+32260=42414,这就是把$MFT文件在分区中的起始簇号转化为在物理盘上的起始扇区号的数值,但因为RAID-5的数据是以条带为单位循环写入,所以计算出来的这个扇区号不会完全精确,只是一个出入非常小的大概位置。
用WinHex跳转到每块物理盘的42 414扇区,在附近很快找到了$MFT文件的文件记录,是在“硬盘0”的42 456号扇区,如图17-151所示。
“硬盘0”的42 456号扇区就是$MFT文件自身的文件记录。从该文件记录0x80属性的Run List中可以看出$MFT文件有非常多的碎片。我们从Run List模板中看一下具体数值,如图17-152所示。
从Run List模板中可以看出,第一个数据流只有32个簇的大小,该分区每簇为1个扇区,32个簇也就是32个扇区,相当于16个文件记录,所以第一个数据流文件记录太少,这么少的数据流显然不够分析RAID-5结构。从模板中看第二个数据流为252 896个簇,足够分析了,所以我们应该找到第二个数据流,从第二个数据流入手分析RAID-5的结构。
第二个数据流的起始簇号为874 816,这是以第一个数据流的起始簇号20 308为起点的相对簇号,我们可以把这个相对簇号转换为第二个数据流在物理盘中的绝对扇区号,具体算法为:874816×每簇扇区数÷2+第一个数据流在物理盘中的绝对扇区号,即
(874816×1÷2)+42456=479864
这就是$MFT文件第二个数据流在物理盘中的起始扇区号,当然这个扇区号也不会完全精确,只是一个出入非常小的大概位置。
下面跳转到每块物理盘的479 864扇区附件寻找$MFT文件的第二个数据流。找的时候还有一个要求,就是3块物理盘要在同一个扇区都有文件记录。因为我们分析的时候需要对3块物理盘进行并列分析,所以必须位于同一扇区。
结果发现从479 872号扇区开始,每个物理盘都是文件记录了,那么我们的分析就从这里开始。
“硬盘0”的479 872号扇区内容如图17-153所示。
“硬盘1”的479 872号扇区内容如图17-154所示。
“硬盘2”的479 872号扇区内容如图17-155所示。
很显然“硬盘2”的479 872号扇区是校验,硬盘0和硬盘1的479 872号扇区是完好的文件记录。从文件记录中可以看出该NTFS分区是由Windows 2000系统创建出来的,文件记录中没有记录号,所以无法用文件记录号计算条带大小,那么只能用校验块所占的扇区数判断条带大小了。
从“硬盘2”的479 872号扇区往后搜索文件记录的头标志“46 49 4C 45”,结果在480 000号扇区找到了文件记录,说明这是一个条带的开始扇区,同时把硬盘1和硬盘2也转到480 000扇区,发现硬盘0是校验,如图17-156所示。
“硬盘0”的480 000号扇区就是一个校验块的开始。我们从硬盘0的480 000号扇区往后再搜索文件记录的头标志“46 49 4C 45”,即找到下一个数据块的开始扇区。这个扇区与480 000号扇区之间的差就是该RAID-5的条带大小。
很快在480 128号扇区就搜索到了一个新的文件记录,用480 128减去480 000,结果等于128,所以该RAID-5的条带大小是128扇区。
我们采用取模反推法判断该RAID-5的盘序和校验方向。刚才在硬盘0的480 000找到了一个校验块的起始扇区,我们可以用反推法计算“硬盘0”的第一个校验块的起始扇区,计算方法为
(480000-128)MOD(128×3)=256
256号扇区是第三个条带的开始,说明“硬盘0”的第一个校验块在第三个条带上。从前面的分析我们知道“硬盘0”的第一个扇区是MBR。这两个条件和在一起,我们可以断定该RAID-5只能是左结构,并且“硬盘0”就是“0号盘”。
用同样的方法很容易就可以反推出“硬盘2”为“1号盘”,“硬盘1”为“2号盘”。
数据的循环方向即同步和异步,我们已经分析出该RAID-5是左结构,所以它要么是左异步,要么是左同步。
我们从480 128号扇区对3块物理盘连续分析了3个条带,得出如图17-157所示的校验块分布结构。
下面我们就利用这个校验块分布结构来判定该RAID-5是左异步还是左同步。
如果“数据块A”后面衔接的是“数据块X”,该RAID-5就是左异步;如果“数据块A”后面衔接的是“数据块Y”,该RAID-5就是左同步。
我们首先查看“数据块A”的最后一个扇区,即“硬盘2”的480 255号扇区,不过480 255号扇区是一个文件记录的第二个扇区,内部没有什么数据,不利于分析,所以我们查看上一个扇区,即480 254号扇区,其内容如图17-158所示。
然后查看“数据块X”的第一个扇区,即“硬盘0”的480 256号扇区,其内容如图17-159所示。
最后再查看“数据块Y”的第一个扇区,即“硬盘1”的480 256号扇区,其内容如图17-160所示。
从3个文件记录的内容进行比较,显然“硬盘2”的480 254号扇区的文件记录与“硬盘0”的480 256号扇区的文件记录是同一目录下的文件,而“硬盘1”的480 256号扇区的文件记录则不是,这就可以判断出“数据块A”后面衔接的是“数据块X”,所以该RAID-5是左异步结构。
这个RAID-5的数据重组比较容易,只要记住该RAID起始扇区是128就可以了,其他没有什么特殊之处,所以为了节省篇幅,这里就省略重组过程。