5

Unix(具体的にはMac OS X)では、スーパーブロックは、iノードが開始および終了するディスクアドレスなど、ディスク上のデータのレイアウトに関する情報を格納することを知っています。プログラム内のiノードのリストをスキャンして、削除されたファイルを探します。iノードが始まるディスクアドレスを見つけるにはどうすればよいですか?statfsコマンドを見ましたが、この情報は提供されません。

4

2 に答える 2

2

Mac OS Xについて言及しているので、これをHFS+に対してのみ行うつもりであると仮定しましょう。ウィキペディアのページには、開始するための可能な方法に関するいくつかの情報が記載されています。たとえば、ディスク上のレイアウトについて次のように説明されています。

ボリュームのセクター0と1はHFSブートブロックです。これらは、HFSボリュームのブートブロックと同じです。これらはHFSラッパーの一部です。

セクター2には、HFSボリュームのマスターディレクトリブロックに相当するボリュームヘッダーが含まれています。ボリュームヘッダーには、割り当てブロックのサイズ、ボリュームが作成された日時を示すタイムスタンプ、カタログファイルやエクステントオーバーフローファイルなどの他のボリューム構造の場所など、ボリューム自体に関するさまざまなデータが格納されます。ボリュームヘッダーは常に同じ場所にあります。

どの割り当てブロックが空いていて、どの割り当てブロックが使用されているかを追跡する割り当てファイル。これはHFSのボリュームビットマップに似ており、各割り当てブロックは1ビットで表されます。ゼロはブロックが空いていることを意味し、1はブロックが使用中であることを意味します。HFSボリュームビットマップとの主な違いは、割り当てファイルが通常のファイルとして保存され、ボリュームの先頭近くに特別な予約済みスペースを占有しないことです。割り当てファイルはサイズを変更することもでき、ボリューム内に連続して保存する必要はありません。

その後、さらに複雑になります。たとえば、B*ツリーを読んでください。

私はMacOSユーザーではありませんが、削除されたファイルをスキャンするために作成されたツールがまだない場合は、おそらくいくつかはオープンソースであり、より具体的な出発点を提供できますか?

于 2008-12-04T07:43:00.880 に答える
1

ファイルを削除すると、ディスク上にはあまりファイルが残っていないため、削除されたファイルを見つけるのはかなり困難です。

FAT (または UDF) ファイル システム上のファイルを削除すると、そのディレクトリ エントリは単純に「削除済み」としてマークされ、ほとんどのディレクトリ エントリはそのまま残ります。

HFS ボリュームでは、B-Tree を使用しているため、削除された編集をディレクトリから削除する必要があります。そうしないと、アイテムの検索が効率的に機能しなくなります (この議論は少し弱いかもしれませんが、実際には、削除されたエントリは削除されて上書きされます)。

そのため、誤ってディレクトリ セクタを上書きしたり、ボリュームを再初期化したりして削除した場合を除き、多くの情報は見つかりません。

于 2008-12-07T09:50:41.573 に答える