linux檔案系統損壞?你只需學會這個方法就能完美修復

北亞資料恢復發表於2020-02-05

    今天為大家介紹一個Linux伺服器資料恢復成功案例,本次伺服器資料恢復物理伺服器請款如下:客戶故障伺服器為一臺X3850伺服器,這個伺服器是由4塊146G SAS硬碟組成的RAID5作為儲存介質,檔案系統全都是reiserfs。我們首先經過分析發現了之前的硬碟資料組織結構是由一個不到100M的boot分割槽,後接一個271G的LVM卷,之後是2G的swap分割槽。LVM卷中直接劃分了一個reiserfs檔案系統,作為根分割槽。

  伺服器在正常使用過程中,由於未知原因導致系統癱瘓,急需進行伺服器資料恢復,經過系統的重灌以後發現整個RAID邏輯卷變成了前面2G的boot與swap分割槽,後接271G的LVM卷,LVM卷中檔案系統位置有個空的reiserfs超級塊。
  我們這次要恢復的資料就是原來271G中檔案系統裡的所有使用者資料,這些資料包含了資料庫、網站程式與網頁、單位OA系統裡的所有辦公文件。
 
  伺服器資料恢復工程師先透過對全盤reiserfs樹節點之間的關聯確定了原來的reiserfs分割槽位置,發現原來儲存資料的檔案系統的前2G資料已經被覆蓋,應該是使用者在安裝系統時錯誤地初始化了分割槽結構,所以裝好系統無法匯入LVM卷而做過reiserfsck試圖修復。
  因reiserfs檔案系統對檔案系統裡所有的檔案(含目錄)線性化後,再以檔案key生成B+樹,樹不斷增加節點會導致樹的結構整體拉展後向整個磁碟的資料區做平滑遷移。這樣一來頂級節點通常不會放在檔案系統的最前面。

  因根目錄的檔案KEY號通常是最小的,所以,從空間上看,前2G中儲存最多的應該是從根起始路徑最近的key節點,這樣,使用者資料因目錄層次較深,節點存在的可能性很高。前2G覆蓋的資料已經無法恢復,只能希望不要恰好覆蓋使用者資料。因檔案系統前面對整個樹的索引全丟失,加上reiserfs的樹概念設計得很抽象,重搭建樹會很困難。

  資料恢復工程師透過自主程式在整個原檔案系統區域進行key節點掃描並將所有節點匯出。然後透過自主程式對所有葉節點重新排序、過濾(去掉之前刪除檔案丟棄的節點),重新生成二級、三級、四級等葉節點。選擇分割槽前面2G空間做為新樹的結構區(反正這部分資料是沒用的了,重灌系統已經裝得滿滿的),並生成對應地址資訊。
  應對目錄命名問題,如遇到原樹路徑某節點丟失的情況,對其用自定義的key節點編號命名,如無法確定其父目錄,暫加入/otherfiles下。根據上面對,生成樹索引資訊,寫入特定位置,再根據這些資訊,生成超級塊,設定clear標誌。在suse虛擬機器下,建立快照,掛載修復好的卷,已經可以看到檔案了。(注:虛擬機器與快照的目的為了操作可加溯,同時因bitmap等後設資料不影響資料,未做修正,故掛載前不可做reiserfsck)。

  在修復用的suse虛擬機器下,掛載用於copy資料的目標硬碟,mkfs後將所有資料cp到目標盤。使用者透過find命令整理所需資料,修正部分目錄檔案位置與名稱。部分丟失的散檔案,按大小與檔案頭標誌查詢,找到後移動及重新命名。
 
  樹的不直觀性加上程式的除錯,使得整個恢復工作異常繁雜,幸運的是所有的重要資料100%都被我們找到了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31380569/viewspace-2674555/,如需轉載,請註明出處,否則將追究法律責任。

相關文章