Ext4

為什麼 inode 偏移值似乎超過了 inode 大小?

  • March 4, 2020

我正在研究 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)或任何超出的指定。

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