一台NAS(网络附加存储)设备由6块160GB的SATA硬盘组成RAID-5,内嵌Free BSD系统,在使用中突然崩溃,所有数据无法访问。下面我们详细讲解这台NAS设备的数据恢复过程。

将6块SATA硬盘从NAS设备中依次抽离出来,按照顺序编上号码,然后做出完整的文件镜像,镜像文件的名称就按照硬盘的编号命名为0.img到5.img。在分析时我们就称文件0.img为“硬盘0”、1.img为“硬盘1”,等等,但这个顺序不一定与RAID-5的盘序相符。

下面开始分析。

分析RAID开始扇区

用WinHex同时打开6块物理盘的镜像文件。首先查看每块物理盘的第一个扇区,“硬盘0”的第一个扇区的内容如图19-43所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-43 “硬盘0”的第一个扇区

“硬盘1”的第一个扇区的内容如图19-44所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-44 “硬盘1”的第一个扇区

“硬盘2”的第一个扇区的内容如图19-45所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-45 “硬盘2”的第一个扇区

“硬盘3”的第一个扇区的内容如图19-46所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-46 “硬盘3”的第一个扇区

“硬盘4”的第一个扇区的内容如图19-47所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-47 “硬盘4”的第一个扇区

“硬盘5”的第一个扇区的内容如图19-48所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-48 “硬盘5”的第一个扇区

从6块成员盘的第一个扇区可以看出,它们都是MBR扇区,因为Free BSD系统运行在x86架构上,所以磁盘上有MBR结构。

需要注意,x86架构的Free BSD系统的字节序为Little-endian。

详细分析6块成员盘的MBR扇区,发现其中的内容除了磁盘签名不同以外,其他数据完全一样,分区表中都有3个类型为“A5”的分区表项。“A5”就代表Free BSD分区,不过Free BSD系统把这种由MBR管理的分区称为切片。我们用WinHex的模板查看一下这3个切片的参数,如图19-49所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-49 3个切片的参数模板

从图19-49中可以计算出,3个切片的容量总和基本等于单块物理盘的扇区总数,也就是说这三个分区表项把物理盘划分为3个独立的切片。

进一步对比分析发现,每块物理盘的前两个切片内的数据都是一样的,它们是物理盘上的独立切片,一个作为NAS设备内嵌的Free BSD系统分区,另一个是Swap分区,这两个切片并没有参与组建RAID-5。

第三个切片从610 470号扇区开始,每块物理盘上从610 470号扇区往后连续的256个扇区的数据也是一样的,直到610 726号扇区开始,各物理盘的数据才不同。我们进一步对它们进行异或测试,发现610 726号扇区往后都能够通过测试。这就说明该RAID-5的起始扇区在物理盘的610 726扇区。

分析RAID结构

分析条带大小

在第1步中我们分析出RAID开始位置在物理盘的610 726号扇区。下面就从这个扇区开始分析条带大小。

首先查看“硬盘0”的610 726号扇区,发现都是0字节,再往下翻一个扇区,即610 727号扇区,是一个Free BSD系统的磁盘标签结构,如图19-50所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-50 “硬盘0”的610 727号扇区

在这个磁盘标签的分区表中,使用了3个分区表项,但都是描述的同一个分区。该分区的起始位置是0号扇区,不过这个0号扇区是相对的,其绝对扇区号是“硬盘0”的610 726号扇区。分区的大小为1 559 828 480扇区,这个数值接近物理盘MBR中第三个切片容量的5倍,说明这就是RAID-5逻辑盘的容量,也就是说NAS系统把6块物理盘的第三个切片组建为一个RAID-5逻辑盘。

接下来我们去找Free BSD系统的超级块。Free BSD系统的超级块应该位于分区的16号扇区,我们将其换算为硬盘0的绝对扇区号,即610 742号扇区。跳转到“硬盘0”的610 742号扇区,其内容如图19-51所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-51 “硬盘0”的610 742号扇区

“硬盘0”的610 742号扇区看起来很像超级块的第一个扇区。Free BSD系统的超级块占用4个扇区,其第三个扇区中有签名标志。为了加强判断,我们跳转到“硬盘0”的610 744号扇区查看是否有超级块的签名标志。

“硬盘0”的610 744号扇区的内容如图19-52所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-52 “硬盘0”的610 744号扇区

“硬盘0”的610 744号扇区中有超级块的签名标志“54 19 01 00”,那么就可以肯定“硬盘0”的610 742号扇区就是超级块的开始。

现在我们用WinHex模板查看该超级块的具体参数,如图19-53所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-53 超级块的具体参数

从图19-53可以看出,超级块中的“最后写入时间”显示为“2009-11-24”,这正是用户的服务器出故障当天的日期。从这一点可以判断该超级块是原始超级块。

确定了“硬盘0”的610 742号扇区为文件系统的原始超级块,这就可以说明该RAID-5的条带大小一定大于16个扇区,因为“硬盘0”的610 742号扇区就相当于RAID起始位置的16号扇区。

另外从超级块的参数中还可以获知“备份超级块的相对偏移”为16,说明备份超级块相对于柱面组参考位置的偏移量是16段,而“每段字节数”为1024,所以0号柱面组的超级块备份起始于32号扇区,换算为物理盘的绝对扇区号是610 758。我们跳转到“硬盘0”的610 758号扇区,其内容如图19-54所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-54 “硬盘0”的610 758号扇区

“硬盘0”的610 758号扇区的确是超级块,其参数如图19-55所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-55 备份超级块的具体参数

分析发现这个超级块的“最后写入时间”是“2007-05-23”,是很久以前的时间了,说明这是系统的初始时间,并没有随着系统的运行而改变。这也证明了该超级块就是原始超级块的备份,同时我们还能够推断出该RAID条带大小大于32扇区。

继续往下分析,超级块的参数中还描述了“i-节点表的相对偏移”为32,说明i-节点表相对于柱面组参考位置的偏移量是32段,而“每段字节数”为1024,所以0号柱面组的i-节点表起始于64号扇区,换算为物理盘的绝对扇区号是610 790。我们跳转到“硬盘0”的610 790号扇区,内容如图19-56所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-56 “硬盘0”的610 790号扇区

分析“硬盘1”的610 790号扇区可以看出,这正是i-节点表的开始,第一个i-节点和第二个i-节点是空的,第三个i-节点是根目录的i-节点,从而又证明了该RAID-5条带大小大于64扇区。

i-节点表之后的结构就是柱面组概要了。从超级块中可以查看到柱面组概要的起始段号为1024,也即2048扇区,说明从i-节点表开始的64号扇区到2048号扇区之间都是i-节点表所占用的空间了。

2048号扇区换算为物理盘的绝对扇区号为612 774。跳转到“硬盘0”的612 774号扇区,其内容如图19-57所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-57 “硬盘0”的612 774号扇区

“硬盘0”的612 774号扇区都是0字节,并不是柱面组概要的开始。从这一点可以证明该RAID-5的条带大小是小于2048扇区的。

经过上面的分析,我们可以把该RAID-5的条带大小限定在128扇区到1024扇区之间,可能的值有128、256、512、1024这4个。

因为“硬盘0”的相对64号扇区之后都是i-节点信息了,i-节点表占用的空间很大,所以从硬盘0上分析条带大小已经不太容易了。我们再来查看其他成员盘的RAID起始扇区,即610 726号扇区。

“硬盘1”的610 726号扇区的内容如图19-58所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-58 “硬盘1”的610 726号扇区

“硬盘2”的610 726号扇区的内容如图19-59所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-59 “硬盘2”的610 726号扇区

“硬盘3”的610 726号扇区的内容如图19-60所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-60 “硬盘3”的610 726号扇区

“硬盘4”的610 726号扇区的内容如图19-61所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-61 “硬盘4”的610 726号扇区

“硬盘5”的610 726号扇区的内容如图19-62所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-62 “硬盘5”的610 726号扇区

对比这5块成员盘的610 726号扇区可以看出,“硬盘1”、“硬盘2”及“硬盘5”的610 726号扇区都属于i-节点表的内容,其中都是空i-节点;“硬盘4”的610 726号扇区是柱面组概要的内容;“硬盘3”的610 726号扇区则很明显是校验信息,是由柱面组概要及空i-节点异或出来的结果。

在之前分析过,RAID-5逻辑盘的柱面组概要开始于1024段,即2048扇区,说明在柱面组概要前有2048个扇区,而现在“硬盘4”的610 726号扇区出现了柱面组概要,说明其之前的4块成员盘的前4个条带刚好存放了柱面组概要之前的2048个扇区,从这一点可以推断该RAID-5的条带大小是512扇区。

当然,我们还可以从“硬盘3”上判断条带大小。因为“硬盘3”的610 726号扇区是校验信息,说明这是一个校验块,我们只要从这个扇区往后分析,直到查找到校验块的结束,就可以确定条带大小了。

从“硬盘3”的610 726号扇区往后分别跳转128、256、512个扇区,发现跳转到512扇区处突然变成空扇区,而之前的扇区依然都是校验信息。“硬盘3”的相对512扇区处换算为绝对扇区号是611 238,该扇区的内容如图19-63所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-63 “硬盘3”的611 238号扇区

“硬盘3”的611 238号扇区的前一个扇区是611 237号扇区,其内容如图19-64所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-64 “硬盘3”的611 237号扇区

可以很明显地看出,“硬盘3”的611 237号扇区依然是校验信息,从而进一步确认了该RAID-5的条带大小就是512扇区。

分析盘序和校验方向

通过上面的分析已经知道“硬盘0”的610 727号扇区为磁盘标签,也就是RAID-5逻辑磁盘数据的开始处的第二个扇区,所以这块盘在RAID中的顺序要么是“0号盘”,要么是“1号盘”。如果该RAID-5为左结构,“硬盘0”就是“0号盘”;如果该RAID-5为右结构,“硬盘0”就是“1号盘”。

“硬盘1”、“硬盘2”和“硬盘5”的610 726号扇区都是i-节点,说明它们在盘序上是排在“硬盘0”之后的,但这3块盘之间的顺序还不能确定。

“硬盘4”的610 726号扇区是柱面组概要,这说明“硬盘4”在盘序上是排在“硬盘1”、“硬盘2”和“硬盘5”这3块成员盘之后的。

“硬盘3”的610 726号扇区是校验信息,所以这块盘在RAID中的顺序要么是“5号盘”,要么是“0号盘”。如果该RAID-5为左结构,“硬盘3”就是“5号盘”;如果该RAID-5为右结构,“硬盘3”就是“0号盘”。

通过以上分析可知,如果该RAID-5是左结构,那么盘序为:“硬盘0”为“0号盘”,“硬盘4”为“4号盘”,“硬盘3”为“5号盘”,其他3块盘的盘序待定,其结构如图19-65所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-65 RAID-5左结构的盘序

如果该RAID-5是右结构,那么盘序为:“硬盘3”为“0号盘”,“硬盘0”为“1号盘”,“硬盘4”为“5号盘”,其他3块盘的盘序待定,其结构如图19-66所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-66 RAID-5右结构的盘序

图19-65和图19-66中的两种结构必定只有一种是正确的,那么如何判断哪一种是正确的呢?

从两幅图中可以看出,如果图19-65的结构是正确的,那么“硬盘0”的第二个条带一定是数据;如果图19-66的结构是正确的,那么“硬盘0”的第二个条带一定是校验,所以我们可以把焦点放在“硬盘0”的第二个条带上,看这个条带到底是数据还是校验。

因为该RAID-5条带大小为512个扇区,所以第二个条带就开始于物理盘的611 238号扇区,跳转到“硬盘0”的611 238号扇区,其内容如图19-67所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-67 “硬盘0”的611 238号扇区

“硬盘0”的611 238号扇区显然是柱面组概要的内容,所以是数据而不是校验。

为了进一步确认,我们查看其他成员盘的611 238号扇区,看看哪块成员盘是校验信息。“硬盘1”的611 238号扇区的内容如图19-68所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-68 “硬盘1”的611 238号扇区

“硬盘1”的611 238号扇区全为0字节,显然不是校验。

“硬盘2”的611 238号扇区的内容如图19-69所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-69 “硬盘2”的611 238号扇区

“硬盘2”的611 238号扇区是正常数据,不是校验。

“硬盘3”的611 238号扇区的内容如图19-70所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-70 “硬盘3”的611 238号扇区

“硬盘3”的611 238号扇区全为0字节,显然也不是校验。

“硬盘4”的611 238号扇区的内容如图19-71所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-71 “硬盘4”的611 238号扇区

“硬盘4”的611 238号扇区非常像校验,我们继续查看“硬盘5”。

“硬盘5”的611 238号扇区的内容如图19-72所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-72 “硬盘5”的611 238号扇区

“硬盘5”的611 238号扇区也全部为0字节,所以不是校验。

通过上面的分析,可以肯定“硬盘4”的611 238号扇区是校验,“硬盘0”的611 238号扇区则不是校验,所以该RAID-5为左结构,即图19-65所示的结构是正确的。

现在还有3块成员盘的盘序不能确定,我们继续分析。

对比图19-65进行分析,可以看出现在还无法确定盘序的是“硬盘1”、“硬盘2”和“硬盘5”,它们分别应该是“1号盘”、“2号盘”和“3号盘”。

判断这3块盘的顺序有很多方法,这里提供一种思路。从图19-65中可以很直观地看出,“1号盘”的第5个条带是校验块、“2号盘”的第4个条带是校验块、“3号盘”的第3个条带是校验块,所以我们只要分别去查看“硬盘1”、“硬盘2”和“硬盘5”的第3个条带、第4个条带和第5个条带,就很容易判断出它们的盘序。

通过实际分析,发现“硬盘1”的第5个条带是校验块,所以“硬盘1”是“1号盘”;“硬盘2”的第4个条带是校验块,所以“硬盘2”是“2号盘”;“硬盘5”的第3个条带是校验块,所以“硬盘5”是“3号盘”。

该RAID-5最终的盘序为:“硬盘0”为“0号盘”、“硬盘1”为“1号盘”、“硬盘2”为“2号盘”、“硬盘5”为“3号盘”、“硬盘4”为“4号盘”、“硬盘3”为“5号盘”。

分析数据循环方向

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

如果该RAID-5为异步结构,即左异步,其数据分布情况如图19-73所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-73 左异步的数据分布

如果该RAID-5为同步结构,即左同步,其数据分布情况如图19-74所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-74 左同步的数据分布

现在我们只要分析数据块“4”最后一个扇区后面衔接的数据在“0号盘”上还是在“5号盘”上。如果在“0号盘”上,就是左异步;如果在“5号盘”上,就是左同步。

数据块“4”是“4号盘”的第一个条带,其最后一个扇区也就是“硬盘4”的611 237号扇区,其内容如图19-75所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-75 “硬盘4”的611 237号扇区

从内容看,“硬盘4”的611 237号扇区是柱面组概要。为了判断该扇区之后的数据写入的位置,我们需要分别查看“0号盘”和“5号盘”第二个条带的开始扇区。

“0号盘”第二个条带的开始扇区也就是“硬盘0”的611 238号扇区,其内容如图19-76所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-76 “硬盘0”的611 238号扇区

“硬盘0”的611 238号扇区内也是柱面组概要的内容,“硬盘4”的611 237号扇区应该衔接该扇区。但为了加强判断,我们再查看一下“5号盘”第二个条带的开始扇区。

“5号盘”第二个条带的开始扇区也就是“硬盘3”的611 238号扇区,其内容如图19-77所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-77 “硬盘3”的611 238号扇区

“硬盘3”的611 238号扇区内全是0字节,所以无法与“硬盘4”的611 237号扇区衔接。那么我们可以断定“硬盘0”的611 238号扇区是衔接在“硬盘4”的611 237号扇区之后的,所以该RAID-5为左异步结构。

数据重组

通过第2步的分析已经得到了RAID-5的具体结构,最后就可以通过数据重组获得数据了。能够支持Free BSD系统的RAID重组工具包括X-Ways Forensics、R-studio和UFS Explorer等,用这三个工具进行重组,都可以直接看到RAID-5中的数据。我们以R-studio为例简单讲解重组的方法。

运行R-studio后,把6个镜像文件打开,然后创建虚拟RAID-5,并把6块成员盘按照顺序加入,具体参数设置如图19-78和图19-79所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-78 设置盘序和RAID开始扇区

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-79 设置条带大小和循环方向

参数设置正确以后,就可以在虚拟RAID下看到该RAID-5逻辑盘的分区了,如图19-80所示。

Free BSD系统服务器NAS RAID-5数据恢复实例-数据恢复迷

图19-80 RAID-5逻辑盘的分区

双击这个大小为743.78GB的分区“BSDPart0”,就可以看到其中的数据了。