做者:
張宇,北亞
硬盤數據恢復中心,轉載請聯繫做者,若是實在不想聯繫做者,至少請保留版權,謝謝。
不論是哪一種文件系統,其根本目的都是相同的:如何把文件存在系統給定的區域裏,如何有效地管理文件的讀與寫。爲實現這樣的目的,驅動層須要完善、周密地應付附加在文件系統上的各類操做。這些操做一般不會是一條指令完成的,若是一個過程須要多條指令完成,在執行這些操做時,所有指令未完成的狀況下產生中斷,那這個文件系統便會出現一致性錯誤(或者叫連續性錯誤)。
爲了保證盡能夠少的出現一致性錯誤,如今主流的文件系統都會設計成日誌型的。日誌型文件系統的主要特色就是把一個操做的全部指令執行過程都另外緩衝下來,若是所有執行完成再清除日誌標誌,若是操做沒有執行完成,能夠在從新激活後經過日誌回溯或繼續完成。
EXT3的日誌功能經過在EXT2的設計基礎上增長一個特殊的文件(一般是8號節點文件),在這個文件中記錄文件系統的操做過程。但EXT系統文件系統自己在節點、間接索引塊、目錄節點方面沒有冗餘保護,因此當文件系統除日誌外的其餘結構並不一致,卻又要經過fsck來進行修復,這種一致性有可能將本來正確的結構也錯誤化。(就像原來是1+2=3,如今錯成了1+3=3,也許改完後變成了1+3=4,就徹底沒辦法還原成最先的1+2=3)。
數據恢復領域常常會遇到這類狀況:一次RAID出故障後,下次啓動系統提示作fsck,但作完後,也沒法mount分區或者mount 分區後數據全是錯的。須要對這類狀況進行數據修復的難度是很大的,從一個完整的結構(fsck後實際上從系統角度看已是完整的了)再構建另外一個徹底不一樣的結構要比修正一個錯誤的結構更難如下手。其實這類狀況,不少是由於RAID5有早離線的盤加入了兩個邏輯磁盤組,致使全部的數據流是以新+舊的方式交錯組成的,天然會有太多錯誤。這時候若是作fsck後,有可能數據都沒法恢復了。
因此,在EXT3(實際上其餘文件系統也相似)沒法mount,或者提示fsck時,若是有重要數據,應該慎重對待,千萬不可貿然執行"fsck -f -y "這樣的自動修復功能。若是可能,先對故障區域作dd全鏡像後再執行,或者以只讀方式執行,並仔細看修復過程,若是提示大量inode錯誤、須要重建樹、或大小不對等就不可再繼續下去了。