不一樣的文件系統存儲文件的方式是不一樣的,因此其結構也是不一樣的。本文要介紹的是Linux最傳統的文件系統EXT2的結構。node
EXT2文件系統的主要組成結構有:inode table(inode表格)、data block(信息區塊)、superblock(超級區塊)、filesystem description(文件系統描述說明)、inode bitmap(inode對照表)、block bitmap(區塊對照表)等。spa
在EXT2文件系統中,文件的權限、屬性與文件的內容是分開存儲的,文件的權限和屬性都存儲在inode中,而文件內容則存儲在block中。inode和block的大小和數量都是在格式化(即文件系統建立)的時候就已經固定了的。每一個inode的大小均爲128bytes(ext4與xfs能夠設置256bytes),每一個文件僅佔用一個inode,因此文件系統中可以創建的文件數量與inode的數量有關。block有1k,2k和4k三種大小,因此當文件內容的大小超出block的大小時就須要多個block來存儲了。日誌
每一個inode和block都是有編號的。inode中不只存儲了文件的權限和屬性,也存儲了文件內容存放的全部block的編號,這樣只要找到文件的inode就能根據inode中記錄的block的編號一次性把全部存放該文件內容的block的數據所有讀取出來了。這裏借鳥哥的圖加以說明:blog
問題來了,記錄一個block編號須要4bytes的空間,若是一個文件比較大的話,須要的block的數量是比較多的,可是inode只有128bytes啊,怎麼記錄得了那麼多的block編號呢?其實並非全部的block編號都直接記錄在inode中的,當文件佔用的block數量比較多的時候,系統會拿出一些block專門來記錄文件內容block的編號,而後inode只要記錄這些block的編號就能夠讀取到文件內容block的編號了。EXT2把inode中記錄blok編號的區域定義爲12個直接,一個間接,一個雙間接,和一個三間接記錄區,這裏仍是借用鳥哥的圖加以說明:ip
這樣子仍是能夠根據inode找到存儲文件內容的全部block啊!文檔
不過儘管如此,因爲inode中存放block編號的區域大小是固定的,inode可以存儲的block編號的數量就是固定的,而block的大小也是固定的,因此也就是說在一個已知block大小的文件系統中,文件的最大大小是固定的!it
既然block的大小有1K,2K和4K三種類型,那咱們是應該選擇大一點的仍是小一點的好呢?因爲一個block只能存儲一個文檔的內容,一個文件無論多小,它至少都會佔用一個block的空間,因此若是block的空間很大,可是系統中有不少很小的文件,那會就浪費不少的空間了。若是把block定得很小,可是系統中有不少大文件的話,那麼一個文件就須要存放到不少個block中,讀取文件內容的時候須要到多個block中讀取,並且inode須要記錄的block的編號不少,系統還須要拿出更多的block來記錄文件內容block的編號,這在時間和空間上都是比較浪費的。因此,block的大小定多少合適,仍是須要根據文件系統預計使用狀況來決定的。io
接下來簡單介紹一下EXT文件系統結構中其餘組成部分:table
(1)Superblock:大小爲1024bytes,是記錄整個文件系統相關信息的地方,主要有:block與inode的大小和數量、未使用與已使用的inode/block的數量,以及文件系統的是否已被掛載、掛載的時間等等。配置
(2)Filesystem description:描述每一個block group(下文介紹)的開始與結束的block編號,以及說明每一個區段(inode table,data block等)分別介於哪一個block號碼之間。
(3)Inode bitmap:記錄哪些inode是未使用的,哪些是已被使用的。
(4)Block bitmap:記錄哪些block是未使用的,哪些是已被使用的。
此外,在EXT3和EXT4中,還會規劃出一個區塊用於記錄文件修改的日誌記錄,以便在文件系統發生問題的時候能很快查到問題所在。
若是文件系統很大的話,inode和block的數量就會很大,不容易管理,因此EXT在格式化的時候基本上是區分爲多個區塊羣組的,每一個區塊羣組都有以上介紹的全部組成部分(能夠從指令dumpe2fs的打印結果中查看),看起來就像下圖(圖借自鳥哥):
這樣瞭解了EXT2文件系統的結構以後,文件的建立、查詢、修改、刪除具體經歷了哪些過程,包含了哪些細節,咱們就能夠清楚地知道了!
文件系統格式化的時候,EXT文件系統家族在格式化處理的過程當中就把全部/inode/block/meta data等結構都預先規劃並分配好,之後系統就能夠直接取用,不須要再進行動態配置了。這種方法有個問題,就是當格式化的文件系統很大的時候,格式化須要花費很長的時間。而新的日誌式文件系統XFS就彌補了這個不足,它的inode和block都是等系統須要使用的時候才進行動態分配的,因此格式化過程超快,適合用於大文件系統。