HDD から変な音が聞こえてきて、ファイルをオープンしようとしたら、ファイルが壊れていますとメッセージが表示された。HDD の故障は突然訪れます。普段からバックアップを取っていれば復旧出来るかもしれませんが、重要なデータだけは取っているけど、ディスク全体となると個人でバックアップするのは結構しんどいです。
ddrescue コマンドは、ディスクイメージのコピーを行うコマンドですが、HDDから正常に読み込めるデータを先に取り出し、不良セクタや読み込みが遅い領域のセクタを後回しにしてくれるため、ディスクの故障を最小限に抑えつつダータを吸い出してくれるのです。dd コマンドもディスクイメージをコピーしてくれますが、先頭から順番に読み込んでいくためエラーのセクタが先頭の方にあると途中で読み込みが止まってしまい、ディスクをさらに壊してしまい、ドライブをダメにしてしまう恐れがあります。
ddrescue のインストールは以下のコマンドで行います。
CentOS の場合 $ sudo yum -y install ddrescue Ubuntu の場合 $ sudo apt-get -y install gddrescue
イメージのバックアップは以下のコマンドで行います。
$ sudo ddrescue /dev/sdc sdc1.img GNU ddrescue 1.17 Press Ctrl-C to interrupt rescued: 448462 kB, errsize: 0 B, current rate: 22806 kB/s ipos: 448462 kB, errors: 0, average rate: 28028 kB/s opos: 448462 kB, time since last successful read: 0 s Copying non-tried blocks... Finished
fsck コマンドで、吸いだしたディスクイメージのファイルシステムをチェックします。
$ sudo fsck.exfat sdc1.img exfatfsck 1.0.1 Checking file system on sdc1.img. File system version 1.0 Sector size 512 bytes Cluster size 32 KB Volume size 3911 MB Used space 736 KB Available space 3910 MB Totally 0 directories and 0 files. File system checking finished. No errors found.
mount を行い、中にデータが残っているか確認します。
$ sudo mount -o loop sdc1.img /media/taro/ $ ls /media/taro/ file1.txt file2.txt
umount を行い新しい HDD にデータを復旧させます。
$ sudo umount /media/taro/ $ sudo ddrescue -f sdc1.img /dev/sdc1
* 新しいHDD(/dev/sdc1)は、事前に同じパーティションサイズに設定しておく必要があります。