一個文件系統存儲的數據通常包括文件權限和屬性,以及文件數據,這兩部分分別存儲在不同的地方。
文件系統數據分為3部分 :
Superblock:記錄文件系統的整體信息,包括 inode/iblock 的總量,使用量,剩余量,以及文件系統的整體信息。 Inode:記錄文件的屬性,一個文件占用一個 inode,同時記錄此文件數據所在的 block 號碼 。
Iblock:實際記錄文件的內容,若文件過大時,會占用多個 block。文件系統由包含多個文件,每個文件都會占用1個 inode 和若干 iblock,inode 用來存儲文件權限和屬性,以及文件數據存放的 iblock 的編號,iblock 則存放文件的實際數據(每個 inode 和 iblock都含有一個編號)。
對於容量很大的文件系統,EXT2格式化時會分為多個 block group,每個組隊都有一個獨立的/inode/block/superblock
iblock (數據區塊) iblock 是用來放置文件內容數據地方,在 Ext2 文件系統中所支持的 block 大小有 1 K, 2 K 及 4 K 三種而已。 每個 block 內最多只能夠放置一個文件的數據; 如果文件大於 block 的大小,則一個文件會占用多個 block 數量; 若文件小於 block ,則該 block 的剩余容量就不能夠再被使用了(磁盤空間會浪費)。
Inode 主要包含信息 1、該文件的存取模式(read/write/excute);
2、該文件的擁有者與群組(owner/group);
3、該文件的容量;
4、該文件創建或狀態改變的時間(ctime);
5、最近一次的讀取時間(atime);
6、最近修改的時間(mtime);
7、定義文件特性的旗標(flag),如 SetUID…;
8、該文件真正內容的指向(pointer);
9、其他信息
每個 inode 大小均固定為 128 bytes; 每個文件都僅會占用一個 inode 而已;因此文件系統能夠創建的文件數量與 inode 的數量有關; 系統讀取文件時需要先找到 inode,並分析 inode 所記錄的權限與用戶是否符合,若符合才能夠開始實際讀取 block 的內容。
inode 要記錄的數據非常多,但偏偏又只有128 bytes 而已,為了記錄更多的數據,系統很將 inode 記錄 block 號碼的區域定義為12個直接,一個間接, 一個雙間接與一個三間接記錄區
假設 block 為1 K
12 個直接指向: 12*1 K=12 K 由於是直接指向,所以總共可記錄 12 筆記錄,因此總額大小為如上所示; 間接: 256*1 K=256 K 每筆 block 號碼的記錄會花去 4 bytes,因此 1 K 的大小能夠記錄 256 筆記錄,因此一個間接可以記錄的文件大小如上; 雙間接: 256*256*1 K 第一層 block 會指定 256 個第二層,每個第二層可以指定 256 個號碼,因此總額大小如上; 三間接: 256*256*256 K第一層 block 會指定 256 個第二層,每個第二層可以指定 256 個第三層,每個第三層可以指定 256 個號碼,因此總額大小如上; 總額:將直接、間接、雙間接、三間接加總,得到 12 + 256* 256+256 + 256*256*256 (K) = 16 GB
Superblock (超級區塊) Superblock 是記錄整個 filesystem 相關信息的地方, 沒有 Superblock,就沒有這個 filesystem 了。他記錄的信息主要有:
block 與 inode 的總量;
未使用與已使用的 inode / block 數量; block 與 inode 的大小 (block 為 1, 2, 4 K,inode 為 128 bytes); filesystem 的掛載時間、最近一次寫入數據的時間、最近一次檢驗磁盤 (fsck) 的時間等文件系統的相關信息; 一個 valid bit 數值,若此文件系統已被掛載,則 valid bit 為 0 ,若未被掛載,則 valid bit 為 1 。可以通過 dumpe2fs 命令查看文件系統的 superblock;
目錄與文件讀取
在文件系統下創建一個文件都會分配一個 inode 和若干 iblock,目錄和文件都是文件系統下的一個文件,
對於目錄來說
inode :記錄了目錄的權限, block:記錄了目錄的名稱,目錄下包含的文件名名與文件名所占用的 inode 號碼
對於文件來說
文件名:在包含其的目錄對應的 iblock 中記錄 inode :記錄了文件的權限, block:記錄文件實際數據