服务器、存 储维修/维保及RAID数据恢复 数据库修复 机房维保

RAID0阵列数据恢复方法

  • 时间:2020-10-26
  • 访问量:105
  • 关于RAID(磁盘阵列),大家可能有些陌生。在个人电脑上,RAID用的不多,但工作站,或服务器常用到RAID(磁盘阵列),例如RAID-0  RAID-1  RAID-5 RAID-10 等。

  • 对于RAID0的分析主要在于重组磁盘,重组磁盘就需要确定盘序,块大小,判断磁盘加入阵列的起始位置等。确定了上述参数后就可以重组阵列达到恢复数据的目的了。
  • 分析一下RAID0。希望能给大家带来一些启示。

  •  

  • 讲解服务器RAID0瘫痪阵列数据恢复方法

  • 这个是我在windows 2003下虚拟出的三块磁盘,每块磁盘的大小都是200M三块磁盘做了一个RAID0  ,采用NTFS格式化。上图显示的三块磁盘的0号扇区,这个扇区的主要作用是一个DOS分区结构。和基本磁盘的MBR有点类似。这个扇区也有一个分区表,但是只占用了一个分区表项。。大家看下图
  •  

  • 讲解服务器RAID0瘫痪阵列数据恢复方法

  • 分区类型是 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号扇区了。
  •  

  • 讲解服务器RAID0瘫痪阵列数据恢复方法

  • 看到了吗,真的是有东西签名标志 54 4F 43 4C 4F 43 4B 具体的数据库分析我们就不做了,太费时了,如果大家有兴趣可以加我共同讨论。这里我只是想让大家知道在RAID0中的各成员盘的具体结构是怎样的,写入的各部分数据有什么作用。我们回到0号扇区,找到那个软分区表,分区表显示分区的起始扇区是63号扇区,那么也就是说磁盘加入阵列的起始扇区是63号扇区。通过搜索发现前面的63个扇区除了0号扇区有一个软分区表6号扇区有一些东西其他扇区都是零。好的,我们转到63号扇区看看。
  • 1 确定盘序:
  •  

  • 讲解服务器RAID0瘫痪阵列数据恢复方法

  • 看到了吗 ,硬盘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项。
  •  

  • 讲解服务器RAID0瘫痪阵列数据恢复方法

  • 硬盘2  133823号扇区搜到了第一个MFT项,这块硬盘一个找到了从0号MFT项到36号MFT项,我们知道$MFT记录的0号MFT项到15号MFT项是NTFS文件系前面16个重要的元文件16到23号用作保留。而我们这里出现了36号MFT项,显然这个就是文件的MFT项了。
  •  

  • 讲解服务器RAID0瘫痪阵列数据恢复方法

  • 硬盘3  200766号扇区找到了第一个MFT项,这块硬盘就一个MFT项,是0号MFT

  • 讲解服务器RAID0瘫痪阵列数据恢复方法


  • 现在我们应该就能判断了吧,硬盘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时,数据完美重现了,恢复完成。
  •  

  • 讲解服务器RAID0瘫痪阵列数据恢复方法


    讲解服务器RAID0瘫痪阵列数据恢复方法


    讲解服务器RAID0瘫痪阵列数据恢复方法





推荐案例