整個文件系統是否有一個 inode 表,或者每個塊組有一個?
下圖顯示了“柱面組”(我相信現在通常稱為塊組)的佈局,並且似乎描繪了每個塊組都有自己的 inode 表:
但是,The Linux Programming Interface一書有關於 inode 表的聲明:
文件系統的 i-node 表為駐留在文件系統中的每個文件包含一個 i-node(索引節點的縮寫)。
這意味著整個文件系統有一個 inode 表,而不是每個塊組一個。
有沒有:
- 整個文件系統的一個 inode 表
- 每個塊組一個 inode 表,僅跟踪該組中的 inode
- 備份到組中的整個文件系統的一個 inode 表(類似於跨組備份超級塊的方式)
- 別的東西??
請注意,我可能在 ext2/3 和 ext4 之間混合了一些東西,從我在網上讀到的內容並不總是很清楚。
謝謝。
規範的 ext4 文件現在是核心文件的一部分。提到這一點,您的問題的答案是選項2,
每個塊組一個 inode 表,僅跟踪該組中的 inode
inode 表本身在 inode 描述中進行了描述:
inode 表是一個線性數組
struct ext4_inode
。該表的大小被調整為有足夠的塊來儲存至少sb.s_inode_size * sb.s_inodes_per_group
字節。包含一個 inode 的塊組的數量可以計算為(inode_number - 1) / sb.s_inodes_per_group
,到組表中的偏移量是(inode_number - 1) % sb.s_inodes_per_group
。沒有 inode 0。這證實了每個 inode 表都描述了相應組中的 inode。
塊組的整體佈局在佈局部分給出。它與您的圖表相匹配,但正如您所懷疑的那樣,確實可以有多個塊組,每個塊組都有自己的資料結構,用於描述其內容(而不是整個文件系統的內容)。
ext4 中還有一個額外的怪癖:靈活的塊組。啟用此功能後,可以將多個塊組合併為一個,並將它們的所有 inode 表儲存在第一個塊組中。這意味著塊組指向其 inode 表(和其他資料結構)的指針可以指向塊組之外!