Linux 的 EXT2 檔案系統

Ext2 檔案系統的結構如圖 2 所示,一個 Ext2 檔案系統可被分為數個區塊群 (Block Group),每個區塊群都由超級區塊 (superblock) 所引導,超級區塊會透過索引結構 (inode) 連結到資料區塊,Ext2 檔案系統的任務就是有效的組織 inode,讓尋找與更新的動作得以快速的進行。

LinuxExt2.jpg

圖 2. Ext2 檔案系統的儲存結構

索引節點inode 是從 UNIX 早期就使用的檔案系統組織結構,Ext2 也使用inode組織區塊,以形成樹狀的區塊結構。inode 是一種相當奇特的樹狀結構,除了記錄目錄的相關資訊之外,其直接連結會連接到目標的資料區塊,而間接連結則可連結到其他的 inode,包含雙層與三層的連結區域,因此可以很快速的擴展開來。有利於減少磁碟的讀取次數。圖 3 顯示了 inode 的索引方式,而圖 4 則顯示了 inode 索引節點的內部結構。

LinuxInodeIndex.jpg

圖 3 使用inode對裝置中的區塊進行索引

LinuxInode.jpg

圖 4 索引節點inode的內部結構

Ext2 利用 inode 建構出磁碟的目錄結構與索引系統,於是可以從超級區塊連接到裝置的資料區塊。在 Linux 原始碼中,Ext2檔案系統的函數都撰寫成 ext2_xxx() 的格式,因此很容易辨認。Ext2的資料結構定義在 include/linux/ext2_fs.h 標頭檔中,而其函數則定義在include/linux/ext2.h 可以在 Linux 原始碼中的 fs/ext2/ 資料夾中找到。

Ext2 的主要物件有區塊群 (block group), 超級區塊 (super_block), 索引結構 (inode) 與目錄項 (dir_entry) 等。您可以在 Linux 的原始碼中找到這些資料結構的定義,表格 4 顯示了這些物件與其在 Linux 原始碼中的位置,有興趣的讀者可以自行參考。

表格 4 Ext2 檔案系統中的重要物件

物件 資料結構 宣告檔案 (Linux 2.6.29.4原始碼)
區塊群 struct ext2_group_desc {…} /include/linux/ext2_fs.h
超級區塊 struct ext2_super_block {…}
struct ext2_sb_info {…}
/include/linux/ext2_fs.h
/include/linux/ext2_fs_sb.h
索引結構 struct ext2_inode {…}
struct ext2_inode_info {…}
/include/linux/ext2_fs.h
/fs/ext2/ext2.h
目錄項 struct ext2_dir_entry {…}
struct ext2_dir_entry2 {…}
/include/linux/ext2_fs.h
/include/linux/ext2_fs.h
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License