RAID-5是数据和奇偶校验间断分布在三个或更多物理磁盘上的、具有容错功能的阵列方式。如果物理磁盘的某一部分失败,您可以用余下的数据和奇偶校验重新创建磁盘上失败的那一部分上的数据。对于多数活动由读取数据构成的计算机环境中的数据冗余来说,RAID-5是一种很好的解决方案。
有一些服务器或者磁盘阵列柜会将RAID信息存储在磁盘的某些地方,一般是阵列内每块磁盘的最前面的一些扇区或者位于磁盘最后的一些扇区内。当RAID信息存储在每块磁盘的前面的扇区时,在分析与重组RAID的时候就需要人为的去掉这些信息,否则就会得到错误的结果。
在做RAID5的数据恢复的时候,除了需要知道RAID内数据的起始扇区,还需要了解(数据)块大小(也称深度,depth)、数据与校验的方式等。
在实际应用中,阵列控制器一般要先把磁盘分成很多条带(Stripe,如图1上绿色线框起来的部分就是一个条带),然后再对每组条带做校验。每个条带上有且仅有一个磁盘上存放校验信息,其他的磁盘上均存放数据。数据被控制器划分为相等的大小,分别写在每一块硬盘上面。每一个数据块的长度或者说数据块的容量就被称为块大小或者叫(条带)深度。在阵列内,条带大小一般是相同的,即在每个磁盘内的数据块的大小和校验块的大小是一致的。
图1
每一个条带内的校验盘上的内容是通过这个条带上其他磁盘上的数据做异或而来,如P1=D1 XOR D2 XOR D3(见图2)。一般来说,在盘序是正确的情况下,校验块在RAID5内每块磁盘的写入顺序都是从第一块盘到最后一块盘或者从最后一块盘到第一块盘(如图2)。从图上看,校验的排列总是从图的左上角到右下角,或者从图的有上角到左下角。这就为我们判断磁盘的顺序提供了依据。如果考虑上数据写入磁盘的顺序(这个就是所谓的校验旋转方式,以下简称旋转方式),我们便得到了如图2所示的4种数据与校验的排列形式:forward 123(右不对称)、forward dyn(右对称)、backward 321(左不对称)、backward dyn(左对称)。其中forward dyn的方式比较不常见,在判断旋转方式的时候可以不考虑。
图2
最后,不论是单独使用的磁盘还是使用多块磁盘组合成RAID,MBR始终是这个单独磁盘或者RAID的0扇区。
二、恢复过程1.一般思路对于一般的RAID5数据恢复,我们需要了解以下参数:盘序、块大小、旋转方式和数据起始扇区等。所以,对于RAID5的数据恢复也就是通过文件系统、文件格式、磁盘内其它相关数据等来确定这四个参数的过程。当这四个参数确定后,便可以通过相关的工具将分散在每块磁盘上数据还原为RAID5内实际的数据,从而达到恢复RAID5内数据的目的。
下面的是RAID5数据恢复的一般过程,之后将通过一个案例的分析过程来具体说明如何恢复RAID5的数据。
通过工具找到MBR与DBR,并判断硬盘内的数据是否同步—〉通过MBR的位置判断起始扇区位置—〉通过DBR找到NTFS分区的MFT记录的位置—〉通过MFT记录判断块大小、盘序、旋转方式—〉数据重组、恢复RAID5内数据
2.恢复过程环境及工具:windows2003 server、Raid reconstructor3.02(以下简称RR3)、Runtimes DiskExplorer for NTFS 3.01(以下简称DE3)
基本情况:这是一组由四块盘组成的RAID5,每块硬盘为100M,windows2003的操作系统,分了一个分区290M,分区格式为NTFS。
首先,打开Raid reconstructor。①在 #drives 后面的文本框中输入这个RAID5的盘数4。②分别在Drive1、Drive2、Drive3、Drive4后输入每个磁盘或磁盘镜像的路径或单击右键进行选择。③单击软件下面的Open drives。
图3
选择Tools菜单中的XOR Test(这个命令用来测试RAID内的这些磁盘上的数据是否同步,即是否有硬盘是先掉线的),见到如图4所示的窗口。④点击软件下方的Start键进行XOR测试。注意:这个测试需要这个RAID内的每一块磁盘都参与测试,否则结果不具有参考价值。
图4
等测试完成后会看到如图5所示的结果。
图5
在窗口的左侧,RR3用带有颜色的小方格表示测试的结果:一个小方格代表一个扇区,绿色表示XOR测试通过,红色表示测试未通过,白色表示相应扇区上没有数据。在窗口的右侧,列出来的分区表(MBR)和启动扇区(DBR)的相关信息。如在那个磁盘(镜像文件)的第多少扇区上有MBR或DBR,并且会有关于这个MBR或者DBR一个简要的说明。
对于当前的这个案例来讲,从图5上可以看出:在窗口的左面均是绿色的,说明XOR测试通过,这四块磁盘上的数据是同步的;在窗口的右面,列出了在Disk1.img的第8扇区上有MBR,第71扇区上有DBR。在Disk3.img的1402扇区上有未知格式DBR。从基本情况描述上了解到,这个RAID内只有一个NTFS的分区,所以这个未知格式DBR不是我们要寻找的。
我们现在来看Disk1.img上的MBR和DBR:MBR里定义了一个NTFS的分区,这个分区是从63扇区开始,大小是578277个扇区。这些信息和这个RAID的基本情况描述的比较接近,所以这个MBR应该是这个RAID的MBR。根据在准备知识里提到的MBR所在的扇区就是RAID的起始扇区,所以这个RAID在各个磁盘上的起始扇区就是8号扇区(扇区的编号是从0号开始的),即每块磁盘的前面8个扇区是没有用处的,在重组RAID时需要剔除掉。
使用DE3打开Disk1.img,找到DBR的位置(71扇区),在view菜单里选择as Boot Record或者直接按F10键,会看到如图6所示内容。
图6
注意红框内的内容,它们分别表示每簇扇区数和$MFT所在的簇。用$MFT所在簇乘以每簇扇区数得到$MFT位于当前分区的哪个扇区上。因为在每个分区前面都有一部分的隐藏扇区,所以用$MFT在当前分区的位置加上当前分区前面的隐藏扇区数便得到了这个$MFT在RAID内的绝对位置(从这个RAID的0扇区开始)。RAID5的使用容量比磁盘的实际容量少一块盘的容量(用来存储交验数据了),所以$MFT在每块磁盘上的位置就应该是用$MFT的绝对位置除以盘数减一。又因为每块磁盘前面存有一部分RAID信息,所以$MFT在单块磁盘上的位置还要再加上RAID信息所占用的扇区数(起始扇区数)。具体公式如下:
由于数据是按照条带存储在硬盘上的,所以这个公式计算出来的MFT位置只是个大概位置,MFT在每块磁盘上的实际位置应该在这个位置附近。而且,在这之后的有关计算会因为计算时所选取的扇区号等原因出现一些误差,一般在±4个扇区之内。
在这个例子中,MFT所在的位置=192759*1/(4-1) + 8 =64261。所以,MFT在每块磁盘上的位置为64261扇区附近。使用DE3打开每个镜像文件的64261扇区,在view菜单里选择as File entry或者按F6键,会看到如图7所示内容。
图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记录的数据块内的文件记录的相关程度好与非相邻数据块内的文件记录。
图10
如图10所示,当磁盘3中位于条带1上的数据块(D3)与磁盘4位于条带2上的数据块(D6,见图10左侧backward部分)相连时,旋转方式就是backward dyn;当磁盘3中位于条带1上的数据块(D3)与磁盘1位于条带2上的数据块(D4,见图10左侧backward部分)相连时,旋转方式就是backward 321。旋转方式的判断不仅限于使用D3数据块来判断,使用其他位置的数据也可以。如D5是与D6相连接还是与D7项连接等等。总之,只要可以判断数据的存储的位置即可。
在这个案例中,我们选择64648扇区这个位置,因为这个位置是磁盘3上一个校验块的首扇区,即图10中P2的首扇区。将每个镜像文件都定位到64648扇区,选择view菜单中的as File entry,将64648扇区置于窗口的中间位置(如图11—图14所示),方便查看。
图11 Disk1.img
图12 Disk2.img
图13 Disk3.img
图14 Disk4.img
通过查看每个磁盘中MFT的文件记录中的文件名(使用红色粗线框起来的部分),可以发现:Disk3上的文件记录与Disk4上的文件记录的文件名的关联程度要高于Disk3与Disk1上文件名的关联程度,即Disk3上的数据与Disk4上的数据联系更紧密一些,数据应该是写完Disk3后写Disk4。所以,旋转方式是Backward dyn的(参考图10或者图2的数据存放方式)。
经过以上的分析,我们已经得到了起始扇区位置、盘序、块大小和旋转方式,将这些参数填加到RR3中(如图15所示),⑤点击open drives按钮,⑥在Target的位置填写输出到设备或文件的路径,⑦最后Copy按钮。
图15
如果重组好的目标设备是磁盘,一般可使直接打开(可能会需要重新启动);如果重组的结果是镜像文件,则可以通过工具打开,如R-studio等。
图16就是使用R-studio打开重组后的镜像文件。注意,一般来说,如果重组结果是正确的且原RAID内文件系统没有问题,使用R-studio打开镜像文件是不会出现任何错误提示的(图16中红框内部分),目录结构也是正常的,文件名或目录名不会出现乱码。此时,可选择该分区内的一些比较大的文件(文件大小最好大于三个数据块的大小)恢复出来看一下结果,如果这些文件可以正常打开,则这个重组结果一般没有问题。
图16
至此,这个RAID5的各项参数已经分析完全,数据也已经恢复。
三、其他关于RAID5数据恢复的基本过程如上,但是,对于RAID5各个参数的分析方法、RAID5数据的恢复方法并不仅限于此。对于不同类型的RAID5,可能会有不同的、更简捷的办法,比如通过硬盘内的其他标志或者明文判断盘序、通过修改RAID信息将RAID修好等等。当然,这些需要实际的操作经验以及对文件系统、文件格式等的深入研究。
四、附录1、关于Hp的RAID5双循环首先,Hp的RAID5双循环也是RAID5,它符合RAID5的所有特点,它的校验也是XOR出来的。其次,RAID5双循环是在RAID5的基础上变形而来,在数据存储的方式上较普通RAID5有了一定的变化。Hp的RAID5简单的说,就是将RAID5的每一个条带再细分为更小的条带(如图17)。所以,也可以通过上面介绍的办法,先判断出条带的整体大小,再来分析其它的参数。
图17
2、盘柜
由于操作系统或RAID控制器在设计上原因,或由于实际需要,有一部分RAID卡在管理RAID,尤其是外接盘柜的时候,会允许用户将磁盘组分成多个Logical Drive,即多个RAID进行管理。每个Logical Drive之间可以相互关联,也可以完全独立。比如一个有6块300G SCSI硬盘的盘柜,可以使用这10块硬盘先建立一个容量为200G RAID5,作为一个Logical Drive使用;再建立一个400G的RAID0;剩余的空间再建立一个RAID5(如图18所示)。此时,在每一个Logical Drive的首扇区都会有一个MBR,这个MBR里定义的是当前这个Logical Drive的分区情况。所以,这些MBR内分区的容量要比实际的总容量小许多。在分析参数的时候,需要每一个Logical Drive作为一个单独的RAID考虑。
图18