ハードディスクの中身を誤って消した場合のファイル復旧方法

先日、私は自宅のデジタルビデオとデジタル写真をバックアップするためのディスク容量を十分に確保しようと思い、新しいハードディスクを買って自宅のLinuxサーバーに増設した。保存しようとするすべてのファイルを1つのハードディスクに移動し、新しいバージョンのLinuxにアップグレードするために古いハードディスクのパーティションを切り直した。オペレーティングシステムの再インストールを終えた後、バックアップハードディスクをマウントしたわけだが、そこで中身が空だということが判明した。どういうわけか、全データをバックアップしたハードディスクと、消去するハードディスクとを取り違えてしまったのだ。こうして外部メディアへのバックアップを失敗したおかげで、写真とビデオのバックアップをすべて失ってしまった。

私はしばらく呆然としていたが、なんとか立ち直り、ファイル復元の方法を探すことにした。失ったファイルやパーティションを取り戻せそうなものはないかとさまざまな商用製品の体験版を試してみたが、使えそうなものはなかった。最終的に見つかったのがTestDiskPhotoRecで、後者を使って失ったファイルを復元することができた。

TestDiskでは、事実上あらゆるファイルシステムのパーティションを復元することができる。PhotoRecでは、たいていの種類のファイルを復元することができ、ほとんどの画像形式やビデオ形式を復元できる。PhotoRecは既存のパーティションで使用できるほか、削除されたパーティションに対して、そのパーティションを復元せずにファイルだけを復元する目的で使うことも可能である。PhotoRecとTestDiskはどちらもDOS、Windows(9x、NT、2000、XP、2003)、Linux、FreeBSD、NetBSD、OpenBSD、Sun Solaris、Mac OS X上で実行することができ、それぞれの開発元によれば、ほとんどのUnixシステム上でコンパイルして実行できる。

復旧

私はまずKnoppix CDからTestDiskを実行して復旧に取りかかった。残念ながら既にパーティションテーブルを上書きしていたので、失ったパーティションについてハードディスクの網羅的検索を行うと、あまりに多くの結果が返されてきた。そこで、代わりにPhotoRecを使用してファイルを復元することにした。

PhotoRecは、削除済みとしてマークされたファイル(削除済みファイル)を検索し、そのファイルをディスクにコピーすることで復元を行う。これはつまり、ディスクイメージファイルから復元する場合を除いては、削除済みファイルが置かれているのと同じパーティションを復元先として選択してはならないということだ。もしこれを行うと、削除済みデータが完全に上書きされてしまう可能性がある。

もう1つ重要なことは、PhotoRecはかなり多くのファイルを復元する可能性があるということだ。そのため、ファイルの復元先のパーティションには、少なくとも復元対象のファイルを検索するパーティションと同じ程度の空き領域を確保しておくことをお勧めする。

実行できる復元方法には次のようなものがある。

  1. 別のハードディスクにファイルを復元する
  2. ネットワーク接続されたストレージドライブにファイルを復元する
  3. 同じハードディスク上の別のパーティションにファイルを復元する。
  4. ddrescueなどのツールを使用してハードディスクのイメージを作成し、パーティションを1つだけ使用してファイルを復元する

私の場合はパーティションを完全に消してしまっていたので、3番目の方法は使用できなかった。2番目の方法には、ネットワーク速度と待ち時間の問題が関係してくる。4番目の方法は、インシデント対応でハードディスクのイメージを証拠として使用する場合に検討すべき手法である。

私は1番目のオプションを選び、1つのコンピュータに2つのハードディスクを取り付けた。さらに、ファイルの復元に使用するハードディスクを2つの大きなパーティションに分けた。1つはオペレーティングシステム(CentOS 4)を格納するためのパーティションで、もう1つは復元したファイルを格納するためのパーティションである。このようなパーティション構成にするのは、PhotoRecが使用可能な記憶領域以上のファイルを書き込んでシステムを停止させるのを防ぐための予防措置である。この他に、TestDiskとPhotoRecを含んだKnoppixなどのライブCDからオペレーティングシステムを実行するという手もある。

PhotoRecとTestDiskは1つのアーカイブファイルとしてダウンロードできる。ファイル「photorec_static」と「testdisk_static」は実行可能ファイルであり、どちらもコマンドラインから実行できる。

このとき、復元先のパーティションだけをマウントすることが重要だ(私の場合は/var/recoveryにマウントした)。削除済みファイルが含まれているハードディスクをマウントしてはならない。パーティションをマウントしていなければ、その中のデータが上書きされる心配はない。

復元の手順

PhotoRecは、実行元のディレクトリにファイルを復元する。私の場合は、/var/recoveryディレクトリに移動してからphotorec_staticを実行した。これ以外の方法でPhotoRecを実行する場合は、実行可能ファイルを/usr/binディレクトリにコピーするか、プログラムの格納場所を完全パスで指定する必要がある。

PhotoRecのインタフェースはわかりやすい。最初の画面では、復元したいハードディスクを選択する。今回の例では、/dev/hdbを選択した。

Select a media (use Arrow keys, then press Enter):
Disk /dev/hda - 200 GB / 186 GiB (RO)
Disk /dev/hdb - 160 GB / 149 GiB (RO)
Disk /dev/hdc - 120 GB / 111 GiB (RO)
Disk /dev/hdd - 296 MB / 282 MiB (RO)

[Proceed ]  [  Quit  ]

次に、パーティションの種類を選択する。今回の例では、「Intel/PC partition」を選択した。

Disk /dev/hdb - 160 GB / 149 GiB (RO)

Please select the partition table type, press Enter when done.
[Intel  ]  Intel/PC partition
[Mac    ]  Apple partition map
[None   ]  Non partitioned media
[Sun    ]  Sun Solaris partition
[XBox   ]  XBox partition
[Return ]  Return to disk selection

Note: Do NOT select 'None' for media with only a single partition. It's very
rare for a drive to be 'Non-partitioned'.

次の画面には、選択したハードディスク上のパーティションの一覧が表示される。今回の例では、全ハードディスクを対象としてパーティションの復元を行いたいので、1番目のオプションを選択した。ただし、このオプションを選択する前に、[File Opt]メニューを選んで復元するファイルの種類を選択しておく必要がある。

Disk /dev/hdb - 160 GB / 149 GiB (RO)

     Partition                  Start        End    Size in sectors
   D empty                    0   0  1 19456 254 63  312576705 [Whole disk]
 1 * Linux LVM                0   0  2 19457  80 63  312581807

[ Search ]  [Options ]  [File Opt]  [  Quit  ]
                              Start file recovery

PhotoRecではさまざまな種類のファイルを復元できるが、私が復元したいのはWordドキュメント、AVIビデオファイル、JPG画像ファイル、MPEGビデオファイルだけなので、これらのオプションを選択した。

PhotoRec will try to locate the following files

[ ] dbf  DBase 3, prone to false positive
[X]      FAT subdirectory
[X] doc  Microsoft Office Document (doc/xls/ppt/vis/...)
[X] dsc  Nikon dsc
[X] eps  Encapsulated PostScript
[ ] exe  MS executable
[X]      EXT2/EXT3 Superblock
[X] gif  Graphic Interchange Format
[X] gz   gzip compressed data
[X] jpg  JPG picture
[X] mdb  Access Data Base
[X] mov  MOV video
[X] mp3  MP3 audio (MPEG ADTS, layer III, v1)
[X] mpg  Moving Picture Experts Group video
[X] mrw  Minolta Raw picture

[  Quit  ]
                              Return to main menu

ファイルの種類を選択したら、前の画面に戻ってハードディスクのスキャンを開始する。スキャンプロセスは自動化されている。私のマシンでは完了までに数時間かかった。PhotoRecの処理が完了すると、復元されたファイルが「recup_dir.x」という名前の複数のディレクトリに格納される(xにはディレクトリ番号が入る)。復元されたファイルには、元のファイルの名前は含まれていない。その代わりに、復元された順番を示す番号と、ファイルの種類を示す拡張子が割り当てられている。たとえば「f89.avi」は、89番目に復元されたファイルで、種類はAVIファイルである。