假设我们有一个简单的情况:
ext4
带日志功能的文件系统- 名为 的单个文件
file
,其中没有其他硬链接 - for
inode
只file
关联了 1 个数据block
我对这个具体案例的删除流程的理解如下:
- 我们将删除的日志
file
- 记录我们将把
inode
's减ref_cnt
1 - 犯罪
- 记录因为
ref_cnt
是 0,所以释放inode
回池 - 犯罪
- 记录因为
inode
已释放,所以释放关联block
回池
- 记录我们将把
- 提交删除
file
其中,如何获取步骤1.5中释放的区块号?它存储在日志中吗?如果是这样,我将如何访问它?
我一直在寻找提供此信息的文件系统接口。我已经达到了最好的水平debugfs -R "logdump -a"
,但我不知道如何从那里继续前进。
注意:我知道有类似的工具ext3grep
可以帮助我恢复file
。我的目标是出于教育目的,通过从日志中获取块号来手动尝试此操作。我还了解,在获取此信息之前,inode
和可能会被重复使用。block
出于本问题的目的,假设文件系统在删除完成后是只读的。