世の中には様々なデータ復旧用ツールがありますが、
それらはハードディスクからデータの読み込みが行えて、初めて機能するものです。
ここでよく問題になるのが、不良セクタの存在です。

ハードディスク内に不良セクタが存在すると、その箇所においてデータの読み出しに支障をきたします。
リードエラーが返ってくることもあれば、読みに行ったままフリーズしてしまうこともあります。
これらは物理障害なので、根本的には元通り読めるようにはなりません。

ただ多くの場合、必要なのはモノとしてのハードディスクではなく中のデータなので、
取れるデータは正常なハードディスクに取り出してしまい、
後は正常に読み書きできるクローンディスクを対象に、データの復旧作業を試みるのが筋です。

実行中 - ddrescue

ここで活躍するのが、「ddrescue」です。
「ddrescue」は、不良セクタのあるハードディスクに最適化された「dd」です。
最大の強みは、不良セクタがある前提で動くこと。
「dd」コマンドは、Unix系で用いられるデータコピー用プログラム。
データを直接やりとりできるのが特徴です。

「ddrescue」という名前ですが、「dd」とは別物です。
「ddrescue」は、読み込みが遅いブロックをスキップし、
正常な読み出しができる領域のコピーを優先します。
特に、読み込みが不安定なブロックほどデータ転送を後回しにするアルゴリズムになっています。
このことで、不良セクタのあるハードディスクからできるだけ多くのデータを回収しようとします。

やってることはディスクコピーなので、「ddrescue」を使用する際は、
不良セクタのあるハードディスクと同容量以上の正常なハードディスクを用意する必要があります

「ddrescue」の入手

「ddrescue」は、Unix用のプログラムです。
不良セクタのあるハードディスクからデータを抜き出すという用途から、
データ復旧用のLinuxライブCDには標準でインストールされていることが多いです。

ここでは例として、「UBCD」に同梱されている「Parted Magic」から「ddrescue」を起動します。
つまり、「ddrescue」の入手は、「UBCD」の入手と同義です。

ダウンロードページ Download UBCD
当サイト内解説 「Ultimate Boot CD」の使い方

また、「ddrescue」単体の入手先は以下の通り。

ソフトウェアページ Ddrescue - GNU Project
ダウンロードページ ddrescue

「ddrescue」の実行

「ddrescue」は、ターミナル上で動作するCUIのソフトウェアです。
従って、まずは「UBCD」から「Parted Magic」を起動して、ターミナルの入力が可能な状態にします

これは、他のLinuxライブCDでも同様です。
ただし、root権限で実行する必要があります
「Parted Magic」のターミナルはデフォルトでrootですが、
他の環境の場合は、root権限に変更してから「ddrescue」を実行してください。
さもないと、パーミッションエラーが出ます。

「ddrescue」の使い方は、単純です。
だからこそ、恐ろしくもあるのですが。

基本的に、以下の書式でディスクコピーが実行されます。

ddrescue -f (コピー元) (コピー先)

ddrescue -f /dev/sda /dev/sdb

あとは、「Enter」キーを押すだけで、確認もなくコピーが開始されます
コピー元とコピー先を間違えると、取り返しのつかないことになります。
細心の注意を払ってください。

コピー先ディスクのデータは上書きされるので、指定を誤るとデータを失います。
「Parted Magic」であれば、「File Manager」を使うなどして、
事前にディスクの内容を確認しておいてください。
また、関係ないハードディスクの接続は断っておいたほうが、不慮の事故を防げます。

ちなみに、物理ディスクにコピーする際は、「-f」オプションは必須です。
「-f」は、出力先に対して強制的に上書きするオプションです。
実体があるものに出力する際は「-f」が必要、という認識でいいと思います。※イメージファイルの新規作成時は不要。

ddrescue /dev/sda /dev/sdb

オプションを指定せずに実行すると、「--force」を指定しろと忠告が出ます。
なお、「-f」は「--force」の省略形です。
どちらを記述しても構いません。

不良セクタの再読み込み

他に有効かもしれないオプションとして、「-r」があります。
これは、読み込みできなかった不良セクタに対して再読み込みを試みるものです。
デフォルトでは、不良セクタの再読み込みを行いません。※1回は読み込もうとします。

ddrescue -f -r1 /dev/sda /dev/sdb

「-r」オプションは、リトライ回数とあわせて指定します
上の画像は、リトライ回数が1回の場合の例です。

リトライ回数に「-1」を指定すると、不良セクタを読み込めるまで無限に読み込みを繰り返します。
読めないものは読めませんが。

ddrescue -fr1 /dev/sda /dev/sdb

ちなみに、オプションが複数ある場合は、このように連続して記述することも可能です。
ただし、数字は最後に入力しなければなりません。

不良セクタの読み込みに関してですが、
リードエラーの出たセクタに対して再度リードコマンドを送ったところで、読めることはほとんどないです。
むしろ、セクタ代替処理が行われることすらあります。
従って、基本的にはデフォルトのまま「ddrescue」を実行し、
読み込めるデータのみコピー先ディスクへ転送してしまったほうがいいような気がします。

ただ、不良セクタの再読み込みは、読み込めるセクタをすべてコピーしてから最後に行われるので、
不良セクタの再読み込みを指定しても、コピー先ディスクのデータに対する悪影響はないです。
デメリットは、コピー元ディスクの負荷が高くなること。
あと、コピー先ディスクのデータは結局変わらないかもしれません。

実行中 - ddrescue

いざ「ddrescue」を実行すると、コピーが開始されるとともに、進捗状況が表示されます。
とにかく、作業が完了するまで待ちます。

もしコピーを中断したい場合は、「Ctrl」キー+「C」キーを押すと、プログラムが停止します。

完了 - ddrescue

コピー完了です。

不良セクタのあるハードディスクからデータをコピーした場合は、
コピー先ディスクのデータに論理障害があるのが普通なので、
以後はそちらの復旧作業に移ることになります。