#!/bin/bash # # This script reads it's configuration from /etc/sysconfig/raid-check # Please use that file to enable/disable this script or to set the # type of check you wish performed. [ -f /etc/sysconfig/raid-check ] || exit 0 . /etc/sysconfig/raid-check [ "$ENABLED" != "yes" ] && exit 0 case "$CHECK" in check) ;; repair) ;; *) exit 0;; esac dev_list="" for dev in `grep "^md.*: active" /proc/mdstat | cut -f 1 -d ' '`; do echo $SKIP_DEVS | grep -w $dev >/dev/null 2>&1 && continue if [ -f /sys/block/$dev/md/sync_action ]; then array_state=`cat /sys/block/$dev/md/array_state` sync_action=`cat /sys/block/$dev/md/sync_action` # Only perform the checks on idle, healthy arrays if [ "$array_state" = "clean" -a "$sync_action" = "idle" ]; then check="" echo $REPAIR_DEVS | grep -w $dev >/dev/null 2>&1 && \ check="repair" echo $CHECK_DEVS | grep -w $dev >/dev/null 2>&1 \ && check="check" [ -z "$check" ] && check=$CHECK echo "$check" > /sys/block/$dev/md/sync_action [ "$check" = "check" ] && dev_list="$dev_list $dev" fi fi done if [ -n "$dev_list" ]; then checking=1 while [ $checking -ne 0 ] do sleep 3 checking=0 for dev in $dev_list; do sync_action=`cat /sys/block/$dev/md/sync_action` if [ "$sync_action" != "idle" ]; then checking=1 fi done done for dev in $dev_list; do mismatch_cnt=`cat /sys/block/$dev/md/mismatch_cnt` if [ "$mismatch_cnt" -ne 0 ]; then echo "WARNING: mismatch_cnt is not 0 on /dev/$dev" fi done fi