本例是一个比较罕见的RAID-5,它的罕见之处在于以下三点:
(1)RAID-5结构为右同步。在各种结构的RAID-5中,左异步、左同步、右异步比较多见,唯独右同步是最少见的一种结构。
(2)每扇区大小为2048字节。在该RAID-5的逻辑盘中,扇区大小不是常规的512字节,而是被定义为2048字节,即每个扇区相当于常规扇区的4倍大小。
(3)每个$MFT记录大小为2048字节。该RAID-5的逻辑卷使用NTFS文件系统,但元文件$MFT中每个文件记录的大小不是常规的1024字节,而是2048字节,即每个文件记录相当于常规文件记录的2倍大小。
下面我们一起看看这个罕见的RAID-5实例。
该RAID-5由8块1TB的SATA硬盘组成,将这8块成员盘去RAID化后连接到一个8通道的SAS适配器上。因为SAS适配器可以向下兼容STAT硬盘,这样同时可以连接8块硬盘,比较方便。
由于该RAID-5成员盘的数目比较多,成员盘容量也很大,对成员盘做完整的磁盘镜像很不方便,于是我们将每块物理盘截取一部分扇区做成文件镜像,命名为“0.img”到“7.img”,并称文件“0.img”为“硬盘0”、文件“1.img”为“硬盘1”、文件“2.img”为“硬盘2”,以此类推。但这些文件的编号只是随意编排的,并不一定与RAID-5中各个成员盘的盘序相符。
在后文的分析过程中,根据需要,有些部分我们采用镜像文件的截图,而有些地方则采用原物理盘的截图,在效果上没有区别。
用WinHex同时打开该RAID-5的8个镜像文件,查看8块成员盘的第一个扇区,就是“硬盘0”第一个扇区的内容,如图17-83所示。
“硬盘0”的第一个扇区很明显是MBR,并且结构完好。
“硬盘1”第一个扇区的内容如图17-84所示。
“硬盘1”的第一个扇区看不出是什么结构。那么接着看下一块成员盘,“硬盘2”第一个扇区的内容如图17-85所示。
“硬盘2”的第一个扇区也看不出是什么结构,再接着看下一块成员盘。“硬盘3”第一个扇区的内容如图17-86所示。
“硬盘3”的第一个扇区内容全部为0,随后的“硬盘4”、“硬盘5”、“硬盘6”、“硬盘7”的第一个扇区全都是0,就不一一截图了。
从8块成员盘的第一个扇区分析,只有“硬盘0”的第一个扇区是MBR,并且结构完好,那么可以初步断定该RAID-5在物理盘上的起始扇区就是0号扇区。
RAID-5结构的分析一般都从条带大小入手。刚才我们在“硬盘0”的第一个扇区发现了MBR,这个MBR中只有一个分区表项,其具体数值见图17-87中的模板。
从MBR的模板的分区表项1可以看出分区类型为NTFS、分区开始于63号扇区、大小是1 023 983 037扇区,是将近500GB的一个分区,而该RAID-5是由8块1TB的成员盘组成的,逻辑盘总容量应该是7TB才对。从这一点可以看出,该RAID-5是被RAID控制器划分了多个逻辑盘。
该分区开始于63号扇区,我们可以用WinHex跳转到“硬盘0”的63号扇区,看看它是不是NTFS文件系统的DBR。如果是一个完好的DBR,说明该扇区跟MBR还在一个条带内,也说明条带大小是大于等于64扇区的;如果不是DBR,则说明DBR跟MBR不在一个条带内,而是写入到其他成员盘中了,也就说明条带大小是小于64扇区的。
“硬盘0”63号扇区的内容如图17-88所示。
结果发现“硬盘0”的63号扇区全部是0,并不是DBR,那么现在是不是可以肯定该RAID-5的条带大小就是小于64扇区的呢?如果是常规情况就可以这样下结论了,不过别忘了这是一个比较特殊的案例,我们先往下分析。
既然“硬盘0”的63号扇区不是DBR,我们就去其他成员盘中查找DBR。通过搜索发现“硬盘3”的124号扇区是DBR,如图17-89所示。
这个DBR所在的位置非常奇怪,感觉很不合常理,但在其他成员盘的前部都不再有DBR了。我们具体分析一下这个DBR中的BPB参数就不会再觉得奇怪了,具体参数如图17-90中的模板。
具体看BPB参数的模板,我们关注下面几个数值:
以上这些数值在后面的分析中都会用到,请读者将它们记住。
现在再回头分析DBR的位置问题,因为MBR中描述分区开始扇区为63,即DBR应该在逻辑盘的63号扇区,但该逻辑盘每扇区是2048字节,所以按照常规扇区计算,DBR在逻辑盘的位置应该是63×4=252扇区。
目前DBR位于“硬盘3”的124号扇区,用DBR在逻辑盘中的位置扇区减去124,结果是128,这基本可以说明当前RAID-5的条带大小是128个常规扇区,即64KB,同时也能说明,124号扇区有DBR的“硬盘3”在盘序上应该紧接着第一个扇区为MBR的“硬盘0”。
到这里我们初步判断该RAID-5的条带大小为128个常规扇区,即64KB。下面我们可以进一步验证。
通过DBR中的BPB参数我们计算出$MFT文件在逻辑卷中的起始扇区号为786432×2×4=6291456,而该RAID-5由8块成员盘组成,所以$MFT文件在物理盘中的大概起始扇区号的计算方法为(6291456÷7)+(252÷7),结果约等于898 815,这就是把$MFT文件在逻辑卷中的起始簇号转化为在物理盘上的起始扇区号的结果,但因为RAID-5的数据是以条带为单位循环写入,所以计算出来的这个扇区号不会完全精确,只是一个出入非常小的大概位置。
用WinHex跳转到898 815扇区,结果不是文件记录的第一个扇区,而是最后一个扇区,再往后翻一个扇区,即898 816号扇区就是文件记录的开始了。我们将每块成员盘都跳转到898 816号扇区进行对比分析,其中“硬盘0”898 816号扇区的内容如图17-91所示。
“硬盘0”的898 816号扇区所在文件记录的记录号为65。
“硬盘1”898 816号扇区的内容如图17-92所示。
“硬盘1”的898 816号扇区所在文件记录的记录号为129。
“硬盘2”898 816号扇区的内容如图17-93所示。
“硬盘2”的898 816号扇区所在文件记录的记录号为33。“硬盘3”898 816号扇区的内容如图17-94所示。
“硬盘3”的898 816号扇区所在文件记录的记录号为97。
“硬盘4”898 816号扇区的内容如图17-95所示。
“硬盘4”的898 816号扇区是校验信息,我们通过文件记录的模板查看一下就很清楚了,如图17-96所示。
图17-96中方框内的参数明显都是非法值,所以这个扇区不是正常的文件记录,而是校验。
“硬盘5”898 816号扇区的内容如图17-97所示。
“硬盘5”的898 816号扇区所在文件记录的记录号为161。“硬盘6”898 816号扇区的内容如图17-98所示。
“硬盘6”的898 816号扇区所在文件记录的记录号为193。
“硬盘7”898 816号扇区的内容如图17-99所示。
“硬盘5”的898 816号扇区所在文件记录的记录号为1。
把以上各成员盘在898 816号扇的文件记录号排列在一起,结果如图17-100所示。
从这些文件记录号中很容易看出来,它们两两之间的差为32,所以该RAID-5的每个条带是32个文件记录的大小。在前文我们分析过,这个文件系统的$MFT文件中每个文件记录占4个扇区,所以32个文件记录就是128扇区,最终我们得出该RAID-5的条带大小就是128个常规扇区,即64KB。
前面分析过,“硬盘0”的第一个扇区是MBR,所以这块硬盘不是0号盘就是1号盘了,在RAID-5为左结构的情况下它是0号盘,在RAID-5为右结构的情况下它是1号盘。另外又知道“硬盘3”的124扇区是DBR,这块硬盘在盘序上是接在“硬盘0”之后的。
以上是我们现在能得到的关于盘序的一点信息。对于具体的盘序及循环方向,在这个案例中我们利用文件记录进行分析,因为在前面的分析中我们已经发现该文件系统的文件记录中有记录号,这对我们的分析有很大帮助。
现在我们已经判定该RAID-5的条带大小为128扇区,并且分析了8块成员盘898 816号扇区的文件记录,那么下一步我们要从8块成员盘的898 816号扇区再往后跳转128个扇区,这样就进入了下一个条带组,从这个新的条带组的扇区中分析每块成员盘的记录号以及哪块盘是校验,分析完再往后跳转128个扇区。分析的同时把相应信息记录下来,如图17-101所示。
图17-101中“P”代表校验,从图中每块物理盘相应条带中的记录号和校验位置,立刻能判断出该RAID-5的结构就是右同步,盘序为“硬盘2”是0号盘、“硬盘0”是1号盘、“硬盘3”是2号盘、“硬盘1”是3号盘、“硬盘5”是4号盘、“硬盘6”是5号盘、“硬盘4”是6号盘、“硬盘7”是7号盘。
该案例数据重组的方法也比较特殊,有两个原因:第一,因为RAID-5逻辑盘被定义为每扇区2048字节,用一般工具进行数据重组,按照MBR中分区表的指针是无法找到DBR的,所以不能识别逻辑卷;第二,RAID控制器把该RAID-5分为几个独立的逻辑盘,我们必须一一找到每个逻辑盘的开始位置,才能把每个逻辑盘重组成功。
首先我们用WinHex把8块成员盘组成虚拟RAID-5,以便于分析每个逻辑盘的位置。
打开WinHex的“重组RAID”功能,如图17-102所示。
该RAID-5由8块成员盘组成,需要把它们按照盘序加入进来,单击图17-102中的“添加硬盘按钮”,出现如图17-103所示的选择硬盘界面。
图17-103中的“HD0”是计算机的系统盘,不是RAID-5中的成员盘,从“HD1”到“HD8”为RAID-5中的8块成员盘,将它们按照分析好的盘序依次加入进虚拟RAID中,并把条带大小设置为128扇区,把RAID结构设置为“Level 5:forward parity dynamic”,即“右同步”,如图17-104所示。
参数设置完成后单击“OK”按钮,WinHex就把这8块成员盘按照我们设置的参数组建成为一个虚拟RAID-5了,如图17-105所示。
不过通过WinHex的数据浏览功能查看这个虚拟RAID-5,只能看到一个488GB的分区,并且分区还无法显示文件系统类型,如图17-106所示。
图17-106中这个488GB的分区真实大小应该是488GB的4倍,分区表中描述它的起始位置是63号扇区,实际在63×4=252扇区。正因为MBR中分区表的指针无法找到DBR,所以这个分区后面跟着一个问号。
我们跳转到虚拟RAID-5的252号扇区,这就是RAID-5第一个逻辑卷的DBR,如图17-107所示。
第一个逻辑卷的DBR中记录的卷的大小是“3D 08 BD BC”,分区表中描述的数值比它多一个扇区,为“3D 08 BD BD”,这是十六进制,换算为十进制等于1 023 983 037。因为RAID-5逻辑盘定义的扇区大小为2048字节,所以这个分区真实大小是1 023 983 037×4=4095932148扇区。
下面我们在虚拟RAID-5中找第二个逻辑盘的开始位置,用上一个逻辑盘的开始扇区252加上扇区数4 095 932 148,结果等于4 095 932 400,理论上这应该是第二个逻辑盘的起始扇区。用WinHex跳转过去,结果发现4 095 932 400号扇区是一个空扇区,并没有任何分区信息,如图17-108所示。
从4 095 932 400号扇区往后搜索“55 AA”标志,结果在4 095 989 760扇区找到了MBR,如图17-109所示。
这正是RAID-5中第二个逻辑盘的MBR,分区表中描述了分区开始位置在63号扇区,实际值应该乘以4,即252扇区;分区大小是1 023 999 102扇区,实际值也应该乘以4,即4 095 996 408。
我们从4 095 989 760号扇区往后跳转252个扇区,即跳转到4 095 990 012号扇区,的确是DBR扇区,如图17-110所示。
现在可以确定该RAID-5上的第二个逻辑卷起始于4 095 990 012扇区,大小为4 095 996 408扇区。
我们接着在虚拟RAID-5中找第三个逻辑盘的开始位置,用第二个逻辑盘的开始扇区4 095 990 012加上扇区数4 095 996 408,等于8 191 986 420,理论上这应该是第三个逻辑盘的起始扇区。用WinHex跳转过去,结果发现8 191 986 420号扇区是一个空扇区,并没有任何分区信息,如图17-111所示。
从8 191 986 420号扇区往后搜索“55 AA”标志,结果在8 191 989 760号扇区找到了MBR,如图17-112所示。
这正是RAID-5中第三个逻辑盘的MBR,分区表中描述了分区开始位置在63号扇区,实际值应该乘以4,即252扇区;分区大小是665 588 952扇区,实际值也应该乘以4,即2 662 355 808。
我们从8 191 989 760号扇区往后跳转252个扇区,即跳转到8 191 990 012号扇区,的确是DBR扇区,如图17-113所示。
现在可以确定该RAID-5上的第三个逻辑卷起始于8 191 990 012号扇区,大小为2 662 355 808扇区。
因为距离虚拟RAID-5的末尾还有很远,所以我们继续往后找第4个逻辑盘的开始位置,用第三个逻辑盘的开始扇区8 191 990 012加上扇区数2 662 355 808 ,等于10 854 345 820,理论上这应该是第4个逻辑盘的起始扇区。用WinHex跳转过去,结果发现10 854 345 820号扇区是一个空扇区,并没有任何分区信息,如图17-114所示。
从10 854 345 820号扇区往后搜索“55 AA”标志,结果在10 854 389 760扇区找到了MBR,如图17-115所示。
这正是RAID-5中第4个逻辑盘的MBR,分区表中描述了分区开始位置在63号扇区,实际值应该乘以4,即252扇区;分区大小是703 438 092扇区,实际值也应该乘以4,即2 813 752 368。
我们从10 854 389 760号扇区往后跳转252个扇区,即跳转到10 854 390 012号扇区,的确是DBR扇区,如图17-116所示。
所以可以确定该RAID-5上的第4个逻辑卷起始于10 854 390 012扇区,大小为2 813 752 368扇区。
把RAID-5上的第4个逻辑卷的起始扇区号10 854 390 012加上其总扇区数2 813 752 368,结果等于13 668 142 380,已经接近RAID-5的总大小,所以后面没有下一个逻辑卷了。
现在RAID-5上4个逻辑卷的起始地址和大小都已经分析清楚完毕,可以开始数据重组了。这个案例我们用UFS Explorer进行重组,运行UFS Explorer后界面如图17-117所示。
图17-117的“HDD1”到“HDD8”就是该RAID-5的8块成员盘。
在UFS Explorer的“Tools”→“Build virtual RAID array”菜单下可以创建虚拟RAID,如图17-118所示。
创建虚拟RAID的界面中把成员盘按照顺序添加进去,并按照分析好的参数进行一一设置,如图17-119所示。
设置完参数后单击“Build”按钮,就创建出一个虚拟RAID,如图17-120所示。
从图17-120看这个虚拟RAID也只显示488.27GB的大小,这都是因为扇区大小为2048的缘故,目前这样无法看到数据,我们还需要在这个虚拟RAID上把4个逻辑卷做出来。
在虚拟RAID上单击鼠标右键,选择“Define Virtual Partition”菜单,如图17-121所示。
然后在出现的对话框中填入需要定义的逻辑卷的起始扇区和大小。我们首先定义第一个逻辑卷,具体数值如图17-122所示。
定义完成后在虚拟RAID下面就会出现一个逻辑卷,单击这个逻辑卷就可以看到数据了,如图17-123所示。
为了避免泄露用户的数据,我们对截图做了技术处理,隐去文件名。
下面再定义第二个逻辑卷,具体数值如图17-124所示。
定义完成后在虚拟RAID下面就会再出现一个逻辑卷,单击这个逻辑卷就可以看到数据了,如图17-125所示。
接下来再定义第三个逻辑卷,具体数值如图17-126所示。
定义完成后在虚拟RAID下面就会出现第三个逻辑卷,单击这个逻辑卷就可以看到数据了,如图17-127所示。
最后定义第4个逻辑卷,具体数值如图17-128所示。
定义完成后在虚拟RAID下面就会出现第4个逻辑卷,单击这个逻辑卷就可以看到数据了,如图17-129所示。
到此为止,该RAID-5完整地恢复了所有数据。