我知道在Unix(特别是Mac OS X)中,超级块存储有关磁盘上数据布局的信息,包括inode开始和结束的磁盘地址。我想扫描程序中的inode列表以查找已删除的文件。如何找到inode开始的磁盘地址?我查看了statfs命令,但它没有提供此信息。
答案 0 :(得分:2)
由于您提到的是Mac OS X,我们假设您的意思是仅针对HFS +执行此操作。 Wikipedia page提供了有关可能的启动方式的一些信息,例如它说明了磁盘布局:
卷的扇区0和1是HFS引导块。它们与HFS卷中的引导块相同。它们是HFS包装器的一部分。
扇区2包含与HFS卷中的主目录块等效的卷标头。卷标头存储有关卷本身的各种数据,例如分配块的大小,指示卷创建时间的时间戳或其他卷结构(如目录文件或扩展溢出文件)的位置。卷头始终位于同一位置。
分配文件,用于跟踪哪些分配块是空闲的以及哪些正在使用。它类似于HFS中的卷位图,每个分配块由一位表示。零表示块是空闲的,一个表示块正在使用中。与HFS卷位图的主要区别在于,分配文件存储为常规文件,它不占用卷开头附近的特殊保留空间。分配文件也可以更改大小,而不必在卷中连续存储。
之后变得更加复杂。例如,请阅读B* trees。
我不是Mac OS用户,但是如果没有用于扫描已删除文件的工具,我会感到惊讶,也许有些是开源的,可以提供更具体的起点?
答案 1 :(得分:1)
找到已删除的文件会有一些麻烦,因为删除文件时磁盘上没有多少内容可供查找。
如果删除FAT(或UDF)文件系统上的文件,其目录条目只会被标记为“已删除”,大部分目录条目仍然完好无损。
在HFS卷上,由于使用了B-Trees,删除的编辑必须从目录中删除,否则搜索项目将无法更有效地工作(嗯,这个论点可能是有点弱,但事实是删除的条目被删除和覆盖)。
因此,除非通过意外写入目录扇区或通过重新初始化卷来进行删除,否则你找不到多少。