(2022/06/19 画像リンク切れにつき削除) 以前ノートPCのHDDをddコマンドでイメージ化したことがあったが、途中で不良セクタに当たったためオプション conv=sync,noerrorでエラー箇所をNULパディングしてイメージ化していた。
最近ふと思いついてGNU ddrescueで再度イメージ化してみた。ddrescueはその名の通り、データレスキュー時のイメージ化に特化したddコマンドで、読み取り不良のHDDなどからできる限りデータをレスキューするというもの。
インストール
gddrescueという名前で配信されている(実は作者は違うが同じddrescueというのがあり、GNU版が後発なためgddrescueというパッケージ名になっているっぽい?)。
$ sudo apt-get install gddrescue
使い方
ここではイメージ化したいHDDを/dev/sdbとし、アンマウント済であることを想定している。
まず読み取りできない範囲は無視してディスク全体をイメージ化する。エラー部分はログに吐き出すようにする。
$ sudo ddrescue -f -n /dev/sdb hdd.img ddrescue.log
errorsの値が1以上になっていたらログファイルを使いエラーになった部分に対して直接読めるか最大3回アタックしてみる。読めた部分が自動的に補完される。
$ sudo ddrescue -d -f -r3 /dev/sdb hdd.img ddrescue.log
それでもerrorsが0にならない時はどう足掻いても無理な予感なので重要なデータが壊れていないことを祈るしかない。
エラー部分を視覚化する
ddrescueviewというGUIソフトでどのあたりにエラーがあったのかなどを見ることができる。
$ sudo apt-get install ddrescueview $ ddrescueview ddrescue.log
そういえば
設定は特にいじってないのだが、ddコマンドよりも早かった。1回あたりの読み込みサイズが違うから?(ddコマンドはbsパラメータ等で指定する必要がある)