关于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, $MFT起始簇号 401408这里就是401408号扇区了; 3, $MFTMIRR起始簇号602111这里也就是602111号扇区了; 4, 分区总扇区数1204223个扇区; 我们就想了,硬盘1已经确定是RAID0的第一块盘了,$MFTMIRR的起始扇区在$MFT的后面。那么系统就是先向磁盘写入$MFT然后再写入$MFTMIRR了。 好的,我们就根据以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等等,那么就挨个试,如果块大小吻合,那么数据就能恢复成功。这里我在选择块大小是128时,数据完美重现了,恢复完成。 方法二 通过NTFS的特点以及根据实际的情况就行选取特征计算出块大小,如果,实际情况是能出现数据重现素材中的情况就好了,就能通过MFT项来计算出块大小了,但是很遗憾实际情况没有出现那种情况,具体的操作方法,请大家讨论讨论了,呵呵。。 好了,就写到这里了,本文的主要目的是讲解RAID0的理论原理,动态磁盘,看看RAID0中系统到底对磁盘进行了哪些写入。这样大家再分析RAID的时候就能做到心中有数了。如果要做阵列恢复,猜测盘序和块大小是一种不错的方法。。 |
针对SMR叠瓦式硬盘存在的问题,西数正在用更先进的技术解决,他们开
固态硬盘不认盘了能做数据恢复吗?从专业数据恢复层面来讲,当前有一
如今固态硬盘基本成为了标配,机械硬盘相比固态硬盘在读写速度在存在