為什麼 inode 偏移值似乎超過了 inode 大小?
我正在研究 Ext4 文件系統,並且對 128 字節的 inode 大小感到困惑,因為它似乎與它儲存的最後一個元數據值衝突,該值應該在字節 156 處偏移。
在本文件中,它指出 inode 的長度為 128 字節。我在一個未掛載的 /dev/sdb1 上呼叫了 dumpe2fs。dumpe2fs 結果證實 inode 大小為 128。
但我很困惑,因為該文件描述了儲存在 inode 中的元數據。對於元數據的每個條目,都有一個相應的物理偏移量。最後一個條目是項目 ID。它的偏移量為 0x9c(整數為 156)。
元數據偏移量似乎超過了 inode 的分配大小。我在這裡有什麼誤解?
它指出 inode 的長度為 128 字節
不,它指出
$$ emphasis mine $$:
$$ … $$每個 inode的磁碟記錄大小為 128 字節。從 ext4 開始,可以在格式化時為文件系統中的所有 inode 分配一個更大的磁碟 inode,以提供超出原始 ext2 inode 末尾的空間。磁碟上的 inode 記錄大小在超級塊中記錄為
s_inode_size
. struct ext4_inode 超出原始 128 字節 ext2 inode 實際使用的字節數記錄在i_extra_isize
每個 inode 的欄位中$$ … $$預設情況下,ext4 inode 記錄為 256 字節,並且(截至 2019 年 8 月)inode 結構為 160 字節 (i_extra_isize = 32
)。你的疑惑:
最後一個條目是項目 ID。它的偏移量為 0x9c(整數為 156)。元數據偏移量似乎超過了 inode 的分配大小。
最後一個條目從 156 開始,佔用 4 個字節 (
__le32
)。它在預設的 160 字節內。如果
dumpe2fs
說文件系統的 inode 大小為 128,這意味著文件系統使用原始的 128 字節 ext2 inode。沒有i_extra_isize
(它將在偏移量 0x80,十進制 128)或任何超出的指定。