0

私は個人的なプロジェクトに取り組んでおり、定期的に (毎月のように) ハードディスクをトラバースし、現在 inode に割り当てられていないディスク上のブロックをシュレッド (ゼロで上書き) します。

Cプロジェクトの低レベルの性質を考えると、これを行うための最も論理的な言語のように思えましたが、ファイルシステムで未使用のブロックを見つける最善の方法がわかりません. SO やこれに似た他の場所に関するいくつかの質問を見つけましたが、これらの未使用のブロックを効率的かつ効果的に見つける最善の方法についてのコンセンサスは見られませんでした。

dfこれに似たような質問が少しでも出てきましたが、何かが欠けていない限り、正確なブロックオフセットを指定するのに必要な解決策があるとは思いません. 私が調べるべき別のユーティリティや、まったく別の方向性はありますか?

私が開発するソリューションは、少なくともext3ファイルシステムを処理できる必要があり、できればファイルシステムext4も処理できる必要があります。

4

2 に答える 2

2

サポートするファイルシステムに非常に固有のディスク上のファイルシステムデータを読み取って解析するための独自の実装を作成する以外に、使用されているブロックを見つけるための一般的なソリューションは実際にはありません。データがディスク上でどのように見えるかは、そのファイルシステムのコードの外では文書化されていないことが多く、文書化された場合、実際の実装と比較して文書化が古くなっていることがよくあります。

最善の策は、サポートしたいファイルシステムのfsckの実装を読むことです。これは、多かれ少なかれ興味のあることを実行するためですが、そこにある多くのfsck実装は、属するすべてのデータを常にチェックするとは限らないことに注意してください。ファイルシステムに。代替のスーパーブロックと、fsckがチェックしない(またはプライマリスーパーブロックが破損している場合にのみチェックする)特定のメタデータがある場合があります。

ファイルシステムについて学ぶだけでなく、自分がやりたいと言っていることを本当にやりたい場合は、通常のバックアップのようにファイルシステムをダンプし、ディスクをワイプしてバックアップを復元するのが最善の策です。特に、ディスクワイプアプリケーションがカーネルの更新によってファイルシステムを破壊する可能性があることを考えると、他に安全なことはできないと思います。

于 2013-02-05T09:13:03.387 に答える
1

Linux は現在、12 を超える異なるファイルシステムをサポートしているため、どれを選択するかによって答えが異なります。

ただし、それらはすべて、空きブロックを簡単に見つける方法を備えている必要があります。そうしないと、新しいファイルを作成したり、現在のファイルを拡張したりするのが少し遅くなります。

たとえば、ext2各ブロック グループの先頭に、そのブロック グループの空きリストなどを含むヘッダーがあります。ext4そこには余分なものがたくさんありますが、これが変わったとは思いません。

任意のブロックを取得して、それが使用されているかどうかを判断しようとするよりも、これらのブロック ヘッダー内の空きブロックをトラバースする方がはるかに優れているでしょう。

于 2013-02-05T07:52:05.470 に答える