该案例是一个Apple的PROAVIO视频阵列柜,由8块250GB的Barracuda ES SATA硬盘做成RAID-5,不知什么原因导致阵列柜突然不能访问。

将这8块成员盘去RAID化后连接到一个8通道的SAS适配器上。因为SAS适配器可以向下兼容STAT硬盘,这样同时可以连接8块硬盘,比较方便。

8块成员盘都连接到计算机之后,我们从“磁盘管理”中查看一下这8块硬盘,如图20-34所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-34 “磁盘管理”中的8块硬盘

从磁盘管理中可以看见“磁盘4”和“磁盘5”中前部都有一个大小为200MB的EFI系统分区,后部则是一个大小为1639.37GB的未知分区。这两块硬盘都只有250GB的容量,内部怎么会出现1639.37GB的分区呢?这显然是RAID-5逻辑盘的分区容量。

由于该RAID-5成员盘的数目比较多,成员盘容量也不算小,对成员盘做完整的磁盘镜像很不方便,于是我们将每块物理盘截取一部分扇区做成文件镜像,命名为“0.img”到“7.img”,并称文件“0.img”为“硬盘0”、文件“1.img”为“硬盘1”、文件“2.img”为“硬盘2”,以此类推。但这些文件的编号只是随意编排的,并不一定与RAID-5中各个成员盘的盘序相符。

在后文的分析过程中,根据需要,有些地方我们采用镜像文件的截图,而有些地方则采用原物理盘的截图,在效果上没有区别。

分析RAID开始扇区

用WinHex同时打开该RAID-5的8个镜像文件,查看8块成员盘的第一个扇区。“硬盘0”的第一个扇区的内容如图20-35所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-35 “硬盘0”的第一个扇区

“硬盘0”的第一个扇区内没有任何数据,全部都是0字节。

“硬盘1”、“硬盘2”、“硬盘5”、“硬盘6”和“硬盘7”的第一个扇区与“硬盘0”一样,内部也都是0字节。为节省篇幅就不一一截图了。

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

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-36 “硬盘3”的第一个扇区

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

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-37 “硬盘4”的第一个扇区

对比“硬盘3”和“硬盘4”的第一个扇区可以看出,这两个扇区的内容完全一样,都属于GPT磁盘的保护MBR,分区表中有一项类型为“EE”的分区表项。

通过对8块成员盘第一个扇区的分析可以知道,除了“硬盘3”和“硬盘4”的第一个扇区是完全一样的保护MBR以外,其他成员盘的第一个扇区都是0字节。这说明硬盘3和硬盘4的第一个扇区一定有一个是校验信息,同时也说明该RAID-5的起始扇区就是物理盘的0号扇区。

分析RAID-5结构

分析条带大小

在第1步的分析中我们已经发现“硬盘3”和“硬盘4”的第一个扇区是完全一样的保护MBR,那么我们就从“硬盘3”入手分析条带大小。

“硬盘3”的第二个扇区是GPT头,如图20-38所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-38 “硬盘3”的第二个扇区

该GPT头的参数如图20-39所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-39 GPT头的参数

从GPT头的参数中可以看到GPT分区表的起始扇区号是2。跳转到“硬盘3”的2号扇区,其内容如图20-40所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-40 “硬盘3”的2号扇区

“硬盘3”的2号扇区内有两个分区表项,分区表项的参数如图20-41所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-41 分区表项的参数

从第一个分区表项中可以看到,这是一个EFI系统分区,分区开始位置是40号扇区。EFI系统分区一般都采用FAT32文件系统,所以分区的第一个扇区应该是一个FAT32文件系统的DBR。下面跳转到“硬盘3”的40号扇区,其内容如图20-42所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-42 “硬盘3”的40号扇区

从内容看“硬盘3”的40号扇区的确是一个FAT32文件系统的DBR,这就说明该RAID-5的条带大小是大于40扇区的,其最小的可能值为64。

DBR中的BPB参数如图20-43所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-43 DBR中的BPB参数

DBR中的BPB参数显示“DBR保留扇区数”等于32,说明该FAT32文件系统的FAT1起始扇区号是32,换算为绝对扇区号等于72。跳转到“硬盘3”的72号扇区,其内容如图20-44所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-44 “硬盘3”的72号扇区

“硬盘3”的72号扇区很明显就是FAT表的开始扇区。这又证明了该RAID-5的条带大小一定大于72扇区,其最小值应该是128扇区。

从“硬盘3”的72号扇区的FAT表中可以看出该FAT32分区中没有任何数据,所以分析到这里我们无法再用这个EFI的FAT32分区来分析RAID-5的结构了。目前为止我们只能得到该RAID-5的条带大小最小应为128扇区这一个结论。

在EFI的FAT32分区之后,是Apple的文件系统分区,这个分区才是真正用来存放用户数据的。我们随后将借助这个Apple的文件系统分区进行RAID结构分析。

在“硬盘3”的GPT分区表第二个表项中描述了Apple文件系统分区的起始扇区号为409 640,将这个数值换算为单块物理盘中的地址,大概在58 520扇区左右。HFS+文件系统的第二个扇区是卷头,卷头中有签名标志,我们在每块物理盘的58 520扇区附近查找卷头的签名标志,最后发现“硬盘0”和“硬盘6”的58 538扇区都是HFS+文件系统的卷头,且内容完全一样,其中“硬盘0”的58 538号扇区的内容如图20-45所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-45 “硬盘0”的58 538号扇区

其他6块成员盘的58 538号扇区内都是0字节,这就说明“硬盘0”和“硬盘6”的58 538号扇区内的卷头必有一个是校验信息。

我们用WinHex模板查看“硬盘0”的58 538号扇区内卷头的参数,如图20-46所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-46 卷头的参数

卷头的参数内显示“每块字节数”为4096,“总块数”为427 128 822。从这两个值可以计算出该文件系统的总扇区数是3 417 030 576,这与GPT分区表中描述的分区大小完全一致,说明该卷头的确是当前Apple文件系统分区的合法卷头。

另外,卷头的参数内还显示“修改时间”为“2009-12-27”,这也正是该阵列柜出故障的日期,说明该卷头是原始卷头,而不是日志文件中被调用的卷头。

确定了该卷头是文件系统的合法卷头,我们就可以借助卷头内的参数进行分析了。首先查看卷头的编录文件信息,通过这个信息找到编录文件的地址。编录文件信息具体参数如图20-47所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-47 编录文件信息的参数

编录文件信息中描述了其第一个盘区的起始块号为51 437,换算为扇区号是411 496,再换算到单块物理盘中的绝对扇区号,大概为117 323。

在每块成员盘的117 323号扇区附近查找编录文件的内容,结果在“硬盘7”的117 264号扇区找到了编录文件的起始扇区,即编录文件的头节点,如图20-48所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-48 “硬盘7”的117 264号扇区

该头节点的具体参数如图20-49所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-49 头节点的参数

从头节点的参数中可以看到“每节点字节数”等于8192,即16个扇区。随后我们要在每块成员盘中都找到有节点存在的扇区,然后并列起来进行对比分析。

通过分析每块成员盘,发现117 376号扇区是一个条带的开始,并且“硬盘1”的117 376号扇区是一个叶结点的开始,其内容如图20-50所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-50 “硬盘1”的117 376号扇区

“硬盘5”的117 376号扇区也是一个叶结点的开始,并且与“硬盘1”的内容完全一样,其内容如图20-51所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-51 “硬盘5”的117 376号扇区

这两块成员盘的同一扇区的数据完全一样,那么其他成员盘的该扇区就应该都是0字节。查看其他6块成员盘的117 376号扇区,果然都是0字节,这说明“硬盘1”和“硬盘5”的117 376号扇区必定有一个是校验信息。

因为该文件系统编录文件的大小为16个扇区,所以从117 376号扇区往后跳转16个扇区,就应该是下一个节点的起始位置。

我们首先从“硬盘1”的117 376号扇区往后跳转16个扇区,即跳转到“硬盘1”的117 392号扇区,其内容如图20-52所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-52 “硬盘1”的117 392号扇区

“硬盘1”的117 392号扇区的节点类型显示为“00”,即索引节点,但是如果按照索引节点的结构分析此节点,就会发现数据都是错误的,具体参数如图20-53所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-53 硬盘1的117392号扇区所在节点的参数

从“硬盘1”的117 392号扇区所在节点的参数中很明显能够看出许多数值都是完全错误的,所以可以肯定该扇区是校验信息。

再查看“硬盘5”的117 392号扇区,其内容如图20-54所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-54 “硬盘5”的117 392号扇区

“硬盘5”的117 392号扇区的节点类型显示为“FF”,即叶节点。我们按照叶节点的结构分析此节点,其具体参数如图20-55所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-55 “硬盘5”的117 392号扇区所在节点的参数

从“硬盘5”的117 392号扇区所在节点的参数中能够看出其数值是很正常的,所以可以肯定该扇区不是校验信息。

通过上面的分析我们就能够确定“硬盘1”的117 376号扇区是一个校验块的开始。我们如果能够找到这个校验块的结束扇区,或者找到下一个数据块的开始扇区,就能够确定条带大小了。

在最初的分析中我们已经得知条带大小的范围一定是大于64扇区的,其最小的可能值就是128扇区。现在我们就假设该RAID-5的条带大小是128扇区,然后从“硬盘1”的117 376号扇区往后跳转128个扇区,即跳转到“硬盘1”的117 504号扇区。如果这个扇区依然是校验信息,说明该RAID-5条带大小一定大于128扇区;如果这个扇区不是校验信息,则说明该RAID-5条带大小就是128扇区。

“硬盘1”的117 504号扇区的内容如图20-56所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-56 “硬盘1”的117 504号扇区

“硬盘1”的117 504号扇区的节点类型显示为“FF”,即叶节点,其中的内容为链接记录。我们按照链接记录的结构分析此节点,其具体参数如图20-57所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-57 链接记录的结构参数

该节点的结构和参数都很完整,说明它是正常的数据,不是校验,从而可以推断该RAID-5的条带大小就是128扇区。

分析盘序和校验方向

在本案例的开始部分,通过对8块成员盘第一个扇区的分析可以知道,除了“硬盘3”和“硬盘4”的第一个扇区是完全一样的保护MBR以外,其他成员盘的第一个扇区都是0字节,这说明“硬盘3”和“硬盘4”的第一个扇区一定有一个是校验信息,另一个则是RAID-5逻辑盘数据的开始扇区。

下面我们通过反推法判断“硬盘3”和“硬盘4”的第一个扇区哪一个是校验信息。首先分析“硬盘3”,通过对编录文件中的节点分析,发现“硬盘3”的117 632号扇区是一个校验块的开始,如图20-58所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-58 “硬盘3”的117 632号扇区

“硬盘3”的117 632号扇区的节点类型显示为“FF”,即叶节点。我们按照叶节点的结构分析此节点,其具体参数如图20-59所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-59 “硬盘3”的117 632号扇区所在节点的参数

从“硬盘3”的117 632号扇区所在节点的参数中能够看出其数值非常混乱,所以可以肯定该扇区是校验信息。

因为“硬盘3”的117 632号扇区是校验信息,所以“硬盘3”的117 632号扇区所在条带就是校验块。现在我们就用这个校验块反推“硬盘3”的第一个校验块出现在几号条带上,具体算法为

117632 MOD(128×8)=896

就是结果等于896,说明“硬盘3”的第一个校验块出现在896号扇区所在的条带,而896号扇区是7号条带(也就是第8个条带)的开始扇区,所以推出硬盘3的第一个校验块出现在7号条带上,这就说明其0号条带是数据块不是校验块,同时也就证明了“硬盘4”的第一个条带是校验块。

通过上面的分析已经知道“硬盘3”的第一个扇区为正常数据,即保护MBR,是RAID-5逻辑盘数据的开始扇区,所以这块盘在RAID中的顺序要么是“0号盘”,要么是“1号盘”。如果该RAID-5为左结构,“硬盘3”就是0号盘;如果该RAID-5为右结构,“硬盘3”就是1号盘。

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

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

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-60 RAID-5左结构的盘序

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

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-61 RAID-5右结构的盘序

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

从两幅图中可以看出,如果图20-60的结构是正确的,那么“硬盘3”的第8个条带一定是校验块;如果图20-61的结构是正确的,那么硬盘3的第二个条带一定是校验块,而刚才我们已经利用反推法证明了“硬盘3”的第一个校验块出现在7号条带(即第8个条带)上,所以该RAID-5一定是左结构。

确定了该RAID-5是左结构,其中两块成员盘的盘序就确定了,即“硬盘3”为“0号盘”、“硬盘4”为“7号盘”。其他6块成员盘的盘序判断也都可以用反推法找出它们第一个校验块的位置,从而也就确定了盘序,具体方法与判断“硬盘3”的第一个校验块方法完全一样。为节省篇幅就省略该步骤,下面直接提供最终结果:“硬盘3”为“0号盘”、“硬盘0”为“1号盘”、“硬盘1”为“2号盘”、“硬盘2”为“3号盘”、“硬盘7”为“4号盘”、“硬盘5”为“5号盘”、“硬盘6”为“6号盘”、“硬盘4”为“7号盘”。

分析数据循环方向

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

在前面的分析中我们大量利用了编录文件的节点结构,分析数据循环方向还是要利用编录文件的节点信息。我们以128个扇区为一个条带组,分析并记录下来每一个条带组中的数据结构,在分析了多个条带组之后,记录下如图20-62所示的信息。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-62 分析中记录的信息

图20-62中“P”表示校验块,“X”、“Y”、“A”分别表示3个数据块。根据同步和异步的数据存储原理,如果数据块“Y”的最后一个扇区的数据能跟数据块“A”的第一个扇区衔接,那么就是异步结构;如果数据块“X”的最后一个扇区的数据能跟数据块“A”的第一个扇区衔接,那么就是同步结构。

首先找到数据块“Y”的最后一个扇区,即“硬盘4”的117 631号扇区,发现它是一个节点的最后一个扇区,其内容如图20-63所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-63 “硬盘4”的117 631号扇区

再找到数据块“A”的最后一个扇区,即“硬盘0”的117 632号扇区,发现它是一个叶节点的第一个扇区,其内容如图20-64所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-64 “硬盘0”的117 632号扇区

图20-63的阴影部分是“硬盘4”的117 631号扇区所在节点的最后一个节点记录,图20-64的阴影部分是硬盘0的117 632号扇区所在节点的第一个节点记录,可以看出图20-64中的节点记录显然是与图20-63中的节点记录相衔接的,所以该RAID-5一定是异步结构。

综上所述,该RAID-5为左异步结构。

重组数据

最后一步就该数据重组了,这个案例我们用R-STUDIO这个工具进行重组。因为在RAID结构分析时我们用的是成员盘的不完整镜像,在重组时为了能够得到完整数据,我们将用物理盘直接参与重组。

将RAID-5的成员盘全部连接到计算机上,然后运行R-STUDIO,就可以在界面中看到各成员盘了,如图20-65所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-65 R-studio界面中显示出各成员盘

通过R-STUDIO的菜单创建虚拟RAID-5,并把各成员盘按照之前分析好的顺序依次加入到虚拟RAID-5中,如图20-66所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-66 把成员盘加入到虚拟RAID-5中

接下来设置条带大小和循环方向,如图20-67所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-67 设置条带大小和循环方向

参数都设置正确后,就会在虚拟RAID-5下出现两个分区,一个是FAT32文件系统的EFI系统分区,另一个是HFS+文件系统的数据分区,如图20-68所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-68 虚拟RAID-5下显示的两个分区

用户数据都在HFS+文件系统的数据分区内,双击这个分区,就能够看见分区内的数据了,如图20-69所示。

苹果GPT分区RAID-5数据恢复实例分析-数据恢复迷

图20-69 HFS+文件系统分区内的数据

为了避免泄露用户的数据,我们对截图做了技术处理,隐去部分文件名。