前回の記事「上書き保存したファイルは復元できるか?」で書いたとおり、Excel と Photoshop で上書き保存した場合は復元することができましたが、エクスプローラとメモ帳で上書き保存した場合は復元することができませんでした。 ところで、このテストでは、ファイルサイズについては触れていません。 NTFSでは、ファイルサイズが750バイト程度以下のものはMFTにデータごと保存され、それ以上の大きなファイルの場合はMFTにインデックスと属性などを書き込み、実データは別のクラスタに保存されます。 ですので、MFT内にデータがある場合と、データが別のクラスタにある場合とで処理が違うかもしれません。 例えば、データが別のクラスタにある場合は、新たなクラスタに新たなデータを保存して、MFTのインデックスを書き換えるのかもしれません。そうであれば、以前のデータは残っていることになり、復元も不可能ではありません。 実のところ、テキストファイルに関しては 517KB の大きなサイズも試したのですが、結果は一緒でした。また、xls、jpgに関しては、サイズがそれぞれ 53KB、79KB とMFTに実データは保存されない大きさのものだったのですが、やはりエクスプローラで上書き保存したものは復元が不可能でした。 このことから、MFT内に実データがある場合も別クラスタにある場合も、データの処理は一緒と判断し、特に記載しませんでした。 さて、前回テストの結果から考えると、Excel と Photoshop で上書き保存したものが復元できたのは、ソフトが特殊な処理を行っているためと推測できます。 つまり、本来上書き保存されたものは復元できないと言えます。 では何故、復元できないのでしょうか? Disk Probeを使用して、実際に何が行われているか確認します。 ■テストファイル [元ファイル] ファイル名:xxxxyyyyzzzz.txt 内容:xxxxyyyyzzzzxxxxyyyyzzzz[改行] ファイルサイズ:26バイト *[改行]は、改行したという意味です。 [上書き用ファイル-1] ファイル名:xxxxyyyyzzzz.txt 内容:abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz[改行] ファイルサイズ:54バイト [上書き用ファイル-2] ファイル名:xxxxyyyyzzzz.txt 内容:ooopppqqq ファイルサイズ:9バイト ■テスト方法
■テスト結果 [図1 - テストファイル] ファイルの最初の状態です。 必要ない部分はカットしてあります。 このファイルはサイズが26バイトと小さいため、MFT内に実データも保存されています。 セクタは349627です(図のステータスバー参照)。 ファイル名 xxxxyyyyzzzz.txt とファイルの内容 "xxxxyyyyzzzzxxxxyyyyzzzz" が、確認できます。 では、エクスプローラから、[上書き用ファイル-1]で上書きしてみます。 テスト1 - エクスプローラで上書き[図2 - エクスプローラで上書き] セクタは同じ349627です。 内容が "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz" に変更されたことがわかります。 つまり、エクスプローラでの上書きとは、ハードディスク上のファイルのデータそのものを上書きすることに他なりません。 そのため、どこかにバックアップが存在しない限り、復元することは不可能と言えます (この結論は、あとでくつがえされます)。 テスト2 - メモ帳で上書き次に、メモ帳から上書き保存してみます。 内容を全て削除し、代わりに以下の内容を書き込み、上書き保存します。 内容: notepad[改行] notepad[改行] notepad [図3 - メモ帳で上書き] さて、面白い結果になりました。 とりあえず、メモ帳で上書き保存した場合もエクスプローラでの上書き同様、ハードディスクのデータが直接書き換えられることを確認できました。 したがって、メモ帳で上書きした場合も復元は不可能です。 と言いたい所ですが、変更前の内容は一部残っています。 先のエクスプローラでの上書きでは、[上書き用ファイル-1]のサイズが元のファイルよりも大きかったため、 完全に前のデータはなくなってしまいました。 ところが、上書き前のサイズが上書き後よりも大きければ、その後ろの方のデータは残るのです。 その部分だけということであれば、復元は可能です。 テスト1で、後で結論がくつがえされると言ったのはこのことです。 さて、上書きでどう変更されたのか見てみましょう。
"..."のような部分は、文字で表現できないものがこのように表示されるだけで、実際の内容はそれぞれ異なっています。 この部分は16進表示のまま青色にしてみます。 また、"yG."も本来文字列ではないので、16進表示に戻し赤色にします。
これでわかりやすくなりました。 まず、変更後の一つ目と二つ目の"notepad"の後の0d0aは改行コードを意味することが容易に想像できます。 実際、変更前の文字列の最後でも改行したので、ちゃんと0d0aがあります(アスキーコード表を見れば、これは改行コード CR+LF であることが確認できます)。 0000は、全くの空欄のようです。 ffffffff82794711は、ファイル終端を表すのではないでしょうか。 だとしたら、変更後は、新しくffffffff82794711が追加されたので、それ以降の"opqrstuvwxyz"は無視されたということで納得がいきます。 けれど、ひとつ謎が残ります。 この部分です。
"notepad"の後に変更前の内容の残り"zabcdef"が続いています。 これでは"zabcdef"が表示されてしまいそうです。けれど、実際にはメモ帳で開いても表示されません。 となると、どこかにバイト数が書かれていて、それ以上は無視しているということになります。 メモ帳で上書き後のバイト数は、 ["notepad" : 7文字] * 3 + [改行コード : 2バイト] * 2 = 21 + 4 = 25 25バイトは16進数に変換すると、19。 この値がどこかにないかと探すと、ありました。 [図3 - メモ帳で上書き]の01A0行の最初に19とあります。 これが本当にバイト数を意味するかどうかは、[図2 - エクスプローラで上書き]で確認してみればいいわけです。 値は、36。これを10進数に直すと 54。 変更前のバイト数は、文字列から計算すると、 [アルファベット文字数 : 26] * 2 + [改行コード : 2バイト] = 52 + 2 = 54 ぴったり合いました。 というわけでデータのバイト数の値を元に、どこまでが実データか判断しているようです。 となると、先の推測、ffffffff82794711がファイル終端を表すというのは、間違いかもしれません。 これについては、別の機会に調べてみようと思います。 テスト3 - エクスプローラで小さいデータを上書きさて、エクスプローラで小さいデータを上書きした場合も前のデータの一部が残るのか確認してみます。 エクスプローラで[上書き用ファイル-2]を上書きします。 [図4 - エクスプローラで小さいデータを上書き] メモ帳同様、前のデータの一部が残りました。 したがって、エクスプローラで上書き保存した場合も、上書き前のサイズの方が大きければ、後ろの方のデータは復元が可能ということになります。 復元ツールでこの差分が復元できるのかというのは、また別の話ですが。 関連記事: 参考サイト:
');
function google_ad_request_done(google_ads) {
var i;
if( google_ads[0] ){
document.write("
");
document.write(" ");
}
}
// -->
Ads by Google"); document.write("
月別リンクトラックバック(0件)
コメント(0件)
何故、上書きされたデータは復元できないのか? 電子頭脳の実験室/BIGLOBEウェブリブログ
|