- ベストアンサー
使用クラスタの空き部分には何が・・
ファイルは、クラスタ (アロケーションユニット) 単位でディスクを消費するとのことですが、使用クラスタの空き部分には何が書かれているのでしょうか。 積極的にNULL等が書かれているでしょうか、それとも、以前使用されていた時の残骸が存在しているのでしょうか。 例えば、512バイトセクタの 8 つでクラスタが構成されているとし、旧ファイルは全てを使い切っていたと仮定します。 そして更新ファイルは、10バイトだとしましょう。 最初のセクタの残り502バイトはどうなっているのでしょう。 また、書き込みはセクタ単位で行われる旨の記載も見ますが、後続 7 セクタはまた別の状況でしょうか。 ご存知の方、教えていただけないでしょうか。 HSPという言語で Win32 API の SetEndOfFile() という関数を呼んでみたのですが、これだとファイル自体が書き変わってしまうようで、何の収穫もありませんでした。 DeviceIoControl()という関数が有効との記事が散見されますが、具体例が見つからず、初心者の私には手におえませんでした。 ファイルの復元不能削除用のプログラムに、空きクラスタの上書きのような機能があるようですが、さらに、使用中のクラスタの空き領域の上書きは必要ないのだろうかというのが、疑問の発端です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 積極的にNULL等が書かれているでしょうか ディスクアクセスのコストを払ってここまですることはあまりないと思われます。 ので、 > 以前使用されていた時の残骸が存在しているのでしょうか。 こちらでしょう。 ただし、ファイルシステムにもよると思われます。
その他の回答 (1)
昔、出版社のアスキーか゛出した、ディスク解析のsoftが有って、←当時はFATでしたが、一見バイナリー・エデーター+FAT部分の表示、と言ったソフトでしたが、それに依ると「FAT部分の構成は」ファイル名=番地、(Byt単位で管理) 又は、ファイル名=番地~番地~番地、 ~←の部分は、フラグメントの生じた(いわゆる、飛び飛びの部分)で、その飛び飛びの空白の中身には様々な数値(16進数)ですが、番地から番地までの空白部分は、読まないので(何が書き込まれていても関係ない)です。 ------- NTFS系はクラスター単位で(MFTあたりで管理)しているのかも知れませんが、理論的には、ファイル名=番地~番地なので、飛んで居る空欄に何かが書かれて居ても読まないので無関係では無いか思います。 又、1セクター内でも全てが使われて居るとは限りませんので(1セクター内にも空白部分は生じる)バイト単位で、番地管理が成されて居るのだと思います。
お礼
ご回答、情報ありがとうございました。
お礼
ありがとうございました。 概ね、おっしゃる通りでした。 マイクロソフトが、"Disk Probe" というセクタ表示のツールを無料配布していました。 灯台下暗しでした。 これで、Windows2k のNTFSの挙動を見てみました。 使用クラスタの空きセクタは放任のようですが、使用セクタに関しては余白がNULLで埋められるようです。 ファイルの長さを変えてみると、そのように振舞います。 なお小さなファイルを新規作成すると、MFT内に本体が保存され完結するようです。 ここでは余分がNULLで埋められるようなことも無く、更新は最小限の重ね書きです。 ファイルが数百バイトを超えたところで、ようやくMFTはインデックスの役割となり、本体は別のクラスタに保存されるようです。 が、この時、MFT内の旧本体はゴミとなって残るようです。 クラスタを完全に放棄せずして、セキュリティを保ち続けるのはかなり大変そうに感じました。