[数据恢复故障描述]
见<infortrend ESDS RAID6故障后的数据恢复方案>文章中的描述,infortrend ESDS-S12F-G1440存储,内接12块2TB硬盘组成RAID6,一个GPT分区,文件系统为NTFS,大小为18.2TB。3块硬盘离线后强制激活,并做了几分钟REBUILD,发现数据出错。
[数据恢复过程]
1、使用DELL R720为恢复服务器平台,安装WINDOWS 2008R2系统。在DELL R720服务器内加DELL H200 6G扩展卡,在H200上接2组DELL MD1200磁盘阵列。A组MD1200连接所有12块2T源盘,B组接12块2T目标硬盘。
2、保持A组所有磁盘在WINDOWS2008 R2中脱机,激活所有B组硬盘。使用北亚磁盘镜像工具对所有A组12块硬盘一对一镜像到B组12块硬盘。
3、镜像完成后,关机,将源盘全部拿下,封存好,不再操作源盘。
4、使用磁盘编辑器,对12块镜像盘做结构分析,发现每块硬盘前部具有明显RAID信息的痕迹,按查找确定RAID中LUN的起始分配位置。
5、进行RAID6算法猜测推断,发现其基于标准P与另一个未知算法法则Q的右异步。但套用 里德-所罗门(Reed-solomon)算法不符合,按互联网上所有资料分析,基于PQ均等螺旋分布的RAID6只有里德-所罗门(Reed-solomon)算法 ,怀疑为其变种,但存在同一条带全0位置计算后非全0的情况,故推翻此判断。
6、结合对控制器的测试,发现其Q校验基于一种随机的xor,如同Park编码,算法完全随机,但校验分布却完全不同于Park,所以即使思路类似,但算法却完全不同。
7、需要事先得到12块盘中所有缺2块时的完整算法,共有C(12,2)=66种缺盘情况,每一种至少需要16种运算规则,经程序运行后(因运算复杂,人工无法证明),发现为了得到一个单元,大约要运算30-50次xor。
8、用程序生成的运算公式,有140多K大小,即总计约14万字符。如此复杂的运算会对数据恢复周期带来影响,需要优化算法。
9、优化算法模块,引入可以简化算法的中间变量层,将算法压缩至原来的约50%(明文)。
10、针对一个明显不同步的数据块区,编写了一段程序,对所有C(12,2)进行计算,再将计算后的结果与预想结果进行比较。经历这样的几个过程,明确掉线盘0号与3号盘。
11、对算法进行二进制优化,所有运算放弃STL,改用数组,并使用bitmap的理念表示表达式中的所有成员,实现算法的最大性能。
12、按算法和分析出的结构对数据进行初步分析,未发现明显数据异常。
13、生成数据到另一个20T的目标存储。
[数据恢复耗时]
磁盘镜像:7小时
分析算法:断断续续花费约60天。这个工程是我从业以来付出最长周期的工程,鉴于一个完全破天荒的算法,极大的算法研究热情支撑我编写了近万行代码进行判断、分析、优化、测试、恢复。感谢用户信赖北亚数据恢复中心,给予我们足够的时间。(结构及部分算法过程我会发布另一博文对其表述)
导出数据:约100小时
[数据恢复结果]
100%数据恢复成功(不排除有部分数据有少许损坏,但截止发稿,抽查验证的数据全部无异常)