Linux文件系統結構
不同的文件系統存儲文件的方式是不同的,所以其結構也是不同的。本文要介紹的是Linux最傳統的文件系統EXT2的結構。
EXT2文件系統的主要組成結構有:inode table(inode表格)、data block(信息區塊)、superblock(超級區塊)、filesystem description(文件系統描述說明)、inode bitmap(inode對照表)、block bitmap(區塊對照表)等。
在EXT2文件系統中,文件的權限、屬性與文件的內容是分開存儲的,文件的權限和屬性都存儲在inode中,而文件內容則存儲在block中。inode和block的大小和數量都是在格式化(即文件系統創建)的時候就已經固定了的。每個
每個inode和block都是有編號的。inode中不僅存儲了文件的權限和屬性,也存儲了文件內容存放的所有block的編號,這樣只要找到文件的inode就能根據inode中記錄的block的編號一次性把所有存放該文件內容的block的數據全部讀取出來了。這裏借鳥哥的圖加以說明:
問題來了,記錄一個block編號需要
這樣子還是可以根據inode找到存儲文件內容的所有block啊!
不過盡管如此,由於
既然block的大小有1K,2K和4K三種類型,那我們是應該選擇大一點的還是小一點的好呢?由於一個block只能存儲一個文檔的內容,一個文件不管多小,它至少都會占用一個block的空間,所以如果block的空間很大,但是系統中有很多很小的文件,那會就浪費很多的空間了。如果把block定得很小,但是系統中有很多大文件的話,那麽一個文件就需要存放到很多個block中,讀取文件內容的時候需要到多個block中讀取,而且inode需要記錄的block的編號很多,系統還需要拿出更多的block來記錄文件內容block的編號,這在時間和空間上都是比較浪費的。所以,block的大小定多少合適,還是需要根據文件系統預計使用情況來決定的。
接下來簡單介紹一下EXT文件系統結構中其他組成部分:
(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都是等系統需要使用的時候才進行動態分配的,所以格式化過程超快,適合用於大文件系統。
Linux文件系統結構