我已经浏览了inode
linux 内核代码中的代码,但我无法弄清楚inode
. 我知道有 15 个指针 [0-14],其中 12 个是直接的,1 个是单间接的,1 个是双间接的,1 个是三重间接的。
有人可以找到这些数据成员吗?另外请说明你是如何找到这些的,因为我在谷歌上搜索了很多次不同的关键词,但都是徒劳的。
我已经浏览了inode
linux 内核代码中的代码,但我无法弄清楚inode
. 我知道有 15 个指针 [0-14],其中 12 个是直接的,1 个是单间接的,1 个是双间接的,1 个是三重间接的。
有人可以找到这些数据成员吗?另外请说明你是如何找到这些的,因为我在谷歌上搜索了很多次不同的关键词,但都是徒劳的。
访问其数据取决于特定的文件系统,因此通常没有“数据指针”(某些文件系统可能是虚拟的,这意味着动态生成数据或从网络检索数据)。
如果你有兴趣ext4
,你可以查看 ext4 特有的 inode 结构 ( struct ext4_inode
) fs/ext4/ext4.h
,其中一个 inode 的数据确实被 12 个直接块的索引引用,1 个单间接,1 个双间接和 1 个三间接.
这意味着 inode 数据的块 [0..11] 具有 numbers e4inode->i_block[0/1/.../11]
,而e4inode->i_block[12]
是一个由数据块编号本身填充的块的编号(因此它在 [12, 12 + fs- 范围内保存 inode 数据块的索引>block_size / sizeof(__le32)]. 相同的技巧适用于i_block[13]
,只是它保存从 index 开始的双间接索引(用块的索引填充的块,这些块的索引包含保存实际数据的块列表)12 + fs->block_size / sizeof(__le32)
,并i_block[14]
保存三重间接索引。
如此处所述:
Ext4 使用范围而不是块指针来跟踪文件内容。
如果您对使用内容指针的 ext3/ext2 数据结构感兴趣:
http://www.slashroot.in/how-does-file-deletion-work-linux
有很多很好的图表来详细说明它。和这里:
http://mcgrewsecurity.com/training/extx.pdf
在第 16 页有“块指针”详细信息的示例(基本上是块号,或相对于磁盘映像开始的偏移值,1 个块通常为 512 字节)。
如果您想以物理方式遍历文件系统,例如使用 ext3 格式化的硬盘驱动器,请参阅以下内容:
http://wiki.sleuthkit.org/index.php?title=FS_Analysis
但是您总是可以只使用“dd”命令来做所有事情,只需要知道从哪里开始读取和停止读取,并且 dd 命令的输入通常是硬盘映像本身的副本,原因有很多。