5

我知道在 Unix(特别是 Mac OS X)中,超级块存储有关磁盘上数据布局的信息,包括索引节点开始和结束的磁盘地址。我想扫描程序中的 inode 列表以查找已删除的文件。如何找到 inode 开始的磁盘地址?我查看了 statfs 命令,但它没有提供此信息。

4

2 回答 2

2

由于您提到了 Mac OS X,我们假设您的意思是仅针对 HFS+ 执行此操作。Wikipedia 页面提供了一些关于可能的启动方式的信息,例如它说明了磁盘布局:

卷的扇区 0 和 1 是 HFS 引导块。这些与 HFS 卷中的引导块相同。它们是 HFS 包装器的一部分。

扇区 2 包含相当于 HFS 卷中的主目录块的卷标头。卷标头存储有关卷本身的各种数据,例如分配块的大小、指示卷创建时间的时间戳或其他卷结构(如目录文件或扩展区溢出文件)的位置。卷标头始终位于同一位置。

分配文件,它跟踪哪些分配块是空闲的,哪些正在使用中。它类似于HFS中的Volume Bitmap,每个分配块由一位表示。零表示该块是空闲的,一表示该块正在使用中。与 HFS Volume Bitmap 的主要区别在于,Allocation File 存储为常规文件,它不占用卷开头附近的特殊保留空间。分配文件也可以改变大小,并且不必连续存储在一个卷中。

在那之后,它变得更加复杂。例如,阅读B* 树

我不是 Mac OS 用户,但如果还没有编写用于扫描已删除文件的工具,我会感到惊讶,也许有些是开源的,可以提供更具体的起点?

于 2008-12-04T07:43:00.880 回答
1

找到已删除的文件会很麻烦,因为当您删除文件时,磁盘上没有太多东西可以找到。

如果您删除 FAT(或 UDF)文件系统上的文件,其目录条目只会被标记为“已删除”,而大部分 dir 条目仍然完好无损。

在 HFS 卷上,由于它们使用 B-Tree,必须从目录中删除已删除的编辑,否则搜索项目将无法更有效地工作(好吧,这个论点可能有点弱,但事实是删除的条目被删除和覆盖)。

因此,除非通过意外写入目录扇区或重新初始化卷而发生删除,否则您将找不到太多内容。

于 2008-12-07T09:50:41.573 回答