是否有一种简单的方法可以使用python读取给定文件的所有已分配集群?通常的python read()似乎只允许我读取文件的逻辑大小(当然这是合理的),但我想读取包括松弛空间在内的所有集群。
例如,我有一个名为" test.bin"的文件。这是1234字节的逻辑大小,但由于我的文件系统使用大小为4096字节的簇,因此该文件在磁盘上的物理大小为4096字节。即,文件松弛空间中有2862个字节。
我不知道从哪里开始解决这个问题...我知道我可以从/ dev / sda读取原始磁盘,但我不确定如何找到感兴趣的集群。 ..当然这是拥有文件系统的全部要点(将文件名称与磁盘上的扇区相匹配),但我不太了解python如何与文件系统交互以解决这个问题。 ......但是......任何帮助或参考指针都将非常感激。
答案 0 :(得分:1)
假设有一个ext2 / 3/4文件系统,正如你猜测的那样,你最好的选择可能是:
在debugfs周围使用包装器(如this one)来获取与给定文件关联的块列表:
debugfs: blocks ./f.txt
2562
从块设备/图像文件中读回/那些块
>>> f = open('/tmp/test.img','rb')
>>> f.seek(2562*4*1024)
10493952
>>> bytes = f.read(4*1024)
>>> bytes
b'Some data\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
...
不是很花哨,但那会奏效。请注意,您无需安装FS即可执行上述任何步骤。这对于法医应用程序尤其重要,在这些应用程序中,您无法信任磁盘内容和/或每个规则不允许安装磁盘映像。
答案 1 :(得分:0)