1.故障發生背景
ext4檔案系統沒有umount下來,之後做了fsck操作檢查一致性,結果導致ext4檔案mount不上(有時也會表現為導致目錄變成了檔案)。
報錯提示資訊:mount: wrong fs type, bad option, bad superblock
2.故障原理分析
某故障時,日誌和資料不一致造成的正常檔案系統資料被覆蓋的現象。這種故障在ext3、ext4檔案系統常有發生,好在.journal日誌檔案留有緩衝,恢復時可以從.journal日誌檔案裡找到相應資訊,並貼上回相應位置,達到重建原檔案的目的。
3.案例重要資訊
linux系統的硬碟的第乙個扇區是mbr扇區,從mbr分割槽表能看出來,本案例一共有兩個分割槽。第乙個分割槽是交換分割槽,共7.8g,第二個分割槽是ext4檔案系統,共292g。總的大小為300g。
ext3、ext4檔案系統有日誌功能,本案例考慮從.journal日誌檔案中找到丟失資料。
1.塊大小為固定的4kb,即8個扇區。
2.超級塊(superblock)起始位置在1024位元組處,即2號扇區,大小為2個扇區。
3.塊組描述表從第乙個塊開始,即從4096位元組處開始。
4.案例重要概念
超級塊(superblock):用於儲存檔案系統的配置引數(如塊大小、總塊數、i-節點數)和動態資訊(當前空閒塊數和i-節點數)。ext4檔案系統的超級塊(superblock)開始於1024位元組處,即2號扇區。
塊組:ext4檔案系統的全部空間被劃分為若干個塊組,每個塊組內的結構都是大致相同的。
塊組描述符表:每個塊組都對應乙個塊組描述符,這些塊組描述符統一放在檔案系統的前部,稱為塊組描述符表。每個塊組描述符大小為32位元組,其主要描述塊點陣圖、i-節點點陣圖及i-節點表的位址等資訊。
i節點:描述檔案的時間資訊、大小、塊指標等資訊。
塊組描述符和超級塊在塊中的位置:當塊大小為2個扇區時,0號塊是引導程式或者保留塊,超級塊起始於1號塊。當塊大小為4個扇區時,引導程式或者保留塊位於0號塊的前兩個扇區,超級塊位於0號塊的後兩個扇區。當塊大小為8個扇區時,引導程式或者保留塊位於0號塊的0-1號扇區,超級塊位於0號塊的2-3號扇區。
ext4檔案系統的整體結構及第乙個塊組的具體結構如圖1所示。
5.解決步驟
步驟總結:
1.通過.journal日誌檔案裡的超級塊備份找到超級塊,確定塊大小。
2.通過.journal日誌檔案裡的超級塊備份找到超級塊,重建超級塊資訊。
3.通過.journal日誌檔案找到目錄節點,重建(恢復)目錄。
4.通過.journal日誌檔案找到目錄節點找到要恢復的檔案的節點資訊,重建(恢復)檔案。
首先用winhex開啟ext4檔案系統,可以看到0-23扇區的資料(包括超級塊和塊組描述符)被日誌記錄覆蓋。ext3、ext4檔案系統的日誌頁以c0 3b 39 98開頭。如圖2所示。
圖21.確定塊大小
超級塊中有關於塊大小的資訊。從.journal日誌中查詢超級塊的備份。用winhex查詢得到.journal日誌中超級塊的資訊,其標誌是「53ef」。查詢超級塊方式如圖3所示。檢視塊大小方法如圖4和圖5所示。超級塊0x18-0x1b處描述塊大小,確定本案例塊大小為4kb。
圖3通過超級塊檢視塊大小如圖4所示。
圖4或者winhex模板編輯器也可以顯示塊大小如圖5所示。
圖52.重建(恢復)超級塊
由於原檔案系統超級塊損壞,所以恢復檔案時,要把這部分超級塊資訊貼上回去,即放在2號扇區開始,或1024位元組處。
做完以上操作,超級塊備份某些地方與實際的超級塊數值可能不一致,需要通過winhex的模板管理器修改一下。本案例對超級塊所在的塊組作了修改,它在第0個塊組裡。如圖6所示。
圖63.重建(恢復)塊組描述表
由於部分塊組描述表被破壞,所以在.journal日誌檔案裡找到所有的塊組描述表,並把它們貼上回去。
.journal日誌檔案裡,如圖1所示,塊組描述符表儲存在超級塊的後面。所以要找塊組描述表時,可以先找到超級塊。找到後將塊組描述符表內容貼上到4096位元組處。
4.重建(恢復)目錄
當我們要恢復某個資料夾裡的檔案時,比如我們需要恢復kyproc資料夾裡的資料。我們發現這些資料夾在winhex裡是不能開啟的狀態。如圖7所示。很明顯這個目錄損壞了,開啟其節點資訊,發現正常資料被日誌填充,如圖8所示。
圖7
圖8我們找到它的上一級目錄,即var資料夾。右擊點「open」,開啟看到var檔案裡的所有檔案的目錄資訊。找到要恢復的kyproc目錄的資訊,12 32 ee 00是其i-節點號,10 00表示其目錄項長度,06表示其檔名稱長度,02表示其檔案型別為目錄。如圖9所示。
圖9然後在var資料夾的目錄塊下查詢kyproc目錄的位置,如圖10所示,標紅的位置是找到的結果。此位置顯示所在塊號為62399108。
圖10根據所在塊號,就可以定位kyproc目錄相應節點的位置。由於人工補節點比較繁瑣,我們可以開啟.journal日誌檔案,從裡面找到其節點資訊,把相應的資訊貼上回去。
上述方法可以重建(恢復)目錄,恢復目錄裡的檔案也是通過同樣的方法從.journal日誌檔案裡找到相應的檔案的節點資訊,找到後貼上回原來的位置,達到重建(恢復)檔案的目的。
ext4檔案系統綜述
從本篇部落格起,我們開始研究現代檔案系統ext4,說其現代是因為其相比傳統檔案系統,有著更現代化的設計。這些先進的特性體現在本文所要敘述的以下方面。ext4是linux檔案系統的一次革命。在很多方面,ext4相對於ext3的進步要遠超過ext3相對於ext2的進步。ext3相對於 ext2的改進主要...
剖析ext4檔案系統
簡介 第 4 個擴充套件檔案系統,即 ext4 是下一代的日誌檔案系統,它與上一代檔案系統 ext3 是向後相容的。儘管 ext4 目前還不是標準檔案系統,但它將成為大部分下一代 linux 發行版的預設檔案系統。了解 ext4,以及它為什麼將成為您最喜歡的新檔案系統。linux 核心的每次發行都伴...
EXT4檔案組織 EXT4檔案系統詳解2
ext4 檔案系統是從 ext2 和 ext3 上發展而來的,這裡我們來分析它們是如何將乙個檔案的內容組織起來,從而在磁碟上 拼湊出乙個檔案 出於對ext4檔案系統相容性的考慮,我們嘗試在先從ext2檔案系統的檔案組織方式說起。ext2檔案節點定義 ext2 檔案節點變數有點多,我們需要關注i bl...