RAID5トラブル 2006/2/25

md0がまともに読めなくなった。
リブートしようにもshutdownが止まる。init 6で行けるとこまで行ってハードウェアリセット。
リブート後にresyncが始まり、その後しばらく動いてたが、また同じ現象。
どうもsdaが怪しいので本格調査。
1回目
ログとり損ねた。read errorだったと思う。要点だけメモった。雰囲気は2回目と同じ。
dev sda, sector 163415151
2回目
ata1: command 0x25 timeout, stat 0xd0 host_stat 0x61
scsi0: ERROR on channel 0, id 0, lun 0, CDB: Read (10) 00 1c bb 39 a7 00 00 18 00
Current sda: sense key Medium Error
Additional sense: Unrecovered read error - auto reallocate failed
end_request: I/O error, dev sda, sector 482032039
ATA: abnormal status 0xD0 on port 0xF085C087
ATA: abnormal status 0xD0 on port 0xF085C087
ATA: abnormal status 0xD0 on port 0xF085C087
resyncが固まる
Personalities : [raid5]
md0 : active raid5 sdd1[3] sdc1[2] sdb1[1] sda1[0]
732587712 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
[=>...................] resync = 9.5% (23309568/244195904) finish=9369.2min speed=392K/sec
unused devices: <none>
Personalities : [raid5]
md0 : active raid5 sdd1[3] sdc1[2] sdb1[1] sda1[0]
732587712 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
[=>...................] resync = 9.5% (23309568/244195904) finish=9811.1min speed=375K/sec
unused devices: <none>
... ずっとこのまま
エラーが出てるのは全部sdaなのでアレイから外す
# mdadm /dev/md0 --set-faulty /dev/sda1
degradedだが順調にresync完了
$ cat /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[3] sdc1[2] sdb1[1]
732587712 blocks level 5, 64k chunk, algorithm 2 [4/3] [_UUU]
unused devices: <none>
sdaをチェック
# badblocks -v -o ~nickle/afio/sda1_badblocks.txt /dev/sda1
... 6時間近くかかった
[nickle@itefu ~]% ls -l ~nickle/afio/sda1_badblocks.txt
-rw-r--r-- 1 root root 0 2006-02-26 05:00 /home/nickle/afio/sda1_badblocks.txt
問題なさそうなので再構築
# mdadm /dev/md0 -a /dev/sda1
またエラー…
ata1: command 0x35 timeout, stat 0xd8 host_stat 0x61
scsi0: ERROR on channel 0, id 0, lun 0, CDB: Write (10) 00 00 00 30 3f 00 01 00 00
Current sda: sense key Medium Error
Additional sense: Write error - auto reallocation failed
end_request: I/O error, dev sda, sector 12351
ATA: abnormal status 0xD8 on port 0xF085C087
ATA: abnormal status 0xD8 on port 0xF085C087
ATA: abnormal status 0xD8 on port 0xF085C087
raid5: Disk failure on sda1, disabling device. Operation continuing on 2 devices
再起動したらブート中に落ちた。このメッセージは手で書き写したので不正確かも
XFS mounting filesystem md0
ata1: command 0x35 timeout, stat 0xd8 host_stat 0x61
scsi0: ERROR on channel 0, id 0, lun 0, CDB: Write (10) 00 00 00 1a 3f 00 04 00 00
Current sda: sense key Medium Error
Additional sense: Write error - auto reallocation failed
end_request: I/O error, dev sda, sector 6719
ATA: abnormal status 0xD8 on port 0xF085C087
ATA: abnormal status 0xD8 on port 0xF085C087
ATA: abnormal status 0xD8 on port 0xF085C087
recovery modeで起動したら、すごく遅いがmd0のrecoveryが進んでいる様子。
ならset faultyできるかなと思って
# mdadm /dev/md0 -f /dev/sda1
成功。sda1が外れてrecoveryが快調に走り出した。
どうせこのrecoveryに意味はないので、
# mdadm --stop --scan
sync doneだそうな。なら最初からやるな(ぉ
で、リブートしたらdegraded arrayで正常動作
ならば、writeが鬼門?最初のエラーはreadのほうだったのになぁ。
非破壊書き込み検査やってみる
# badblocks -n -s -v /dev/sda1 | tee ~nickle/afio/sda1_badblocks_write.txt
Checking for bad blocks in non-destructive read-write mode
From block 0 to 244196001
Checking for bad blocks (non-destructive read-write test)
Testing with random pattern: 1536/ 244196001
お、固まった
# dmesg
ata1: command 0x25 timeout, stat 0xd0 host_stat 0x61
scsi0: ERROR on channel 0, id 0, lun 0, CDB: Read (10) 00 00 00 0f bf 00 00 80 00
Current sda: sense key Medium Error
Additional sense: Unrecovered read error - auto reallocate failed
end_request: I/O error, dev sda, sector 4031
ATA: abnormal status 0xD0 on port 0xF085C087
ATA: abnormal status 0xD0 on port 0xF085C087
ATA: abnormal status 0xD0 on port 0xF085C087
というわけで、writeが混ざるとread errorも出るらしい。ディスク交換決定。
と言いたいとこだが、雨降ってて足がないので他の原因もあたってみる。
まずはSATAケーブル交換。再度badblocks。
[nickle@itefu ~]% sudo badblocks -n -s -v /dev/sda1 | tee ~nickle/afio/sda1_badblocks_write.txt
Password:
Checking for bad blocks in non-destructive read-write mode
From block 0 to 244196001
Checking for bad blocks (non-destructive read-write test)
Testing with random pattern: 804608/ 244196001
Interrupt caught, cleaning up
順調に見えるが、進行速度が恐ろしく不安定。怪しい。
試しにsdbでもやってみたら、これも不安定。sdcとsddは安定している。(sdcはsddの半分くらいの速度しか出ていないけど)
それぞれ30秒回してどこまで進むかテスト
sda - 不安定
[nickle@itefu ~]% sudo badblocks -n -s -v /dev/sda1
Checking for bad blocks in non-destructive read-write mode
From block 0 to 244196001
Checking for bad blocks (non-destructive read-write test)
Testing with random pattern: 13696/ 244196001
Interrupt caught, cleaning up
sdb - 不安定
[nickle@itefu ~]% sudo badblocks -n -s -v /dev/sdb1
Checking for bad blocks in non-destructive read-write mode
From block 0 to 244196001
Checking for bad blocks (non-destructive read-write test)
Testing with random pattern: 17984/ 244196001
Interrupt caught, cleaning up
sdc - 安定して2500block/secくらい
[nickle@itefu ~]% sudo badblocks -n -s -v /dev/sdc1
Checking for bad blocks in non-destructive read-write mode
From block 0 to 244196001
Checking for bad blocks (non-destructive read-write test)
Testing with random pattern: 72960/ 244196001
Interrupt caught, cleaning up
sdd - 安定して4500block/secくらい
[nickle@itefu ~]% sudo badblocks -n -s -v /dev/sdd1
Checking for bad blocks in non-destructive read-write mode
From block 0 to 244196001
Checking for bad blocks (non-destructive read-write test)
Testing with random pattern: 180416/ 244196001
Interrupt caught, cleaning up
というわけで、sdaとsdbは瀕死と見るべき?
LinuxではSMART見れないので、Winマシンにつないで見てみた。
やはりReallocation多発らしい。交換決定。
sdcはReallocationは1セクタだけみたいだけど、CRC Errorが多いのが気になる。
sddはもちろんAll Green。まだ買って2ヶ月だし。
... というわけで3台買ってきた。sd[ab]は即交換。もう1台はsdc用。もう少し様子見て、壊れ次第交換。
どこぞのサイトの啓示どおり、badblocksから始める
[nickle@itefu ~]% sudo badblocks -w -s -v /dev/sda
Checking for bad blocks in read-write mode
From block 0 to 244198584
Testing with pattern 0xaa: done 584844
Reading and comparing: done 584
Testing with pattern 0x55: 27488704/ 244198584
[nickle@itefu ~]%
4パスあるみたいで、1パスの書き込みのみで1時間40分程度(約40MB/s)。読み込みは1時間20分程度(約50MB/s)
値を変えて複数回やらなくても、とりあえずセクタ不良はわかるよねってことで、1パス終了時点で打ち切り。
sdbはWindows側でWestern DigitalのLifeGuard Diagnosticsをかけた。
2台ともOKみたいので、1台ずつ取り替え
ディスク全体を1パーティションにしてtypeをraid autodetectに
# cfdisk /dev/sda
# mdadm /dev/md0 -a /dev/sda1
... recovery 4時間ちょっと
sdbにも同じことをする
# cfdisk /dev/sdb
# mdadm /dev/md0 -a /dev/sdb1
... というわけで無事復旧しました。sdcも近いうちに取り替えたほうがいいな
念のためDBとハッシュの比較
[nickle@itefu ~/storage]% fg
[1] + continued nice ./storage_verify.pl | tee verify.log
[nickle@itefu ~/storage]%
うん。OKっぽい