gmirrorが壊れた話

FreeBSDの6.1-PRERELEASEが出た辺りからSATA回りの調子が悪いらしく、自分のところでも、SiI3112やSiI3114とHITACHIのDLA380あたりと相性問題があったようで、Windowsでは問題ないけど、FreeBSDで使ってると
FAILURE - WRITE_DMA48 status=51 error=4
ってのが出て落ちるという現象に悩まされた。

結局このドライブはgmirrorでミラーリングしている片方だったんだけど、こんな調子なので、マウントはせずにミラー自体は片肺で放置してた。

それを先日 FreeBSD-6.1-STABLE にしたら善くなってるのではないかと期待して、システムをアップグレードして再度ミラーリングに追加してみた。 まぁ結果としてはなおってなかったようで、一度は同期したんだけど自分が仕事に出掛けたあと kernel panic 起して、そのまま夜まで落ちてるという羽目になってしまった。 20日のサーバダウンはそれが原因。


帰ってきてからミラーに追加したドライブからgmirrorのメタデータを削除してもとに戻そうとしたんだけど、な・ぜ・か・その調子悪かったはずのドライブの方が整合性がとれていて、もともとの方がDIRTYという状態になっていた。

その状態で整合性の取れている方のメタデータを削除したので、gmirrorが死ぬ羽目に。


gmirrorに使用していたドライブは
gmirror clear ドライブ名
で、gmirror のメタデータの削除ができる。 メタデータを削除したあとは fstab をもともとの /dev/ad0s1a などに書き直して、/boot/loader.conf から gmirror_load="YES" をコメントアウトしとけば、再起動して正常にマウント出来るようになる。

その状態でfsckかけてファイルシステム正常に戻してから、gmirrorの再構築。

まぁドライブ買ってきたのが金曜日で、再構築終わったのがさっきだけど。


gmirror の構築方法メモかわりにもう一度書いとくと
・FreeBSDのインストールディスクで起動。
・Fixit で shell に入る
・chroot /dist
・mount_devfs devfs /dev
・gmirror load
・gmirror label -v -b split -s 2048 gm0 /dev/ad0[とか]
・gmirror insert gm0 ad1[とか]
・fstabの /dev/ad0s1[a-.]を/dev/mirror/gm0s1[a-.]に書き換え
・/boot/loader.conf に gmirror_load="YES" を追加
・再起動
ちなみに ad1 が SYNCHRONIZING とかでも再起動して全く問題ない。


ドライブが死んだり、バックアップとしてはずしたい場合は
gmirror forget ad1[はずしたいドライブ]


一度gmirrorに使用していたドライブはメタデータが残っているので
gmirror clear [ドライブ]
でメタデータを削除してから、gmirrorに再利用すること
メタデータが削除されたかどうかは
gmirror dump [ドライブ]
で確認

ドライブの追加は
gmirror insert gm0 [ドライブ]


現在の状態は
gmirror status
もしくは
gmirror list