淺談Linux Ext文件系統

首先請讀者思考一個問題:Linux系統下面這麼多的文件是如何來管理的?新建一個文件都是經歷了什麼樣的過程?

1.Ext文件系統的特點

1).文件系統的特點

權限與屬性放置到inode中,至於實際數據則放置到data block塊中。還有一個超級塊super block會記錄整個文件系統的整體信息,包括inode與block的總量、使用量、剩餘量等;

  • super block:記錄此文件系統的整體信息,包括inode/block的總量、使用量、剩餘量以及文件系統的格式與相關信息等;
  • inode:記錄文件的屬性,一個文件佔用一個inode,同時記錄此文件的數據所在的block號碼;
  • block:實際記錄文件的內容,若文件太大時,會佔用多個block;

2).Ext2文件系統

inode與block的大小是在一開始就規劃好的,除非重新格式,否則inode與block固定後就不再變動;
對於文件系統動則上百G,那麼將所有的inode與block放置在一起不容易管理,因此Ext2文件系統在格式化的時候基本上是區分爲多個塊組(block group)的,每個塊組都有獨立的inode/block/super block系統;
淺談Linux Ext文件系統

2.Ext的組成

1).data block(數據塊)

data bloc是用來放置文件內容的地方,在Ext2文件系統中所支持的block大小有1KB、2KB及4KB三種。在格式化時block的大小就固定了,且每個block都有編號,以方便inode記錄;
Ext2文件系統的block有以下限制:

  • 原則上,block的大小與數量在格式化完就不能夠再改變了;
  • 每個block內最多隻能夠放置一個文件的數據;
  • 如果文件大於block的大小,則一個文件會佔用多個block數量;
  • 若文件小於block,則該block的剩餘空間就不能夠再被使用了;

2).inode table(inode表格)

inode的內容主要記錄文件的屬性以及該文件實際數據是放置在哪幾號block;

  • 每個inode大小均固定爲128bytes;
  • 每個文件都僅會佔用一個inode而已;
  • 系統讀取文件時需要先找到inode,並分析inode所記錄的權限與用戶是否符合,若符合才能夠開始實際讀取block的內容;

inode要記錄的數據非常多,但inode的大小僅僅只有128bytes,而inode記錄一個block號碼要花掉4bytes,假設一個文件有400M且每個block爲4KB,那麼至少也在10萬條block號碼的記錄,inode哪能記錄這麼多信息呢,inode空間也不夠啊;
inode記錄block號碼的區域定義爲12個直接、一個間接、一個雙間接與一個三間接記錄;所謂間接就是拿一個block來當作記錄block號碼的記錄區;

淺談Linux Ext文件系統

假設每個block的大小爲1KB;
12個直接:12 x 1=12K;
一個間接:256 x 1K=256K; 256=1KB(一個block) / 4byte(記錄一個block索引需要花費的大小)
一個雙間接:256 x 256 x 1KB=256^2K
一個三間接:256 x 256 x 256 x 1KB=256^3K
總共加起來爲:16GB;所以當文件系統block格式化爲1K大小時,能夠容納的最大文件爲16GB;

3).superblock(超級塊)

superblock是記錄整個文件系統相關信息的地方,沒有superblock,就沒有這個文件系統了。它主要記錄的信息有:

  • block與inode的總量;
  • 未使用與已使用的inode/block數量;
  • block與inode的大小(block爲1K,2K,4K,inode爲128bytes);
  • superblock的大小爲1024bytes;

4).File system Description(文件系統描述說明)

這個區段可以描述每個block group的開始與結束的block號碼,以及說明每個區段分別介於哪一個block號碼之間。

5). block bitmap(塊對照表)

添加文件時怎麼知道哪個block是空的,需要通過block bitmap來輔助,從block bitmap當中可以知道哪個block是空的;

6).inode bitmap(inode對照表)

這個其它與block bitmap是類似的功能,只是block bitmap記錄的是使用與未使用的block號碼,至於inode bitmap則是記錄使用與未使用的inode 號碼;

3.Ext2/Ext2日誌文件系統的功能

1).創建文件的流程

Ext2是如何處理創建文件的呢?
1.先確定用戶對於添加文件的目錄是否具有w與x的權限,若有的話才能添加;
2.根據inode bitmap找到沒有使用的inode號碼,並將新文件的權限/屬性寫入;
3.根據block bitmap找到沒有使用中的block號碼,並將實際的數據寫入block中,且更新inode的block指向數據;
4.將剛纔寫入的inode與block數據同步更新inode bitmap與block bitmap,並更新superblock的內容;

2).數據的不一致狀態

如果上述的創建文件在第4步時,因停電、內核錯誤等原因導致寫入inode bitmap與block bitmap沒有執行,就導致bitmap與實際數據存放區產生不一致的情況了;

3).日誌文件系統

爲解決上述問題,在文件系統當中規劃出一個塊,該塊專門記錄寫入或修訂文件時的步驟;

  • 預備:當系統要寫入一個文件時,會先在日誌記錄塊中記錄某個文件準備要寫入的信息;
  • 實際寫入:開始寫入文件的權限與數據;開始更新bitmap及super block數據;
  • 結束:完成數據與新bitmap及super bloc的更新後,在日誌記錄塊當中完成該文件的記錄;

參考資料:鳥哥的Linux私房菜

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章