图7
这里面的每一条记录对应MFT里的一条记录。这时,向下拖拽滑动条,会在记录文件名的地方出现乱码、文件名内出现非法字符(* ? \ / : ” < > | 等)或者不显示文件名或文件的属性(如图8中红框内部分)。
图8
为什么在MFT的记录内会出现这种情况呢?在准备知识中曾经说过,RAID5直所以可以容错是因为RAID5对每个条带内的数据做了XOR校验,并将校验的结果按照规律均匀的存储在RAID5内每块硬盘上。之所以在MFT的记录内会出现如图8所示的现象就是因为这块区域存储的是校验内容。所以,我们只需要找到出现问题的MFT记录起始位置与结束位置,就可以确定校验块的容量,而这个校验块的容量就是块大小。如何在这个案例中,出现问题的MFT记录是从64392扇区开始的,到64520扇区结束。所以,这个案例的块大小就是64520-64392=128个扇区。
由于每个盘上的数据块和校验块出现的顺序是一定的(见图1、图2),所以可以通过确定校验块位于RAID5的哪个条带上,从而确定磁盘的盘序。即,分别找到每一个磁盘或者镜像文件内MFT记录的一个校验块的末尾扇区,用这个扇区数减去起始扇区数的结果与块大小和盘数的乘积取余,所得的结果除以块大小,最后的这个得数就是这个校验块位于哪个条带上。具体公式如下:
所以,Disk1.img的校验块位于的条带号是((64520—8)MOD(128*4))/128 =0 =4,用同样的方法计算余下硬盘镜像内的校验块的位置,
Disk2.img的校验块位于的条带号是((64898—8)MOD(128*4))/128≈2.95≈3,Disk3.img的校验块位于的条带号是((64776—8)MOD(128*4))/128≈2,
Disk4.img的校验块位于的条带号是((64646—8)MOD(128*4))/128≈1。
参考图2,可以得到盘序是1234 Backward的或者是4321 Forward的。由于在Disk1.img上存在MBR,所以Disk1.img上的数据应该是RAID5内的起始数据块,或者说Disk1.img上的数据是条带1上D1。当盘序为1234 Backward时,这种数据的存放方式符合Disk1.img上的数据是条带1上D1;当盘序为4321 Forward时,条带上的第一个数据块D1位于Disk3.img上,这个与Disk1.img上的数据是条带1上D1不符。所以,盘序是1234 Backward。
至此,我们已经分析出来了起始扇区位置、盘序和块大小,再分析出旋转方式,对于RAID5的分析就完成了。再分析旋转方式之前,先介绍一下MFT记录文件的方式。MFT中对于文件的记录采用的是一种被称为”B-tree”的管理方式。简单的说,就是在MFT中记录的文件名一般都是按字母(中文按拼音字母)升序排列。使用DE3察看MFT记录会看到每条文件记录中的文件名与该条记录附近记录的文件名有很高的相关性(一致性)。
图9
这种对于文件记录的管理方式为我们提供了判断数据之间关系的依据,即相邻的带有MFT记录的数据块内的文件记录的相关程度好与非相邻数据块内的文件记录。