服務器數據恢復環境:
infortrend某型號存儲;
12塊硬盤組成RAID6,一個GPT分區文件系統為NTFS。
服務器故障:
3塊硬盤離線后強制激活并做了REBUILD,數據出錯。
服務器數據恢復過程:
1、在一臺WINDOWS Server服務器上用一張陣列卡接2組磁盤陣列。A組陣列連接12塊源盤,B組陣列連接12塊目標盤。
2、保持A組所有磁盤在WINDOWS Server中脫機并激活所有B組硬盤。用工具把A組12塊硬盤一對一鏡像到B組12塊硬盤。
3、鏡像完成后,關機并將A組源盤全部取出,后續的數據恢復操作全部在鏡像盤上進行,避免對原始數據造成二次傷害。
4、分析12塊鏡像盤結構,發現每塊硬盤前部都有明顯的RAID信息的痕跡,查找并確定RAID中LUN的起始分配位置。
5、推斷RAID6算法,經過檢測分析發現故障RAID6是基于標準P與另一個未知算法法則Q的右異步。基于現有資料分析,基于PQ均等螺旋分布的RAID6只有里德-所羅門(Reed-solomon)算法 ,懷疑本案例中的RAID6為Reed-solomon算法 的變種,但由于在同一條帶全0位置發現非全0的情況,故此算法推斷不成立。北亞數據恢復工程師結合對控制器的測試,發現故障RAID6的Q校驗基于一種隨機的xor(如同Park編碼),算法完全隨機,但校驗分布和Park完全不同,所以即使思路相似,但算法不一樣。
6、因為需要找到所有12塊盤缺2塊盤時的完整算法,共有C(12,2)=66種缺盤情況,每一種至少需要16種運算規則,經程序運行后發現為了得到一個單元大約要運算30-50次xor。用程序生成的運算公式并引入可以簡化算法的中間變量層,優化算法模塊。
7、針對一個明顯不同步的數據塊區,北亞數據恢復工程師專門編寫了一段程序。計算所有C(12,2)并比較計算后的結果與預想結果,最后確定掉線盤0號盤與3號盤。
8、二進制優化算法,所有運算放棄STL,改用數組,并使用bitmap的理念表示表達式中的所有成員,實現算法的最大性能優化。按照算法和分析出來的結構對數據進行初步分析,沒有發現明顯的數據異常。
9、生成數據到另一個準備好的目標存儲。到此步,數據恢復工作已經完成。
數據恢復總結:
本案例數據恢復工作斷斷續續一共耗費了2個月的時間。在整個數據恢復的過程中我們編寫了近萬行代碼進行判斷、分析、優化、測試、恢復。
數據恢復完成后,用戶抽查驗證的數據全部正常,但不排除有部分數據有少許的損壞。
審核編輯:湯梓紅
-
服務器
+關注
關注
12文章
9272瀏覽量
85813 -
數據恢復
+關注
關注
10文章
585瀏覽量
17565
發布評論請先 登錄
相關推薦
評論