RAID5数据恢复 step by step一、准备知识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。