【服務器數(shù)據(jù)恢復】ZFS文件系統(tǒng)數(shù)據(jù)恢復案例

服務器數(shù)據(jù)恢復環(huán)境:
ORACLE Sun ZFS Storage;
32塊磁盤分為4組,每組8塊硬盤,熱備盤全部啟用。
ZFS文件系統(tǒng),Windows操作系統(tǒng)。
服務器故障&分析:
設備在正常工作時候突然崩潰,經(jīng)過檢查排除了斷電、進水、異常操作、供電不穩(wěn)定等因素。用戶重啟設備無法進入系統(tǒng)。
ZFS文件系統(tǒng)中,池被稱為ZPOOL。ZPOOL的子設備有很多種,其中包括塊設備、文件、磁盤等,在本案例中ZPOOL的子設備是三組RAIDZ。
經(jīng)過北亞企安工程師的分析發(fā)現(xiàn),三組RAIDZ中的兩組分別啟用了1個熱備盤和3個熱備盤。在熱備盤啟用后,第一組RAIDZ內(nèi)又出現(xiàn)一塊離線盤,第二組RAIDZ內(nèi)則又出現(xiàn)兩塊離線盤。故障場景還原:三組RAIDZ內(nèi)第一組和二組出現(xiàn)離線盤,熱備盤及時啟動替換離線盤;熱備盤無冗余狀態(tài)下第一組RAIDZ又出現(xiàn)一塊離線盤,第二組RAIDZ則又出現(xiàn)兩塊離線盤,ZPOOL進入了高負荷狀態(tài)(每次讀取數(shù)據(jù)都需要進行校驗才能得到正確數(shù)據(jù));第二組RAIDZ內(nèi)出現(xiàn)第三塊離線盤,RAIDZ崩潰、ZPOOL下線、設備崩潰。
服務器數(shù)據(jù)恢復過程:
1、重組ZPOOL,追蹤數(shù)據(jù)入口
ZFS文件系統(tǒng)管理的存儲池與常規(guī)存儲不同,是由ZFS管理所有磁盤。常規(guī)RAID在存儲數(shù)據(jù)時按照特定的規(guī)則組建池,不關心文件在子設備上的位置。而ZFS文件系統(tǒng)在存儲數(shù)據(jù)時會為每次寫入的數(shù)據(jù)分配適當大小的空間,并通過計算獲取到指向子設備的數(shù)據(jù)指針。這種特性導致RAIDZ缺盤時無法直接通過校驗得到數(shù)據(jù),必須將整個ZPOOL作為一個整體進行解析。
2、手工截取事務塊數(shù)據(jù),北亞企安數(shù)據(jù)恢復工程師編寫程序獲取最大事務號入口。
獲取文件系統(tǒng)入口:

3、獲取到ZFS文件系統(tǒng)入口后,北亞企安數(shù)據(jù)恢復工程師編寫數(shù)據(jù)指針解析程序解析地址。
解析數(shù)據(jù)指針:

4、獲取到ZFS文件系統(tǒng)入口點在各磁盤的分布情況后,北亞企安數(shù)據(jù)恢復工程師手工截取并分析文件系統(tǒng)內(nèi)部結(jié)構(gòu),入口分布所在的磁盤組無缺失盤,可直接提取信息。根據(jù)ZFS文件系統(tǒng)的存儲結(jié)構(gòu)找出映射的LUN名稱,進而找到其節(jié)點。
5、提取數(shù)據(jù)。北亞企安數(shù)據(jù)恢復工程師編寫數(shù)據(jù)提取程序提取數(shù)據(jù)。

由于磁盤組內(nèi)缺盤個數(shù)較多,每個IO流都需要通過校驗得到,提取進度極為緩慢。與用戶溝通后得知,ZVOL卷映射到XenServer作為存儲設備,用戶所需的文件在一個vhd內(nèi)。提取ZVOL卷頭部信息,按照XenStore卷存儲結(jié)構(gòu)進行分析后發(fā)現(xiàn)這個vhd在ZVOL卷的尾部,通過計算得知該vhd的起始位置,從此位置開始提取數(shù)據(jù)。
6、完成數(shù)據(jù)提取后,驗證Vhd內(nèi)部的壓縮包及圖片、視頻等文件,發(fā)現(xiàn)均可正常打開。讓用戶親自對數(shù)據(jù)進行驗證,確定文件數(shù)量與系統(tǒng)自動記錄的文件數(shù)量一致,全部文件可正常打開,服務器數(shù)據(jù)恢復完成。