1. 程式人生 > >Linux磁碟管理——日誌檔案系統與資料一致性 Linux磁碟管理——Ext2檔案系統

Linux磁碟管理——日誌檔案系統與資料一致性 Linux磁碟管理——Ext2檔案系統

參考:Linux磁碟管理——Ext2檔案系統

資料不一致

上圖是Ext2結構圖,其他FS結構類似。

一般來說,我們將 inode table 與 data block 稱為資料區;至於其他例如 superblock、 block bitmap 與 inode bitmap 等稱為 metadata (元資料)。

以新增一個檔案為例,看看FS操作流程

1. 先確定使用者對於欲新增檔案的目錄是否具有 w 與 x 的許可權,若有的話才能新增;
2. 根據 inode bitmap 找到沒有使用的 inode 號碼,並將新檔案的許可權/屬性寫入;
3. 根據 block bitmap 找到沒有使用中的 block 號碼,並將實際的資料寫入 block 中,且更新 inode 的 block 指向資料;
4. 將剛剛寫入的 inode 與 block 資料同步更新 inode bitmap 與 block bitmap,並更新 superblock 的內容。

一般正常的情況下,上述的新增動作可以順利完成。但是如果再檔案寫入FS時,某種原因導致系統中斷(突然停電 或者 kernel發生錯誤),

此時寫入的資料僅有 inode table 及 data block,元資料metadata還沒有來得及更新,就會發生metadata與資料區資料不一致情況。

日誌檔案系統

  在早期的 Ext2 檔案系統中,如果發生這個問題, 那麼系統在重新開機的時候,就會藉由Superblock 當中記錄的 valid bit (是否有掛載) 與 filesystem state (clean 與否) 等狀態來判斷是否強制進行資料一致性的檢查!若有需要檢查時則以

e2fsck 這支程式來進行的。

  整個檢查過程十分耗時,因為要搜尋整個FS,針對 metadata 區域與實際資料存放區來進行比對。如果你的檔案系統有 100GB 以上,而且裡面的檔案數量又多時, 那等待時間將會更長。這就催生了日誌檔案系統的產生。

參考:Linux File System Types

 使用日誌FS,日誌中會記錄將某個檔案寫入磁碟這一作業,檔案順利寫入後,再將日誌中的作業刪除。 如果在檔案寫入過程中突然斷電,Linux會在啟動時檢查檔案系統的日誌並撤銷回退任何沒有完成的作業。 雖然在資料不一致時都進行了資料檢查,但是Ext2是對整個FS進行檢查,在伺服器環境是這可能會花費數小時時間,而Ext3僅對出問題的檔案進行一致性檢查,數度上會快很多。