raid陣列3塊硬碟掉線儲存崩潰的解決方法
某公司使用了同友儲存,採用raid5磁碟陣列,由於未知的原因導致儲存忽然崩潰無法啟動,raid5陣列中的虛擬機器全部丟失,其中3臺虛擬機器為重要資料,需要主要針對該3臺虛擬機器進行資料恢復。
一、分析儲存底層次結構,制定資料恢復方案。
通過與客戶的溝通及對raid陣列的分析得出故障儲存的底層結構為若干物理磁碟組成一個儲存池,劃分了多個lun,需要進行資料恢復的為lun1,其中包含重點恢復的3臺虛擬機器。如下圖所示:
儲存結構
二、嘗試重組raid恢復raid陣列資料。
在對陣列進行分析重組時發現使用者原儲存中的raid5陣列共缺失2塊硬碟,熱備盤已經啟用。(還原故障過程為:第一塊硬碟掉線後系統啟動熱備盤進行替換,第二塊硬碟掉線時raid5處於降級狀態,第三塊硬碟掉線導致raid陣列崩潰。)這種情況下通常無法通過校驗直接獲取丟失盤的資料,所以只能使用磁碟同等大小的全0映象進行重組(由於依賴空映象組成的raid檔案系統結構會被嚴重破壞,相當於每個條帶都會缺失兩個塊的資料,所以除非常情況下不建議如此)。
重建raid
三、通過重組的raid陣列提取LUN。
通過對儲存結構的進一步分析我們可以獲取到儲存劃分的MAP塊,進而對各個LUN的資料塊指標進行解析,通過編寫資料提取程式(也可藉助北亞資料恢復工具)提取LUN碎片。提取完成後進行碎片拼接,組成完整LUN。
提取LUN
四、匯出LUN內所有虛擬機器,嘗試啟動。
因虛擬機器名稱涉及客戶隱私且匯出過程較為簡單,此處不再贅述。匯出虛擬機器後嘗試啟動,同預想相同,作業系統被破壞虛擬機器無法啟動。
五、提取虛擬機器內檔案。
由於虛擬機器無法啟動,只能對虛擬機器內的檔案進行提取,但多數檔案破壞嚴重,只有少數檔案可用,只好繼續制定其他資料恢復方案。
六、通過分析資料庫頁提取資料。
本次資料恢復的虛擬機器內有mysql資料庫,可以利用資料庫底層儲存的特殊性進行資料頁掃描,提取資料。(注,虛擬機器啟用快照,父盤和快照檔案都被損壞的情況下常規合併操作無法完成,使用本公司自主研發VMFS快照合併程式進行快照合併。)資料恢復過程截圖如下
七、獲取mysql資料頁並分析。
根據mysql資料頁特徵進行資料頁掃描並匯出(innodb引擎可以使用此方案,myisam因為沒有“資料頁”概念所以不可用),分析系統表獲取各使用者表資訊,根據各個表的id進行資料頁分割。因為表內容涉及使用者隱私,此處未配圖
八、提取表結構、提取記錄。
因為資料庫使用時間已久,表結構也曾多次變更,加上系統表在儲存損壞後也有部分資料丟失,記錄提取過程遇到很大阻力。首先獲取最初版本資料庫各個表的表結構:合併快照前的父盤因為寫入較早,使用第一塊掉線盤進行校驗獲取到這個檔案的完整資料,然後提取出其中資料庫各個表的表結構,之後客戶方提供了最新版的資料庫建表指令碼。
分別使用兩組不同表結構對資料記錄進行提取並匯入恢復環境中的mysql資料庫內,然後剔除各個表中因為表結構變更造成的亂碼資料,最後將兩組資料分別匯出為.sql檔案。
九、資料驗證,raid資料恢復成功。
因為兩個版本的資料庫表結構不同,所以聯絡了客戶方的應用工程師進行除錯。除錯完成後匯入平臺,平臺除錯成功,本次資料恢復成功。