DRBDで片方のDISKが飛んだ状態からの復帰

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

あとは無事終わるのを祈るのみ。