ファイルリカバリ

提供: ArchWiki
2014年9月2日 (火) 21:43時点におけるKusakata (トーク | 投稿記録)による版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

この記事では Arch Linux でデータをリカバリ・復活させる方法をまとめています。

特記事項

緒言

このページは基本的に教育目的で使われることを想定しています。貴重な掛け替えのないデータを偶発的に削除または破損してしまって以前にデータの復元をしたことがない場合、すぐにコンピュータの電源を切って (電源オフボタンを押し続けるかコンセントを抜いて下さい、システムのシャットダウン機能を使ってはいけません) プロの助けを求めましょう。下で説明している手順の意味を完全に理解しないまま中途半端に従うと、状況がますます悪化する可能性が大いにあります。確実にそうなると云っても過言ではありません。

故障したドライブ

データリカバリの方面では、物理ディスクをそのまま使うのではなくディスクのイメージを使って作業するのがベストです。一般的に、故障しているディスクは時間の経過と共に状態が悪化します。ディスクが故障したらまず出来る限り早く出来る限り多くのデータを救出して、それからディスクを破棄するのが目標となるのが当然です。ddrescuedd_rescue ユーティリティは、dd と違って、エラーからのリカバリを繰り返し試行してドライブを前から後ろに、そして後ろから前に読み取って、データのサルベージを試みます。これらのユーティリティはログファイルを残すため途中経過を見失うことなくリカバリを停止したり再開することができます。

Disk cloning を参照してください。

ddrescue などのユーティリティを使って作成したイメージファイルは物理デバイスと同じようにマウントすることができ安全に作業することが可能です。常にオリジナルイメージのコピーを作成して問題が生じた時にイメージを元に戻せるようにしておくと良いでしょう。

故障しているドライブの読み込みを良くさせる実証済みの方法としてドライブを低温下に置く方法があります。少しの間だけ冷凍庫につっこむことも効果がありますが、あまりにも急速にドライブを冷たいところから温かいところへ移動しないようにくれぐれも注意してください、結露が起こってしまうからです。復旧を行う PC にケーブルを接続したままドライブを冷凍庫に入れるのがよく効きます。

故障中のディスクでファイルシステムのチェックを行ってはいけません、大抵は問題を深刻化させることになるでしょう。読み取り専用でマウントしてください。

フラッシュメディアや小さなパーティションのバックアップ

(マウントされているかどうかを問わず) 'ライブ'パーティションで作業をするのに代わる方法として、問題のファイルシステムがあまり大きすぎず、イメージファイルを作るのに十分な HDD の空き容量があるなら、イメージを使って作業を行うというのがたびたび推奨されます。例えば、USB メモリや携帯音楽プレーヤー、携帯電話などのフラッシュメモリデバイスは大抵の場合そんなにサイズが大きくないためイメージにすることが可能です。

下に記載されているユーティリティの man ページを読んでイメージファイルを扱えるか確認してください。

イメージを作成するには、以下のように dd を使います:

# dd if=/dev/target_partition of=/home/user/partition.image

デジタルカメラでの作業

下のセクションで説明しているユーティリティをフラッシュメディアで使うには、問題のデバイスがブロックデバイスとして (/dev 以下に) マウントされている必要があります。その際 PTP (Picture Transfer Protocol) モードを使っているデジタルカメラは利用できません。PTP カメラは libgphoto や libptp によって透過的に扱われます。この、"透過的"は PTP デバイスをブロックデバイスにできないことを意味します。PTP モードに取って代わるモードとして、USB Mass Storage (UMS) モードがありますが、カメラによってはサポートされていないことがあります。カメラによってはメニューアイテムから2つのモードを切り替えることが可能です。カメラのユーザーマニュアルを参照してください。カメラが UMS モードをサポートしてない場合はブロックデバイスとしてアクセスすることができないため、フラッシュメディアリーダーを使ってカメラから物理的に取り外したストレージメディアを利用するしかありません。

Foremost

Foremost はファイルのヘッダやフッタ、内部データ構造に基づいてファイルを復旧させるコンソールプログラムです。この手法は一般的にデータカービングと呼ばれます。Foremost は (dd, Safeback, Encase などで生成された) ディスクイメージのファイル上で動作させることも直接ドライブで動かすことも可能です。ヘッダやフッタを設定ファイルで指定したりコマンドラインのスイッチを使って固有のファイルタイプを指定できます。これらの固有タイプは指定されたファイルフォーマットのデータ構造を考察することで、より信頼性のある高速なリカバリを可能にします。

Foremost の記事を参照してください。

Extundelete

Extundelete は ext3 や ext4 パーティションから削除されてしまったファイルを戻すために作られた、ターミナルで動かすユーティリティです。最近パーティションから削除されたファイルや相対パスや inode 情報によって指定したファイルを全てリカバリすることができます。Extundelete はパーティションのマウントが解除されているときしか動作しないので注意してください。リカバリされたファイルは RECOVERED_FILES/ という名前のフォルダ下にある作業ディレクトリに保存されます。

インストール

extundelete公式リポジトリからインストールできます。

使用方法

Linux Poison の記事から引用。

特定のパーティションからデータをリカバリするには、/dev/sdXN という形で (X は文字で N は数字)、パーティションのデバイス名を知る必要があります。ここの例では /dev/sda4 を使いますが、あなたのシステムではファイルシステムやデバイスの設定によって違う名前になります (例えば、MMC カードリーダーは /dev/mmcblkNpN という命名規則を使います)。よくわからない場合は、df を実行してください。現在マウントされているパーティションが表示されます。

データをリカバリするパーティションを決めたら、次を実行してください:

# extundelete /dev/sda4 --restore-file directory/file

サブディレクトリを指定する必要があり、パーティションの一番上からコマンドが実行されます。/home/SomeUserName/ のファイルをリカバリするには、次を実行 (/home がパーティション上にある場合):

# extundelete /dev/sda4 restore-file SomeUserName/SomeFile

素早く複数のファイルをリカバリするために、extundelete には --restore-files オプションもあります。

ディレクトリ全体をリカバリするには、次を実行:

# extundelete /dev/sda4 --restore-directory SomeUserName/SomeDirectory

上級者ならば、extundelete でブロックや inode を手動でリカバリするために、debugfs を使ってリカバリする inode を探して、それから次のコマンドを実行することができます:

# extundelete --restore-inode inode

inode は適当な inode に置き換えて下さい。空白を入れずに、カンマで区切ることでリカバリする inode を増やすことができます。

最後に、パーティション全体から削除されたファイル全てをリカバリするには、次を実行:

# extundelete /dev/sda4 --restore-all

Testdisk と PhotoRec

TestDisk と Photorec はどちらも GNU Public License (GPL) でライセンスされているオープンソースのデータリカバリユーティリティです。

TestDisk は主として、欠陥ソフトウェアや特定のタイプのウイルス、もしくはパーティションテーブルの偶発的な削除といったヒューマンエラーによって引き起こされた、パーティションの喪失を回復したり起動しなくなったディスクをもう一度起動できるようにするために作られました。

PhotoRec は写真・動画・文章などの消失してしまったファイルをハードディスクや CD-ROM からリカバリするために作られたファイル復元ソフトウェアです (ヒント: PhotographRecovery)。PhotoRec はファイルシステムは無視して素のデータを探し当てるので、再フォーマットされたり完全に破壊されたファイルシステムやパーティションテーブルでも動作します。

インストール

公式リポジトリtestdisk に TestDisk と PhotoRec が両方入っています。

photorec によってリカバリされたファイル

photorec ユーティリティはリカバリしたファイルを番号付きのディレクトリに (ほとんどのファイルにおいて) ランダムな名前で保存します。例: ./recup_dir.1/f872690288.jpg, ./recup_dir.1/f864563104_wmclockmon-0.1.0.tar.gz

参照

e2fsck

e2fsck は Arch のベースインストールに含まれている ext2/ext3 ファイルシステムのチェッカーです。e2fsck は正しいスーパーブロックを頼りにします。スーパーブロックにはファイルシステム全体のパラメータが記述されています。このデータはとても重要なため、パーティションの至るところに複数のスーパーブロックのコピーが分散して置かれます。-b オプションを使うことで、e2fsck は別のスーパーブロックを使うことが可能です。メインであり、最初のスーパーブロックが破損したときにこれは有用です。

スーパーブロックがどこにあるのか確認するには、対象の、マウントされていないパーティションで dumpe2fs -h を実行してください。ファイルシステムが作成されたときに設定された、ファイルシステムのブロックサイズによってスーパーブロックには異なる間隔があけられています。

スーパーブロックの場所を求める別の方法として mke2fs の -n オプションを使う方法もあります。絶対に -n フラグを使うようにして下さい、mke2fs の man ページによると、"実際にはファイルシステムを作らないが、あたかもファイルシステムを作成しているかのように表示を出す。このオプションは、ある特定のファイルシステムのバックアップスーパーブロックの位置を知るのに利用できる。ただしこの際 mke2fs にはそのファイルシステムを作ったときと同じパラメータを渡す必要がある (もちろん -n は加えてよい!)"。

インストール

e2fsckdumpe2fs はどちらも e2fsprogs として Arch のベースインストールに含まれています。

参照

raw ディスクイメージを使う

ddrescue や dd を使ってドライブをバックアップした後、物理ドライブとしてイメージをマウントする必要がある場合、このセクションを見て下さい。

ディスク全体をマウント

To mount a complete disk image to the next free loop device, use the losetup command:

# losetup -f -P /path/to/image
ヒント:
  • The -f flag mounts the image to the next available loop device.
  • The -P flag creates additional devices for every partition.

パーティションをマウント

ディスクイメージ全体のパーティションをマウントできるようにしたい場合、上の手順に従って下さい。

ディスクイメージ全体をマウントしたら、通常の mount コマンドをループデバイスで使用します:

# mount /dev/loop0p1 /mnt/example

このコマンドは loop0 のイメージの最初のパーティションをマウントポイント /mnt/example のフォルダにマウントします。マウントポイントのディレクトリは必ず存在している必要があります。

ディスクのジオメトリ情報を取得

ディスクイメージ全体をループバックデバイスとしてマウントしたら、デバイスのレイアウトを検査することができます。

QEMU を使って NTFS を修復する

一つ以上 NTFS パーティションを含んでいるディスクイメージでは Linux 用の良い NTFS ファイルシステムチェッカーが存在しないため Windows で chkdsk をする必要があります。QEMU は raw ディスクイメージを仮想マシンの中で本当のハードディスクのように使うことができます:

# qemu -hda /path/to/primary.img -hdb /path/to/DamagedDisk.img

Windows が primary.img にインストールされている場合、それを使って /path/to/DamagedDisk.img のパーティションをチェックできるでしょう。

テキストファイルのリカバリ

It's possible to find deleted plain text on a hard drive with a few commands. A preferably unique string from the file you are trying to recover is needed.

First, use the strings command to dump all the text from a partition:

# strings /dev/sdXN > BigStringsFile

Then use grep to filter through the content of BigStringsFile:

$ grep -i -200 "Unique string in text file" BigStringsFile > GrepOutputFile
ノート: The -200 option tells grep to print 200 lines of context from before and after each match of the string. You may need to adjust this if the text you are looking for is very long.

Hopefully, the correct deleted data is now in GrepOutputFile.

参照