2010年11月30日火曜日

ThinkPad X300 のSSDで不良セクタを発見

ThinkPad X300 の内臓SSD(SAMSUNG SLCタイプ MCCOE64G8MPP-0VA 約2年使用)に不良セクタが出来てしまい。参考にデータを、ThinkPad Club の方にレポートしたのですが、ここでは、Linux (Parted MagicのブータブルCDを利用) で ddrescue と dd を使って、書き戻してみた結果を書いておきます。 書き戻しにより、代替セクタが利用されて、もうしばらく使えないかなと思ったのですが・・・

まずは、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 イメージ) が入っている領域です。
人気ブログランキングへ にほんブログ村 IT技術ブログへ