我已经浏览了linux内核代码中inode
的代码,但我无法确定inode
中数据指针的位置。我知道有15个指针[0-14],其中12个是直接的,1个是单个间接的,1个是双重间接的,1个是三个间接的。
有人可以找到这些数据成员。另外请详细说明你如何找到这些,因为我在google上用不同的关键词多次搜索但都是徒劳的。
答案 0 :(得分:3)
由特定的文件系统来访问其数据,因此没有"数据指针"通常(某些文件系统可能是虚拟的,这意味着即时生成数据或从网络中检索它)。
如果您对ext4
感兴趣,可以在struct ext4_inode
中查找特定于ext4的inode结构(fs/ext4/ext4.h
),其中inode的数据确实被引用12个直接块的索引,1个单个间接,1个双重间接和1个三个间接。
这意味着inode数据的块[0..11]具有数字e4inode->i_block[0/1/.../11]
,而e4inode->i_block[12]
是填充了数据块编号本身的块的编号(所以它保存了inode数据块的索引[12,12 + fs-> block_size / sizeof(__ le32)]。同样的技巧应用于i_block[13]
,只有它拥有双重间接索引(填充了包含保存实际数据的块列表的块索引的块)从索引12 + fs->block_size / sizeof(__le32)
开始,i_block[14]
保存三个间接索引。
答案 1 :(得分:3)
如下所述:
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命令的输入通常是硬盘图像本身的复制品,原因很多。 / p>