0

当一个文件被保存到驱动器中时,它的内容被写入然后被索引。我想获取索引并访问文件的原始内容。

关于如何做到这一点的任何想法,尤其是对于 ex4 和 btrfs?

更新:我想获取文件范围的地址。有关地址的信息必须存储在磁盘的某个位置。我想检索此信息,以便映射文件内容的物理位置。有什么方法可以实现吗?

更新:大家好!感谢您的回复。我想要的是一个函数/命令,它返回一个范围地址列表。debugfs 似乎是具有最相关功能的功能/命令。

4

2 回答 2

0

当前的解决方案/解决方法是使用 popen 调用这些函数:

filefrag -e /path/to/file

hdparm --fibmap /path/to/filename

然后应该简单地解析这些程序的字符串输出。这不是一个真正的解决方案(即:C/C++ 级别的输出),但我现在会接受它。

资料来源:

https://unix.stackexchange.com/questions/106802/what-c​​ommand-do-i-use-to-see-the-start-and-end-block-of-a-file-in-the-file-系统

https://serverfault.com/questions/29886/how-do-i-list-a-files-data-blocks-on-linux

于 2020-03-30T18:17:37.650 回答
0

这取决于您使用的文件系统。如果您运行的是 Linux,您可以使用debufs它在文件系统中查找文件。

我不得不说,所有的 FS 都是通过 VFS 挂载的,VFS 是一个虚拟文件系统,就像一个带有标准操作(打开、关闭、读取......)的简化接口。那是什么意思?没有文件系统或其内容(文件,目录)直接从磁盘打开,当您打开某些内容时,您将其移动到主存储器(您的 RAM)中进行操作,当您关闭某些内容时,它会返回到磁盘驱动器。

现在,问题是:我可以在 FS 中获得绝对地址吗?是的,如果您像这样打开整个文件系统,例如使用 C 语言open ("/dev/sdaX", 0_RDONLY);获得相对于文件系统的地址。lseek

然后...我可以在整个驱动器中获得相同的结果吗?不,那是因为您无法将整个驱动器作为文件描述符打开。还记得/dev/sdaXUNIX 吗?分区及其可以像文件一样打开,因为它们上面运行着一个虚拟接口。

您的最后一个答案:我可以阅读真正原始的内容吗?所有文件都在它们出现在磁盘上时被读取,唯一改变的是操作系统使用的描述符和一些关于如何索引的数据,所有这些都是“文件头”。

我希望你所有的问题都得到解答。

于 2020-03-27T14:21:51.170 回答