RAID数据恢复 第18章
RAID崩溃后的数据重组是数据恢复中比较重要的一个类别。RAID中,除RAID0以追求速度为目的外,其他类型的RAID多以追求数据存储安全性为目标。如RAID5、RAID5E、RAID5EE、HP 内外双循环等。RAID虽然在一定程度上提高了存储的安全性,但任何存储技术都不可能达到绝对的安全,一旦RAID因硬件失效、意外断电损坏阵列信息、损坏的RAID成员盘数量超出允许的范围等原因导致崩溃时,就必须在不依靠阵列信息的情况下重组阵列中的数据块提取数据。
本章,我们将以RAID0和RAID5为例重点介绍RAID数据恢复的原理、方法以及相关软件的使用。
RAID信息分析方法
.18.1 RAID信息分析方法RAID由多块磁盘组成,它们之间能够协同工作,依靠的是阵列信息。阵列信息中记录了各个成员盘的阵列类型、位置关系、块大小等与阵列组成相关的参数,阵列中的成员盘就是在这些参数的支持下才能完成复杂的协同工作任务。
一旦阵列信息损坏,支持成员盘间协同工作的参数无法读取,阵列已不再是一个完整的、可操控的存储设备,而是一个个散落的单一磁盘,其表现就是阵列崩溃。
要恢复已崩溃阵列中的数据,就必须按原数据块的存储顺序将它们提取出来并依照其前后位置关系重新组成一个卷,这个卷是没有条带关系、无校验信息的,相当于一个单一的存储设备,这个过程也叫做“去RAID化”过程。
要未完成去RAID化,必须知道原阵列的类型、数据存放形式,落实到实际参数就是根据不同情况,需要知道阵列的级别、块大小、循环方向、同异步等。要得到这些参数信息,必须从磁盘中寻找有规律性、可利用的某些数据,由这些数据进行判断得到我们想要的东西。
18.1.1 利用FAT表分析块大小
在FAT文件系统中,比较有规律性的内容是FAT表,因为FAT表的表项号是连续的,即由0开始编号,至分区中最大簇号,所有的编号都是连续的,虽然这个编号并不显式地表现出来。
虽然表项号本身并不显示地表现出来,但表项内记录的簇号却是表项号的间接反映,所以我们可以通过表项内记录的簇号获得某个表项的表项号。
那么,利用FAT表分析块大小的原理是什么?很简单,就是相邻成员盘的同条带同位置的FAT项间占用的空间是一个块大小,如图18.1所示。
图18.1
图中所示为两个阵列中的相邻磁盘(数据相邻)磁盘0和磁盘1, FAT项N位于磁盘0的某个块,当该块写满后,就会转至磁盘1的同条带进行写入。FAT项M是磁盘1上与FAT项N同条带同位置的FAT表项,这样,由FAT项N开始至本块结束在磁盘0上形成的空间A与FAT项M前本块内空间形成的B即为一个块。
因此,我们可以得出以下公式:
块大小扇区数 = (M - N) × 每FAT表项字节数 / 每扇区字节数
由于FAT表项内记录的是该表项编号对应簇的下一簇,并不是本表项的表项号本身,所以我们必须想办法得到所需位置的表项号才行。
我们知道,系统为文件分配空间时,会优先为其分配连续的空间,这时,它们的簇号就是连续的。簇号连续,则说明这些表项中记录的编号就是其下一个表项的表项号。通常,如果有三个表项内记录的号码是连续的,就可以判断为第一个表项中记录的号码是第二个表项的表项号,如图18.2所示。
图18.2
图中标志的三个表项,其内容分别为“95000000”、“96000000”和“97000000”,则我们可以判断内容为“96000000”的位置,其表项号为0x00000095。
这样,我们就有了获得某个表项位置表项号的方法,其实这是一个理论上的表述,在实际应用中,只要不是因为文件系统碎片空间太多,系统为占用多个簇的文件分配空间时,都会将其存储在连续的空间中,所以在fAT表中找到大片簇号连续的内容是很容易的事情。
懂得原理后,公式“块大小扇区数 = (M - N) × 每FAT表项字节数 / 每扇区字节数”中的M与N,我们可以直接用相应FAT表项中记录的簇号直接计算,如图18.3所示。
图18.3
图中所示的两个磁盘,来自于一个FAT32文件系统,所以其每FAT表项字节数为4。图中圈示的两部分,各自内部的簇号内容都是连续的,所以我们可以任意从其中找到两个位置相同的表项,如“4E060000”和“4E460000”,它们的值分别为0x064E和0x404E,转换为十进制分别为1614和17998,套入公式:
(17998 - 1614)x 4 / 512 = 128
所以,该阵列的块大小为128个扇区。
18.1.2 利用MFT记录号分析块大小
对于较高版本的NTFS文件系统分区,可以利用其MFT编号计算阵列的块大小,因为较高版本的NTFS,其MFT项偏移0x2C~0x2F处为本MFT项的编号,如图18.4所示的“B8520000”。
图18.4
利用MFT记录编号计算块大小的原理就是数据相邻的两块磁盘同一条带同一位置的MFT记录间的空间是一个块大小,如图18.5所示 。
图18.5
图中所示为两个阵列中的相邻磁盘(数据相邻)磁盘0和磁盘1, MFT编号N位于磁盘0的某个块,当该块写满后,就会转至磁盘1的同条带进行写入。M是磁盘1上与FAT项N同条带同位置的MFT记录编号,这样,编号N开始的MFT至本块结束在磁盘0上形成的空间A与编号为M的MFT项前本块内空间形成的B即为一个块。
因此,我们可以得出以下公式:
块大小扇区数 = (M - N)× 每MFT扇区数
实际应用如图18.6所示,图中磁盘1当前MFT项的编号为“01000000”,换算成十进制为1;磁盘2当前MFT项的编号为“09000000”,换算成十进制为9。每个MFT项占用两个扇区,套入公式:
( 9 – 1 ) x 2 = 16
所以,该阵列的块大小为16个扇区。
图18.6
18.1.3 利用FAT表分析数据块顺序
要正确地重组阵列中的数据,必须按原有的数据顺序正确地读取。而且,数据块的先后顺序也是判断磁盘顺序的依据,因此,数据顺序的判断尤为重要。
对于FAT文件系统,可以利用FAT表分析数据块的顺序。原理就是FAT表项是由小到大分配编号的,同一条带同一位置的FAT项编号较小者为数据靠前者,如图18.7所示。
图18.7
图中,磁盘1中标示的位置记录的簇号为“09010000”,由于其后的簇号值都是连续的,所以我们知道这个值“09010000”记录的是它所在位置下一个表项的编号,即0x0109;同样,磁盘2中标示的位置记录的数值“09110000”也是它所在位置下一个表项的编号,即0x1109,由于后者大于前者,所以磁盘2当前的数据块是位于磁盘1当前数据块之后的。
18.1.4 利用MFT记录号分析数据块顺序
利用MFT记录号分析数据块顺序的原理与利用FAT表分析的原理相同,因为MFT记录号也是由小到大进行编号,同一条带相同位置的MFT,编号小者数据块顺序靠前。
如图18.8所示,磁盘1中当前MFT的编号为“02000000”,换算成十进制为2;磁盘2中当前MFT的编号为“0A000000”,换算成十进制为10,后者大于前者,所以磁盘1中当前的数据块在磁盘2中当前数据块之前。
图18.8 --------------------------占位--------------------------------- --------------------------占位--------------------------------- --------------------------占位--------------------------------- --------------------------占位--------------------------------- --------------------------占位--------------------------------- --------------------------占位--------------------------------- --------------------------占位--------------------------------- --------------------------占位---------------------------------