当一个文件被保存到驱动器中时,它的内容被写入然后被索引。我想获取索引并访问文件的原始内容。
关于如何做到这一点的任何想法,尤其是对于 ex4 和 btrfs?
更新:我想获取文件范围的地址。有关地址的信息必须存储在磁盘的某个位置。我想检索此信息,以便映射文件内容的物理位置。有什么方法可以实现吗?
更新:大家好!感谢您的回复。我想要的是一个函数/命令,它返回一个范围地址列表。debugfs 似乎是具有最相关功能的功能/命令。
当一个文件被保存到驱动器中时,它的内容被写入然后被索引。我想获取索引并访问文件的原始内容。
关于如何做到这一点的任何想法,尤其是对于 ex4 和 btrfs?
更新:我想获取文件范围的地址。有关地址的信息必须存储在磁盘的某个位置。我想检索此信息,以便映射文件内容的物理位置。有什么方法可以实现吗?
更新:大家好!感谢您的回复。我想要的是一个函数/命令,它返回一个范围地址列表。debugfs 似乎是具有最相关功能的功能/命令。
当前的解决方案/解决方法是使用 popen 调用这些函数:
filefrag -e /path/to/file
hdparm --fibmap /path/to/filename
然后应该简单地解析这些程序的字符串输出。这不是一个真正的解决方案(即:C/C++ 级别的输出),但我现在会接受它。
资料来源:
https://serverfault.com/questions/29886/how-do-i-list-a-files-data-blocks-on-linux
这取决于您使用的文件系统。如果您运行的是 Linux,您可以使用debufs
它在文件系统中查找文件。
我不得不说,所有的 FS 都是通过 VFS 挂载的,VFS 是一个虚拟文件系统,就像一个带有标准操作(打开、关闭、读取......)的简化接口。那是什么意思?没有文件系统或其内容(文件,目录)直接从磁盘打开,当您打开某些内容时,您将其移动到主存储器(您的 RAM)中进行操作,当您关闭某些内容时,它会返回到磁盘驱动器。
现在,问题是:我可以在 FS 中获得绝对地址吗?是的,如果您像这样打开整个文件系统,例如使用 C 语言open ("/dev/sdaX", 0_RDONLY);
获得相对于文件系统的地址。lseek
然后...我可以在整个驱动器中获得相同的结果吗?不,那是因为您无法将整个驱动器作为文件描述符打开。还记得/dev/sdaX
UNIX 吗?分区及其可以像文件一样打开,因为它们上面运行着一个虚拟接口。
您的最后一个答案:我可以阅读真正原始的内容吗?所有文件都在它们出现在磁盘上时被读取,唯一改变的是操作系统使用的描述符和一些关于如何索引的数据,所有这些都是“文件头”。
我希望你所有的问题都得到解答。