一台Red Hat Linux系统的服务器,使用5块36GB的SCSI硬盘组建为RAID-5,在一次突发故障之后重启服务器,但是无法识别RAID-5,数据全部丢失。

为了恢复RAID-5中的数据,把服务器的5块SCSI硬盘去RAID化后插入SCSI模组中分别做成文件镜像,然后用WinHex同时打开5个文件镜像进行分析。首先做一个约定,我们这里称文件“0.img”为“硬盘0”,文件“1.img”为“硬盘1”,文件“2.img”为“硬盘2”,以此类推,但这些文件的编号只是按照硬盘在服务器中的物理顺序编排的,并不一定与RAID中各个硬盘的盘序相符。

分析RAID开始扇区

用WinHex同时打开5块物理盘的镜像文件,并查看它们的第一个扇区。“硬盘0”的第一个扇区全是0字节,如图18-60所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-60 “硬盘0”的第一个扇区

“硬盘1”的第一个扇区是MBR,如图18-61所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-61 “硬盘1”的第一个扇区

“硬盘2”的第一个扇区全都是0字节,如图18-62所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-62 “硬盘2”的第一个扇区

“硬盘3”的第一个扇区也是MBR,如图18-63所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-63 “硬盘3”的第一个扇区

“硬盘4”的第一个扇区也完全是0字节,如图18-64所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-64 “硬盘4”的第一个扇区

通过查看5块成员盘的第一个扇区发现,“硬盘1”和“硬盘3”的第一个扇区内容完全一样,都是结构完好的MBR。分区表中有三个分区表项,第一个及第二个分区表项描述了两个“0x83”类型的主磁盘分区,它们的参数如图18-65所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-65 分区表项1和2的参数

第三个分区表项描述了一个扩展分区,其参数如图18-66所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-66分 区表项3的参数

从分区表的参数中可以计算出所有分区的总扇区数为284 371 542。因为该RAID-5是由5块物理盘组成的,所以用284371542÷(5-1)就大概是每块物理盘的扇区数,这个结果等于71 092 885,经过换算差不多刚好等于36GB,也就是一块物理盘的容量。

从以上分析可以看出,这个MBR是一个有效的MBR扇区,所以能够知道该RAID-5起始扇区就是物理盘的0扇区。

分析RAID结构

分析条带大小

通过第1步的分析已经知道“硬盘0”、“硬盘2”、“硬盘4”第一个扇区的数据都是0,“硬盘1”、“硬盘3”的第一个扇区都是MBR,且完全一样,从这些信息中可以得出一个结论:这两个MBR必定有一个是校验,也就是经过其他4块成员盘的第一个扇区异或得到的结果。

分析条带大小我们就从这两个MBR扇区所在成员盘入手。MBR扇区的分区表中第一个表项描述了分区的开始扇区是63,那么我们分析“硬盘1”和“硬盘3”的63号扇区,看它们是不是分区的开始位置,并且查看它们的65号扇区是不是超级块。

先跳转到“硬盘1”的63号扇区,其内容如图18-67所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-67 “硬盘1”的63号扇区

“硬盘1”的63号扇区很明显是i-节点,往后翻到65号扇区,也同样是i-节点,而i-节点已经是超级块之后的结构了。

再跳转到“硬盘3”的63号扇区,其内容如图18-68所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-68 “硬盘3”的63号扇区

从图18-68可以看出“硬盘3”的63号扇区也是i-节点结构,往后翻到65号扇区,依然是i-节点。

从“硬盘1”和“硬盘3”的65号扇区都没有找到超级块,63号扇区也不是分区的开始位置,所以可以断定,该RAID-5的条带大小一定小于64扇区。

接下来我们在每块物理盘中通过搜索十六进制数值“53 EF”来查找超级块,搜索的设置方法如图18-69搜索。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-69 搜索超级块的参数设置方法

结果在“硬盘3”的17号扇区找到了超级块,如图18-70所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-70 “硬盘3”的17号扇

从超级块出现在物理盘的17号扇区基本可以判断该RAID-5的条带大小为16个扇区。因为超级块位于文件系统的2号扇区,当前RAID-5逻辑盘第一个分区起始于63号扇区,所以第一个分区的超级块就应该在RAID-5逻辑盘的65号扇区,按照16个扇区为一个条带,超级块刚好写入到某块物理盘的17号扇区。

为了进一步验证对条带大小的推测,同时也为了找出各个成员盘在盘序上的关系,我们再查看一下每块物理盘的15号和16号扇区是什么数据。首先跳转到“硬盘0”的15号扇区,这是一个引导扇区,也就是文件系统的第一个扇区,相当于RAID-5逻辑盘的63号扇区,如图18-71所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-71 “硬盘0”的15号扇区

“硬盘0”的16号扇区很明显是i-节点的数据结构,如图18-72所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-72 “硬盘0”的16号扇区

然后跳转到“硬盘1”的15号扇区,是一个全0扇区,如图18-73所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-73 “硬盘1”的15号扇区

“硬盘1”的16号扇区的数据比较像校验信息,如图18-74所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-74 “硬盘1”的16号扇区

再跳转到“硬盘2”的15号扇区,这个扇区的数据全部为0,如图18-75所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-75 “硬盘2”的15号扇区

“硬盘2”的16号扇区前部都是0,在扇区最后有一个i-节点,如图18-76所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-76 硬盘2的16号扇区

继续查看“硬盘3”的15号扇区,这也是一个引导扇区,跟“硬盘0”的15号扇区内容一样,如图18-77所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-77 “硬盘3”的15号扇区

再查看“硬盘3”的16号扇区,是一个全部为0的扇区,如图18-78所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-78 “硬盘3”的16号扇区

最后查看“硬盘4”,它的15号扇区全都是0,如图18-79所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-79 “硬盘4”的15号扇区

“硬盘4”的16号扇区的数据应该是位图,如图18-80所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-80 “硬盘4”的16号扇区

为了看得清楚,我们把上面对各成员盘0号扇区、15号扇区和16号扇区的分析总结在一起,如图18-81所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-81 各个成员盘的数据总结

从图18-81中各个成员盘这些扇区的数据情况就完全可以肯定该RAID-5的条带大小为16个扇区了。

分析盘序和校验方向

在判断出条带大小为16个扇区之后,我们再注意看图18-81的硬盘1,其16号扇区为校验,说明硬盘1的第二个条带为校验块,所以其第一个条带一定是数据块,也就是说硬盘1的0号扇区的MBR是数据而不是校验,那么硬盘3的第一个扇区的MBR就必定为校验了。

通过上面的分析,我们可以认为,在该RAID-5为左结构的情况下,“硬盘1”是“0号盘”,“硬盘3”是“4号盘”,其他三块盘的盘序不确定,用“?”代替,其结构如图18-82所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-82 假设该RAID-5为左结构的情况

很明显图18-82中“硬盘1”的16号扇区为校验是跟该结构矛盾的,所以这种假设不成立,也就是说该RAID-5不可能是左结构。

在该RAID-5为右结构的情况下,“硬盘3”是“0号盘”,“硬盘1”是“1号盘”,其他三块盘的盘序不确定,用“?”代替,其结构如图18-83所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-83 假设该RAID-5为右结构的情况

从图18-83的结构看显然这个假设是跟实际结构相符的,所以该RAID-5为右结构,并且“硬盘3”就是“0号盘”,“硬盘1”就是“1号盘”,其他三块盘的盘序还是未知的。

现在我们来分析剩下三块盘的盘序。前面通过搜索的方式在“硬盘3”的17号扇区找到了超级块,该超级块中的主要参数如图18-84所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-84 超级块中的参数

从超级块中的参数中可以看到该文件系统的块大小为4096字节,也即8扇区,所以从“硬盘3”的超级块所在扇区往后跳转6个扇区,就应该是文件系统的块组描述符表了。

我们跳转到“硬盘3”的23号扇区,果然是块组描述符表,如图18-85所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-85 “硬盘3”的23号扇区

其中0号块组描述符的参数如图18-86所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-86 0号块组描述符的参数

0号块组描述符的参数告诉我们如下信息:

  • 0号块组的块位图起始块号为2,换算为扇区号为16,对应RAID-5逻辑盘的79号扇区。
  • 0号块组的i-节点位图起始块号为3,换算为扇区号为24,对应RAID-5逻辑盘的87号扇区。
  • 0号块组i-节点表起始块号为4,换算为扇区号为32,对应RAID-5逻辑盘的95号扇区。

经过上面的分析,我们可以把RAID-5逻辑盘的结构画出来,如图18-87所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-87 RAID-5逻辑盘的结构图

然后我们再将RAID-5逻辑盘的结构按照RAID-5的数据分布规则转换到物理盘中,如图18-88所示。

Linux服务器右异步RAID-5数据恢复实例分析-数据恢复迷

图18-88 将RAID-5逻辑盘的结构转换到物理盘中

根据图形分析如下:

  • 图18-88中的63号扇区为引导扇区,对应图18-81中“硬盘0”的15号扇区,所以“硬盘0”为“4号盘”。
  • 图18-88中的80号扇区为块位图,对应图18-81中“硬盘4”的16号扇区,所以“硬盘4”为“2号盘”。
  • 图18-88中的96号扇区为i-节点,对应图18-81中“硬盘2”的16号扇区,所以“硬盘2”为“3号盘”。

通过以上分析可知该RAID-5的校验方向为右结构,盘序为:“硬盘3”为“0号盘”,“硬盘1”为“1号盘”,“硬盘4”为“2号盘”,“硬盘2”为“3号盘”,“硬盘0”为“4号盘”。

分析数据循环方向

条带大小、盘序、校验方向都确定了,最后就剩下数据的循环方向了,即同步还是异步的问题。

还是以图18-88中的数据进行分析,“4号盘”第一个条带最后一个扇区的数据是引导扇区,它随后的第二个扇区应该是超级块,而超级块在“0号盘”第二个条带的第二个扇区上,也就是说“4号盘”第一个条带的数据显然衔接到“0号盘”第二个条带上,所以这个RAID-5的数据走向是异步的,最终确定该RAID-5的结构为右异步。

数据重组

通过第2步的分析已经得到了该Linux系统RAID-5的具体结构,最后就可以通过数据重组获得数据了。能够支持Ext3文件系统RAID-5数据重组的工具包括R-studio和UFS Explorer,用这两个工具进行重组,可以直接看到Ext3文件系统中的数据。

重组的具体方法在前面的案例中介绍得比较详细了,为了节约篇幅不再重复讲述。