一、准备知识 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里的一条记录。这时,向下拖拽滑动条,会在记录文件名的地方出现乱码、文件名内出现非法字符(* ? \ / : "