RAID0纯手工恢复加超详细讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
RAID0分析
关于RAID,大家可能有些陌生。在个人电脑上,RAID用的不多,但是windows XP支持跨区卷和带区卷。Windows server 2003支持跨区卷,带区卷,RAID-5等。对于RAID0的分析主要在于重组磁盘,重组磁盘就需要确定盘序,块大小,判断磁盘加入阵列的起始位置等。确定了上述参数后就可以重组阵列达到恢复数据的目的了。但是在具体的操作中,要如何确定上述参数呢?这个就要对文件系统有深入的了解,特别是NTFS文件系统,因为RAID基本都是采用NTFS文件系统,很少有采用FAT32文件系统的。看了马林老师的《数据重现》之后发现,马林老师给出的实验素材真是精心设计过的了。如果自己做一个RAID就会出现很多和马老师的素材不一样的结果。这里我就从如何组建一个RAID0开始然后逐步分析。马老师给出的方法具有通用性,但是有些时候会出现找不到符合马老师给出的素材的情况,那么就不能用马老师讲的方法了。我们就只能在对文件系统有深入的理解的前提下,分析RAID了。这就要求我们对文件系统有深入的理解,特别是NTFS文件系统。好的,下面我就从组建一个RAID0开始,分析一下RAID0。希望能给大家带来一些启示。
这个是我在windows XP下虚拟出的三块磁盘,每块磁盘的大小都是200M三块磁盘做了一个RAID0 ,采用NTFS格式化。上图显示的三块磁盘的0号扇区,这个扇区的主要作用是一个DOS分区结构。和基本磁盘的MBR有点类似。这个扇区也有一个分区表,但是只占用了一个分区表项。。大家看下图
分区类型是0x42 起始于63号扇区,大小是0x9A 20 06 00 也就是401562个扇区。而磁盘的总扇区数是409600个扇区。因为在windows系统中采用逻辑磁盘管理也就是LDM。LDM支持JBOD, RAID0, RAID1和RAID5。要组成这些阵列类型,我们需要把我们的磁盘转换成动态磁盘,而LDM就是管理动态磁盘的。动态磁盘有两个重要的部分,一个是LDM分区区域,它占用磁盘的绝大部分,另一个就是动态磁盘的最后1MB,分配给LDM 数据库。LDM数据库包含分区区域的分配情况。所以在把基本磁盘转换成动态磁盘时需要在磁盘最后有一定的剩余空间。我们上图显示的类似基本磁盘的分区表部分我们管它叫软分区,分区类型就是0x42 而基本磁盘的分区我们就叫硬分区吧。好了,现在我们对组成RAID的磁盘有了一个基本的了解了,我们来总结一下
1.成员盘都是动态磁盘,windows操作系统有个叫LDM的管理它们。
2.LDM会在每个成员盘的最后1MB建立一个数据库,记录一些动态盘的信息,而且这个
数据库还有一个作用,当我们的成员盘被卸载了加载到其他机器上去之后,如果那台机器采用的和原来的机器一样的RAID那么我们的成员盘又可以组建成原来的RAID了,而数据不会丢失,这就方便了移植。
3.LDM会在动态磁盘的0号扇区建立一个如上图所示的软分区表。
4.LDM数据库中包含四个区域,一个叫做LDM私有头,一个内容表区域,一个数据库
记录区和一个事物处理日志区。
5.软分区描述的扇区总数并没有包括最后那1MB的LDM数据库。
好的,我们先看看是不是磁盘的最后1MB是数据库,看看数据库都写了些什么。1MB就是2048个扇区,我们的磁盘有409600个扇区减去2048。那么我们的数据库的起始扇区就是407553号扇区了。
看到了吗,真的是有东西签名标志54 4F 43 4C 4F 43 4B 具体的数据库分析我们就不做了,太费时了,如果大家有兴趣可以加我共同讨论。这里我只是想让大家知道在RAID0中的各成员盘的具体结构是怎样的,写入的各部分数据有什么作用。我们回到0号扇区,找到那个软分区表,分区表显示分区的起始扇区是63号扇区,那么也就是说磁盘加入阵列的起始扇区是63号扇区。通过搜索发现前面的63个扇区除了0号扇区有一个软分区表6号扇区有一些东西其他扇区都是零。好的,我们转到63号扇区看看。
1 确定盘序:
看到了吗,硬盘1的63号扇区是DBR 而其他两块盘的63号扇区不是DBR而是数据,这样我们就能知道硬盘1就是这个RAID0的第一块盘了。至于剩下的两块盘的盘序就通过其他方法确认了,而且我们在这里知道了硬盘1是RAID0的第一块盘,那么硬盘2和硬盘3肯定就是相邻的了。我们可以通过寻找硬盘2和硬盘3的MFT来确认他们的盘序和块大小。这个方法不错。但是很遗憾,我做的这个RAID居然找不到合适的MFT。也就是说通过比较MFT来判断盘序和块大小的方法就没戏了。那我们怎么办,马老师貌似没有给出方法了。看来我们的自己寻找解决的方法了。因为此RAID采用的是NTFS文件系统,那么我们能不能根据对NTFS文件系统的特点,找找看能不能通过其他的一些特征来确定盘序和块大小呢?我们通过分析DBR得出:
1,每簇扇区数1 个;
2,$FT起始簇号401408这里就是401408号扇区了;
3,$MFTMIRR起始簇号602111这里也就是602111号扇区了;
4,分区总扇区数1204223个扇区;
我们就想了,硬盘1已经确定是RAID0的第一块盘了,$MFTMIRR的起始扇区在$MFT 的后面。那么系统就是先向磁盘写入$MFTMIRR然后再写入$MFT了。
好的,我们就根据以MFT为线索,我们把每块成员盘的MFT搜索出来,当然就搜索前面几个MFT项就行了。这里我就直接给出我搜索出的结果了
硬盘1 在20768号扇区搜到了第一个MFT项,这块硬盘一共有3个MFT项分别是1号2号3号MFT项。
硬盘2 133823号扇区搜到了第一个MFT项,这块硬盘一个找到了从0号MFT项到36 号MFT项,我们知道$MFT记录的0号MFT项到15号MFT项是NTFS文件系前面16个重要的元文件16到23号用作保留。而我们这里出现了36号MFT项,显然这个就是文件的MFT项了。
硬盘3 200766号扇区找到了第一个MFT项,这块硬盘就一个MFT项,是0号MFT
。
现在我们应该就能判断了吧,硬盘2号记录的是$MFT这个元文件,而硬盘1和硬盘3记录的是$MFTMIRR这个元文件,也就是$MFT这个元文件前4个MFT项的备份,这个和NTFS系统的描述的样。呵呵,看来分析对了。。。
我们说了系统先写入$MFT在写入$MFTMIRR而硬盘2就是$MFT 硬盘1和硬盘3是$MFTMIRR 而我们前面已经确定硬盘1是RAID的第一块盘,这里我想我们就能判断出硬盘2就是RAID0的第二块盘了吧。硬盘3是第三块盘。而且根据各磁盘上的MFT参考号,我们也能判断出,系统先向硬盘1写入数据,到该写入$MFT元文件的时候,就转到了硬盘2向硬盘2写入,写入完成之后又转到了硬盘3开始写入$MFTMIRR,因为硬盘3记录的MFI参考号是0 接着又跳转到了硬盘1继续写入没有写完的$MFTMIRR所以硬盘1的MFT参考号是从1号开始的,这样就形成了一个完整的写入过程了。。盘序分析就出来了。。。
盘序就是硬盘1 硬盘2 硬盘3
2 确定块大小
方法一:
猜,逐个试,这个方法虽然笨了一点,但是很管用,我们已经确定了盘序,磁盘加入阵列的起始扇区是63号扇区,而块大小是2的整数次冥,也就是只可能是2 4 8 16 32 64 128等等,那么就挨个试,如果块大小吻合,那么数据就能恢复成功。这里我在选择块大小是