读取超级块

5

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


1
这当然高度取决于文件系统。我知道你想绕过它,但是实现文件的方式是自由的。 - leppie
继续这个问题:https://dev59.com/u0XRa4cB1Zd3GeqPvu6n - titaniumdecoy
2个回答

2
既然您提到了Mac OS X,我们假设您只想针对HFS+执行此操作。维基百科页面提供了一些关于可能的启动方式的信息,例如它关于磁盘上的布局说:
卷的0和1扇区是HFS引导块,与HFS卷中的引导块相同。它们是HFS包装器的一部分。第2扇区包含相当于HFS卷中主目录块的卷头。卷头存储有关卷本身的各种数据,例如分配块大小、时间戳(指卷创建时间)或其他卷结构的位置,如目录文件或范围溢出文件。卷头始终位于同一位置。分配文件跟踪哪些分配块是空闲的,哪些在使用中。它类似于HFS中的卷位图,每个分配块由一个位表示。零表示块为空闲,一表示块正在使用中。与HFS卷位图的主要区别是分配文件存储为常规文件,它不占用紧邻卷开头的特殊保留空间。分配文件的大小也可以更改,不必在卷内连续存储。

之后内容变得更加复杂。例如,可以阅读B*树了解更多信息。

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

1

当你删除一个文件时,因为磁盘上没有留下太多信息,所以你会遇到相当大的麻烦来查找已删除的文件。

如果你在FAT(或UDF)文件系统上删除一个文件,它的目录条目只是被标记为“已删除”,而大部分目录条目仍然完好无损。

在HFS卷中,由于它们使用B-树,已删除的编辑必须从目录中删除,否则搜索项目的效率将不再起作用(虽然这个论点可能有点薄弱,但事实是已删除的条目会被删除和覆盖)。

因此,除非删除是意外地通过写入目录扇区或重新初始化卷发生的,否则你将找不到太多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接