CentOS-5.2 + DRBD-8.2.6 で運用していた DRBD の、片方の DISK が故障したのでそこから復旧したメモ。
故障時。その時 Primary だったほうの DISK が I/O error。DRBD が障害を検知して Secondary に切り替わり。
kernel: sd 5:0:0:0: SCSI error: return code = 0x00040000 kernel: end_request: I/O error, dev sde, sector 37336199 kernel: drbd1: Local WRITE failed sec=164368s size=4096 kernel: drbd1: got an _req_mod() errno of -5 kernel: drbd1: Local WRITE failed sec=149344328s size=4096 kernel: sde : READ CAPACITY failed. kernel: sde : status=0, message=00, host=4, driver=00 kernel: drbd1: disk( Failed -> Diskless ) kernel: drbd1: Notified peer that my disk is broken. kernel: drbd1: helper command: /sbin/drbdadm local-io-error kernel: sde : sense not available. kernel: sde: Write Protect is off kernel: sde: asking for cache data failed kernel: sde: assuming drive cache: write through kernel: drbd1: role( Primary -> Secondary ) kernel: drbd1: peer( Secondary -> Primary )
その状態で /proc/drbd を見ると、Diskless になってる。
# cat /proc/drbd version: 8.2.6 (api:88/proto:86-88) GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17 1: cs:Connected st:Secondary/Primary ds:Diskless/UpToDate C r--- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 oos:0
さて新しい DISK に差し替えて、どうすれば元通りになるか。
トラブルシューティングとエラーからの回復-ハードドライブの障害の場合 によれば
もし、内部メタデータを使用している場合は、 DRBDデバイスを新しいハードディスクにバインドするだけで十分です。
だそうなんだけど、先走ってメタデータ作っちゃった。
# drbdadm create-md all
まあ仕方ないので、attach (実際は新しいディスクに換えたほうを reboot) すると、同期が始まった。
# cat /proc/drbd version: 8.2.6 (api:88/proto:86-88) GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17 1: cs:SyncTarget st:Secondary/Primary ds:Inconsistent/UpToDate C r--- ns:0 nr:186218616 dw:186218260 dr:0 al:0 bm:11356 lo:90 pe:8457 ua:89 ap:0 oos:301442336 [======>.............] sync'ed: 38.2% (294377/476145)M finish: 1:06:40 speed: 75,332 (75,448) K/sec
あとは無事終わるのを祈るのみ。