SoftwareRAID(RAID1)の復旧手順

自分が管理しているサーバのRAIDに問題が起きたようで、/proc/mdstat の内容を確認すると、以下のように状態になっていました。

 md8 : active raid1 hda10[0](F) hdb10[1]
       50010240 blocks [2/1] [_U]

/dev/hda10が障害デバイスとなっているので、/dev/md8からいったん切り離す必要があります。

ということで、以下の手順で復旧作業を開始しました。

  1. /dev/md8からの切り離し
  2. fsckコマンドによるディスクチェック
  3. badblocksコマンドによる不良ブロックチェック
  4. /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