TOP > パソコンカフェ > 誤って上書き保存した!以前のファイルを取り戻せるか

第1回 誤って上書き保存した!以前のファイルを取り戻せるか。

別名で保存するつもりのファイルをうっかり上書き保存してしまった経験はありませんか?こういった場合、以前のファイルはどうなるのでしょうか。完全に上書きされてしまうのか、またはどこかに痕跡が残っているのか。今回はテキストファイル、画像ファイルなどを使って実験した結果をレポートします。尚、ファイルシステムは、NTFSです。

では、実際に3種類のファイルを使って上書きを行い、以前のファイルを復元できるか試してみました。実験方法は、同サイズ同士での上書きと、元のファイルを数倍に大きくし、上書きする方法を試してみました。 結果は下記の通りです。(尚、上書き方法は、テキストファイルは、メモ帳、Wordファイルは、Word2007、画像ファイルは、Photoshop Elements6により上書きを行いました。)

Noファイル種類元のファイルサイズ上書きファイルサイズ復元の可否
テキスト(.txt)50Byte50Byte×
テキスト(.txt)50Byte1024Byte×
Wordファイル(.doc)45KByte45KByte×
Wordファイル(.doc)45KByte100KByte×
画像ファイル(.jpg)3.4MByte3.4MByte×
画像ファイル(.jpg)3.4MByte5.8MByte

○:復元できた  ×:復元できない

結果は、画像ファイルを大きくして上書きしたもの以外は、すべて×でした。上書き方法は、ソフトによって異なりますが、今回の場合はほとんどの場合において、同じセクタに上書きされてしまったようです。

では、実際にどのように書き込みが行われているのか、比較的小さいファイルを使って、HDDの中味をのぞいてみましょう。

サンプルデータ(50Byte)
【a0000a0001a0002a0003a0004a0005a0006a0007a0008a0009】
をCドライブ上にファイル名「test-data.txt」で書き込み。
(セクタビューワーは、Acronis Disk Directer Suite10.0の Disk Editorを使用)


0x016A番地〜0x0183番地(赤部分)までのデータが「test-data.txt」というファイル名のデータになります。実際のデータは、0x01A0番地〜0x01D1番地(青部分)までのデータ。
左下にセクタが表示されています。このデータは、38,745,489セクタ目に書き込みされていることがわかります。

では、このファイルを倍の100Byteのデータに編集して上書き保存してみましょう。
書き換えデータ(100Byte)
【b0000b0001b0002・・・・・・・・・b0017b0018b0019】
を同ファイル名で上書き保存。



同じセクタを見てみると、先ほどのデータ「a000a0001a0002・・・」が、「b000b0001b0002・・・」に変わっており、完全に上書きされてしまっていることがわかります。倍の100Byteのデータになったため、 今度は、次のセクタにまたがって書き込まれています。では、さらに今度は、1024Byteのデータを上書きしたらどうなるでしょう。

上書きしたデータ(1024Byte)
【c0000c0001c0002c0003c0004c0005c00068・・・・・・・・・・c198c0199c0200c0201c0202c0203c020】



同じセクタをみたところ、38,745,489セクタ目に書かれていた「b000b0001b0002・・・」は完全に消えており、変わりに1024Byteの書き込み先を示す、インデックス番号が書かれていました。 0x01F2〜0x01F4番地(赤部分)がそのインデックスになります。ちなみに、次のセクタ38,745,490セクタ目の最初の方は、以前のデータが残ってます。

さて、ではインデックスを解読してみましょう。

0x01F2〜0x01F4番地のデータを抽出すると、「65 AE 06」となってます。これはリトルエンディアンなので、逆からよみます。「06 AE 65」となります。これを我々が日常使っている10進数に変換すると、 0x06AE65 → 437861となります。これが、クラスタ番号となります。これを更に、セクタ番号に変換します。当方の環境では、1クラスタ=8セクタなので、437,861×8セクタ=3,502,888セクタとなります。

さらに、Cドライブの先頭は、63セクタ目から始まっているので、この値に63を足します。
3,502,888+63=3,502,951セクタ
これが、1024Byteのデータが書き込まれている先頭セクタになります。早速みてみましょう。



この通り、1024Byteのデータが書き込まれていました。これは、MFTのファイル管理領域外に書かれたことを示しています。実は、データサイズが数百Byteといった小さい場合、MFTというファイルを管理するためのテーブル内にデータが保存されます。ところが、今回1KByte(1024byte)を書き込んだため、MFTには入りきれなくなり、通常のデータ領域内に書かれた格好となりました。
では、今度は、さらに倍の2KByte(2048byte)で書き込んだらどうなるでしょう。

上書きしたデータ(2048Byte)
【d0000d0001d0002d0003d0004d0005d0006・・・・・・・・・・d0402d0403d0404d0405d0406d0407d04】



完全にセクタレベルで上書きされた形となりました。この後、4Kbyteでも同様に上書きされたことから、HDDの連続した空き領域があった場合、同名で保存した場合は、全て上書きされ、ほとんど復元は不可能であることが分かります。復元の可能性があるのは、HDDの連続した空き領域が確保できなくなり、全く別の領域に書き込んだ場合に限るのではないでしょうか。
残念ながらこの検証はできませんでしたが、結論として、上書き保存による復元は、特定の条件を満たさない限り、かなり難しいことが分かります。

但し、余談ではありますが、磁気力顕微鏡といった特殊な装置を使い、HDD内の残留磁気を読みとることで、元データを復元することは、技術的には可能なようです。しかしながら、このようなサービスを行っている業者は、ほとんど無いというのが現状です。

このページの先頭へ戻る

Copyright (C) 2011 Fukumuro PC Support All rights reserved.