0

我正在从事一个个人项目,以定期(每月一次)遍历我的硬盘并切碎(用零覆盖)磁盘上当前未分配给任何 inode 的任何块。

C鉴于项目的低级性质,这似乎是最合乎逻辑的语言,但我不确定如何最好地在文件系统中找到未使用的块。我在 SO 和其他与此类似的地方发现了一些问题,但没有就有效找到这些未使用块的最佳方法达成任何共识

df已经提出了任何与此类似的问题,但我不相信它具有指定确切块偏移所需的分辨率,除非我遗漏了什么。我应该研究另一个实用程序或其他方向吗?

无论我开发什么解决方案,都需要至少能够处理ext3文件系统,最好ext4也能够处理。

4

2 回答 2

2

除了编写自己的实现来读取和解析磁盘文件系统数据之外,您并没有任何通用的解决方案来找出正在使用的块,这些数据高度特定于您要支持的文件系统。数据在磁盘上的外观通常在该文件系统的代码之外没有记录,并且在记录时,与实际实现相比,文档通常已经过时。

您最好的选择是阅读您想要支持的文件系统的 fsck 实现,因为它或多或少地做了您感兴趣的事情,但请注意,许多 fsck 实现并不总是检查属于的所有数据到文件系统。您可能有 fsck 不检查的备用超级块和某些元数据(或仅在主超级块损坏的情况下检查)。

如果你真的想做你说你想做的事,而不仅仅是了解文件系统,你最好的办法是像普通备份一样转储文件系统,擦除磁盘并恢复备份。我非常怀疑其他任何事情都是安全的,特别是考虑到您的磁盘擦除应用程序可能会因您所做的任何内核更新而破坏您的文件系统。

于 2013-02-05T09:13:03.387 回答
1

Linux 目前支持十几种不同的文件系统,因此答案将取决于您选择哪一个。

但是,它们都应该有一种简单的方法来查找空闲块,否则创建新文件或扩展当前文件会有点慢。

例如,ext2在每个块组的开头都有一个标头,其中包含该块组的空闲列表等。我不相信这已经改变了,ext4即使那里有很多额外的东西。

您可能会更好地遍历这些块标题中的空闲块,而不是获取任意块并试图确定它是使用还是空闲。

于 2013-02-05T07:52:05.470 回答