Linux

整個文件系統是否有一個 inode 表,或者每個塊組有一個?

  • December 13, 2019

下圖顯示了“柱面組”(我相信現在通常稱為塊組)的佈局,並且似乎描繪了每個塊組都有自己的 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 表(和其他資料結構)的指針可以指向塊組之外!

引用自:https://unix.stackexchange.com/questions/556915