为什么索引节点偏移值似乎超过索引节点大小?

为什么索引节点偏移值似乎超过索引节点大小?

我正在研究 Ext4 文件系统,对 128 字节 inode 大小感到困惑,因为它似乎与它存储的最后一个元数据值冲突,该值应该在字节 156 处偏移。

在这个文档它指出 inode 的长度是 128 字节。我在未挂载的 /dev/sdb1 上调用了 dumpe2fs。 dumpe2fs 结果证实 inode 大小为 128。

但我很困惑因为这个文档描述存储在 inode 中的元数据。对于元数据的每个条目,都有一个相应的物理偏移量。最后一个条目是项目 ID。它的偏移量位于 0x9c(整数为 156)。

元数据偏移量似乎超出了索引节点的分配大小。我在这里误解了什么?

答案1

它指出 inode 的长度是 128 字节

不。它指出[强调我的]:

[...]每个索引节点磁盘记录大小为 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)。元数据偏移量似乎超出了索引节点的分配大小。

最后一个条目从 156 开始,占用 4 个字节 ( __le32)。它在默认的 160 字节之内。

如果dumpe2fs说您的文件系统的 inode 大小为 128,则意味着该文件系统使用原始的 128 字节 ext2 inode。没有i_extra_isize(它将位于偏移量 0x80,十进制 128)或超出范围的任何内容。

相关内容