SoftwareRAID(RAID1)の復旧手順
自分が管理しているサーバのRAIDに問題が起きたようで、/proc/mdstat の内容を確認すると、以下のように状態になっていました。
md8 : active raid1 hda10[0](F) hdb10[1] 50010240 blocks [2/1] [_U]
/dev/hda10が障害デバイスとなっているので、/dev/md8からいったん切り離す必要があります。
ということで、以下の手順で復旧作業を開始しました。
- /dev/md8からの切り離し
fsckコマンドによるディスクチェック- badblocksコマンドによる不良ブロックチェック
- /dev/md8への追加
実際のコマンドは以下の通り。
# raidhotremove /dev/md8 /dev/hda10
(訂正)fsckコマンドを実行しても意味がありませんので、実行しなくてもかまいません。
# fsck -V -t ext3 /dev/hda10 fsck 1.32 (09-Nov-2002) [/sbin/fsck.ext3 (1) -- /dev/hda10] fsck.ext3 /dev/hda10 e2fsck 1.32 (09-Nov-2002) /dev/hda10: recovering journal /dev/hda10: clean, 1701/6258688 files, 1409878/12502560 blocks
不良ブロックがないかチェックします。(もし不良ブロックが検出されたならば、HDD交換をすべきです)
# badblocks -vs -o hda10.badblocks /dev/hda10
# raidhotadd /dev/md8 /dev/hda10
最近だと、raidhotremoveやraidhotaddコマンドでなく、mdadmコマンドを使うことの方が多いのかな。(今回のサーバには、mdadmがインストールされていなかったので、mdadmコマンドを使っていません。)
おまけ
/proc/sys/dev/raid/speed_limit_max の中身を確認すると、リビルドの速度が分かります。
# cat /proc/sys/dev/raid/speed_limit_max 10000
デフォルトだと遅いので、サイズを増やします。
# echo 100000 > /proc/sys/dev/raid/speed_limit_max
サーバを再起動しても設定内容を適用したいのであれば、/etc/sysctl.confに記述して、sysctl -p /etc/sysctl.confを実行かな。
おまけのおまけ
# watch -n 3 cat /proc/mdstat
なんてコマンドがあるのね。今までこんな感じでコマンド打ってたけど、こりゃ楽だわ。
# while :; do cat /proc/mdstat; sleep 3; clear; done