まずは、ddrescueの出力を示します。USB-HDD へ丸ごとコピーしました。
root@PartedMagic:/mnt_sdb1# ddrescue -dS /dev/sda sda.ddrescue-2010-11-20 ddrescue-2010-11-20.log Press Ctrl-C to interrupt Initial status (read from logfile) rescued: 0 B, errsize: 0 B, errors: 0 Current status rescued: 64022 MB, errsize: 268 kB, current rate: 0 B/s ipos: 55255 MB, errors: 91, average rate: 6813 kB/s opos: 55255 MB, time from last successful read: 2 s Finished root@PartedMagic:/mnt_sdb1#以下は、ddrescue のログです。見方はソースをほじくらないと正確には分かりませんが。
# Rescue Logfile. Created by GNU ddrescue version 1.13 # Command line: ddrescue -dS /dev/sda sda.ddrescue-2010-11-20 ddrescue-2010-11-20.log # current_pos current_status 0xCDD837C00 + # pos size status 0x00000000 0x33830200 + 0x33830200 0x00000200 - 0x33830400 0x00003C00 + 0x33834000 0x00004000 - 0x33838000 0x03FF8200 + 0x37830200 0x00000200 - 0x37830400 0x00003C00 + 0x37834000 0x00004000 - 0x37838000 0x27FE8200 + 0x5F820200 0x00000200 - 0x5F820400 0x00003C00 + 0x5F824000 0x00000200 - 0x5F824200 0x00000600 + 0x5F824800 0x00000200 - 0x5F824A00 0x00000600 + 0x5F825000 0x00000200 - 0x5F825200 0x00000600 + 0x5F825800 0x00000200 - 0x5F825A00 0x00000600 + 0x5F826000 0x00000200 - 0x5F826200 0x00000600 + 0x5F826800 0x00000200 - 0x5F826A00 0x00000600 + 0x5F827000 0x00000200 - 0x5F827200 0x00000600 + 0x5F827800 0x00000200 - 0x5F827A00 0x0000C600 + 0x5F834000 0x00000200 - 0x5F834200 0x00000600 + 0x5F834800 0x00000200 - 0x5F834A00 0x00000600 + 0x5F835000 0x00000200 - 0x5F835200 0x00000600 + 0x5F835800 0x00000200 - 0x5F835A00 0x00000600 + 0x5F836000 0x00000200 - 0x5F836200 0x00000600 + 0x5F836800 0x00000200 - 0x5F836A00 0x00000600 + 0x5F837000 0x00000200 - 0x5F837200 0x00000600 + 0x5F837800 0x00000200 - 0x5F837A00 0x9FFE8800 + 0xFF820200 0x00000200 - 0xFF820400 0x00003C00 + 0xFF824000 0x00004000 - 0xFF828000 0x0000C000 + 0xFF834000 0x00004000 - 0xFF838000 0xF9FE8200 + 0x1F9820200 0x00000200 - 0x1F9820400 0x00003C00 + 0x1F9824000 0x00004000 - 0x1F9828000 0x0000C000 + 0x1F9834000 0x00004000 - 0x1F9838000 0xFBFE8200 + 0x2F5820200 0x00000200 - 0x2F5820400 0x00003C00 + 0x2F5824000 0x00004000 - 0x2F5828000 0x0000C000 + 0x2F5834000 0x00004000 - 0x2F5838000 0x261FF8200 + 0x557830200 0x00000200 - 0x557830400 0x00003C00 + 0x557834000 0x00004000 - 0x557838000 0xDDFE8200 + 0x635820200 0x00000200 - 0x635820400 0x00003C00 + 0x635824000 0x00000200 - 0x635824200 0x00000600 + 0x635824800 0x00000200 - 0x635824A00 0x00000600 + 0x635825000 0x00000200 - 0x635825200 0x00000600 + 0x635825800 0x00000200 - 0x635825A00 0x00000600 + 0x635826000 0x00000200 - 0x635826200 0x00000600 + 0x635826800 0x00000200 - 0x635826A00 0x00000600 + 0x635827000 0x00000200 - 0x635827200 0x00000600 + 0x635827800 0x00000200 - 0x635827A00 0x0000C600 + 0x635834000 0x00000200 - 0x635834200 0x00000600 + 0x635834800 0x00000200 - 0x635834A00 0x00000600 + 0x635835000 0x00000200 - 0x635835200 0x00000600 + 0x635835800 0x00000200 - 0x635835A00 0x00000600 + 0x635836000 0x00000200 - 0x635836200 0x00000600 + 0x635836800 0x00000200 - 0x635836A00 0x00000600 + 0x635837000 0x00000200 - 0x635837200 0x00000600 + 0x635837800 0x00000200 - 0x635837A00 0x155FE8800 + 0x78B820200 0x00000200 - 0x78B820400 0x00003C00 + 0x78B824000 0x00000200 - 0x78B824200 0x00000600 + 0x78B824800 0x00000200 - 0x78B824A00 0x00000600 + 0x78B825000 0x00000200 - 0x78B825200 0x00000600 + 0x78B825800 0x00000200 - 0x78B825A00 0x00000600 + 0x78B826000 0x00000200 - 0x78B826200 0x00000600 + 0x78B826800 0x00000200 - 0x78B826A00 0x00000600 + 0x78B827000 0x00000200 - 0x78B827200 0x00000600 + 0x78B827800 0x00000200 - 0x78B827A00 0x0000C600 + 0x78B834000 0x00000200 - 0x78B834200 0x00000600 + 0x78B834800 0x00000200 - 0x78B834A00 0x00000600 + 0x78B835000 0x00000200 - 0x78B835200 0x00000600 + 0x78B835800 0x00000200 - 0x78B835A00 0x00000600 + 0x78B836000 0x00000200 - 0x78B836200 0x00000600 + 0x78B836800 0x00000200 - 0x78B836A00 0x00000600 + 0x78B837000 0x00000200 - 0x78B837200 0x00000600 + 0x78B837800 0x00000200 - 0x78B837A00 0x1E9FE8800 + 0x975820200 0x00000200 - 0x975820400 0x00003C00 + 0x975824000 0x00000200 - 0x975824200 0x00000600 + 0x975824800 0x00000200 - 0x975824A00 0x00000600 + 0x975825000 0x00000200 - 0x975825200 0x00000600 + 0x975825800 0x00000200 - 0x975825A00 0x00000600 + 0x975826000 0x00000200 - 0x975826200 0x00000600 + 0x975826800 0x00000200 - 0x975826A00 0x00000600 + 0x975827000 0x00000200 - 0x975827200 0x00000600 + 0x975827800 0x00000200 - 0x975827A00 0x0000C600 + 0x975834000 0x00000200 - 0x975834200 0x00000600 + 0x975834800 0x00000200 - 0x975834A00 0x00000600 + 0x975835000 0x00000200 - 0x975835200 0x00000600 + 0x975835800 0x00000200 - 0x975835A00 0x00000600 + 0x975836000 0x00000200 - 0x975836200 0x00000600 + 0x975836800 0x00000200 - 0x975836A00 0x00000600 + 0x975837000 0x00000200 - 0x975837200 0x00000600 + 0x975837800 0x00000200 - 0x975837A00 0x1D7FE8800 + 0xB4D820200 0x00000200 - 0xB4D820400 0x00003C00 + 0xB4D824000 0x00004000 - 0xB4D828000 0x0000C000 + 0xB4D834000 0x00004000 - 0xB4D838000 0x11BFF8200 + 0xC69830200 0x00000200 - 0xC69830400 0x00003C00 + 0xC69834000 0x00004000 - 0xC69838000 0x73FE8200 + 0xCDD820200 0x00000200 - 0xCDD820400 0x00003C00 + 0xCDD824000 0x00004000 - 0xCDD828000 0x0000C000 + 0xCDD834000 0x00004000 - 0xCDD838000 0x20A91E000 +このようにエラーのオンパレードです。
そして書き戻しのログです。
root@PartedMagic:/mnt_sdb1# dd if=sda.ddrescue-2010-11-20 bs=4096 of=/dev/sda oflag=direct,dsync 15630678+0 records in 15630678+0 records out 64023257088 bytes (64 GB) copied, 14007.1 s, 4.6 MB/s root@PartedMagic:/mnt_sdb1#書き戻しの際にはエラーは出ませんでした。
その後、Windows XP を起動して、chkdsk をやったのですが、まったく効果なしで虫食い状態でした。以上の試行から悟ったことは、、、恐ろしいことですが、書き込みではエラーが出ず、読み込みでエラーになるということです。つまり、しっかり保存したつもりが、実際にはデータ損失してしまう場合がある状態になってしまっている。ということです。
2010-12-01追記
もう一つ気がついたのでメモ。HDD の不良セクタとの違いにも注意する必要がありそうです。SSDの場合には、ウェアレベリングの負の作用なのか、不良部分の場所が揺れるので、何回 CHKDSK /R をやっても、不良セクタをファイルシステムから除外できないようです。
(もっとも、このあたりは SSD のベンダーにより制御が違うだろうと思いますが)
HDD の不良セクタなら、ファイルシステムの不良セクタリストに登録されて、そのセクタへアクセスしないようになります。
(これもファイルシステム次第でしょうが、ext2/3/4, ntfs はそのはず)
2012-09-02追記
SecureErase という操作のことを知り、死蔵していたこの記事の SSD にも適用してみたら、見かけ上かもしれませんが、不良部分が消えました!
SecureErase 実行前は、次のような状態でした。HDDSCAN の結果です。
そして、SecureErase 後がこちらです。
実験も兼ねて、この SSD を、ZFS の L2ARC 用として、再利用開始しました。
L2ARC というのはセカンドキャッシュであり、ZFS では全てのブロックがチェックサム確認されるので、もし壊れたキャッシュを読んだり、I/O エラーとなったとしても、その後の迂回処理で、ストレージプール (HDD 集合の管理単位) から読まれるはずです。なお、用心のため、この SSD を L2ARC として接続したのは、最悪は壊れてしまってもかまわないもの (CentOS や Fedora の ISO イメージ) が入っている領域です。