「Input/Output Error」が表示されたら
技術職であれば、遅かれ早かれ「Input/output error」という無機質な文字列に直面することになるでしょう。この状態になると、cpコマンドによる手動コピーやマウスでのドラッグ&ドロップはすべて無意味になります。無理に読み取ろうとすればするほど、磁気ヘッドが損傷箇所を激しくスキャンし、ハードディスクの状態を「少し壊れている」から「完全に修復不能」へと、わずか数分で悪化させてしまいます。
私はかつて、ツールの選択を誤ったために、古いサーバーからわずか20GBのデータを救出するのに6時間も費やしたことがあります。最大の失敗は、通常のddコマンドを使用したことでした。PCはフリーズを繰り返し、データはエラー領域に留まったままでした。その経験から、このような難局を乗り切るために生まれたツールこそが、GNU ddrescueであると確信しました。
なぜ通常のコピーコマンドは失敗するのか?
OSは通常、エラー領域を諦める前に何度も繰り返し読み取りを試みます。これが、非常にストレスの溜まるシステムフリーズの原因となります。
- cpコマンド: 最初のエラーに遭遇した時点で停止します。断片的なファイルしか取得できず、ほとんど役に立ちません。
- ddコマンド:
conv=noerrorフラグを付けても、順次読み取りを行います。例えば1GBほどの連続したバッドセクタに遭遇すると、ddはそこを通り過ぎるだけで丸一日かかることもあります。その間に、磁気ヘッドはその先にある正常なデータ領域に到達する前に完全に寿命を迎えてしまうかもしれません。
ddとddrescueの比較:アルゴリズムの違い
以下の表は、プロがなぜddrescueを選ぶのかをまとめたものです。
| 機能 | 従来のddコマンド | GNU ddrescue |
|---|---|---|
| 読み取り戦略 | 先頭から最後までの順次読み取り | 正常な領域を先に読み、後でエラーを処理 |
| マップファイル (ログ) | 非対応 | 進捗を保存し、いつでも再開可能 |
| エラー処理 | ゴミデータで上書き、または停止 | ヘッド保護のためスマートにスキップ |
| 速度 | バッドセクタ遭遇時に非常に遅い | 故障ディスクに最適化されている |
安全な3段階のデータ救出プロセス
核心となる原則:故障したハードディスク上で直接操作をしないこと。まずはddrescueを使用して、正常なハードディスクへイメージ(image)を作成します。その後、そのイメージファイルからデータを抽出します。
ステップ1:ツールのインストール
gddrescueパッケージをインストールする必要があります。同名の別のツールと混同しないよう、パッケージ名の先頭に「g」が付いていることに注意してください。
# Ubuntu/Debian系
sudo apt update && sudo apt install gddrescue
# CentOS/RHEL/AlmaLinux系
sudo yum install ddrescue
ステップ2:ハードディスクの識別
lsblkコマンドでデバイス名を確認します。ここでは、故障したディスクが/dev/sdbで、イメージファイルを/mnt/backupに保存すると仮定します。故障ディスクのパーティションはマウントしないでください。これにより、OSが追加のデータを書き込んで状況を悪化させるのを防ぎます。
ステップ3:本格的な救出作業の実行
これは、ほとんどのケースで95%以上のデータを救出するために私が普段適用しているプロセスです。
フェーズ1:高速スキャン(Scraping)
初回は、ddrescueに対して最も正常なデータ領域だけを素早く取得するように指示します。
sudo ddrescue -f -n /dev/sdb /mnt/backup/disk_image.img /mnt/backup/recovery.log
-n: エラー領域の再試行を行わず、第1フェーズを早期に完了させます。recovery.log: これはマップファイルです。途中で停電が発生しても、コマンドを再実行するだけで、中断した箇所から再開できます。
フェーズ2:軽微なエラー領域の回収(Retrying)
大部分のデータが安全に確保できたら、次は困難なセクタに立ち向かう番です。
sudo ddrescue -f -d -r1 /dev/sdb /mnt/backup/disk_image.img /mnt/backup/recovery.log
-d: ダイレクトディスクアクセス(Direct Disc Access)。OSのキャッシュをバイパスして精度を高めます。-r1: 各エラー領域を正確に1回ずつ再試行します。データが非常に貴重な場合は、-r3などに増やすことも可能です。
フェーズ3:マウントと確認
プロセスが完了すると、disk_image.imgファイルが作成されます。これをマウントしてファイルを取り出してみましょう。
sudo mount -o loop,ro /mnt/backup/disk_image.img /mnt/media/recovery_point
データを永久に失わないための実戦経験
落下したノートPCの救出作業で、ハードディスクから異音がし始めていたことがありました。その時の私の失敗は、マップファイルの使用を忘れたことでした。進捗が70%に達したとき、ケーブルの緩みで突然電源が落ちました。最初からやり直さなければなりませんでしたが、その時には磁気ヘッドが過熱し、完全に故障してしまいました。データは二度と取り戻せなくなりました。
そのため、常にマップファイルを使用してください。それは単なる記録ではなく、あなたの作業時間を守る保険です。ハードディスクが熱すぎる場合は、扇風機などで直接風を当ててください。高温はバッドセクタを急速に広げます。ネット上の裏技にあるような、ハードディスクを冷凍庫に入れることは絶対にしないでください。結露が回路を一瞬で破壊します。
データ復旧は忍耐の戦いです。ボロボロのハードディスクから99.9%のデータを救い出すために、48時間連続でマシンを動かし続けることもあります。しかし、お客様の家族写真のフォルダが無傷で現れたとき、すべての苦労が報われるのです。

