RHEL系のmdadmのraid-check を調べてみた

毎週日曜日にcron.weekly で実行されるraid-checkの中を真面目に調べてみた。

raid-checkは/etc/sysconfig/raid-check がENABLED=yes になっていると、全mdのsync_actionをidleからcheckに変更し、verifyをかけているようだ。

# echo check > /sys/block/md0/md/sync_action	

これが実行されるとraidのverifyが走る。

  • /sys/block/md0/md/sync_action がidleからcheckになる
  • /proc/mdstat がresync状態になる ("recovery" ではない: 後述)
# more /sys/block/md1/md/sync_action 
check
# more /proc/mdstat	
md1 : active raid1 sdb3[1] sda3[0]
     8385856 blocks [2/2] [UU]
     [===========>.........]  resync = 57.8% (4855360/8385856) finish=0.5min speed=104322K/sec

このときmdadm --detail /dev/md1 でみるとStateはclean, resyncingとなっていた。

また、このverifyはsync_actionをidleに変更すれば中止できるようだ。

# echo idle > /sys/block/md1/md/sync_action 
# more /sys/block/md1/md/sync_action 
idle
# more /proc/mdstat
md1 : active raid1 sdb3[1] sda3[0]
    8385856 blocks [2/2] [UU]


ちなみに本当にrebuildがかかっている時は /prod/mdstat はresyncではなくてrecoveryになっていて、sync_actionはrecoverになっている。

# cat /sys/block/md1/md/sync_action 
recover
# more /proc/mdstat
md1 : active raid1 sdb3[2] sda3[0]
     8385856 blocks [2/1] [U_]
     [=======>.............]  recovery = 36.9% (3100864/8385856) finish=0.8min speed=106926K/sec

そしてこの状態ではverify(echo check) しても弾かれる。

# echo check > /sys/block/md1/md/sync_action 
-bash: echo: write error: デバイスもしくはリソースがビジー状態です


定期的なverifyをやったほうがいいというのはこのナイスなページを参考に。

ただ、verify中は(echo idle で中断できるとはいえ) disk I/Oが発生するので、日曜日の早朝にI/O負荷が高くなるようなシステムだったら、cronの設定やscriptを修正して別の時間帯で動かすようにしたほうが良いかも。