Bei einem Linux Soft-RAID (md-raid) kann es vorkommen, dass man mit einem Mail informiert wird, dass „cnt nicht 0 ist“:
Subject: Cron <root@server> /usr/sbin/raid-check WARNING: mismatch_cnt is not 0 on /dev/md127 |
Dies könnte ein Hinweis auf defekte Sektoren auf einer Disk sein.
So kann man die mismatch_cnt Abfragen:
cat /sys/block/md*/md/mismatch_cnt |
Steht bei einem der MD-Arrays nicht 0, kann man mit einem re-sync versuchen das Problem zu beheben:
echo 'repair' >/sys/block/md127/md/sync_action |
(Achtung, kann je nach grösse des RAIDs sehr lange dauern und sollte zu Randzeiten gemacht werden!)
Den Aktuellen Status des RAIDs kann man wie folgt abfragen:
cat /sys/block/md*/md/sync_action |
Den Vorgang des re-synchroniserens lässt man sich mit cat /proc/mdstat
anzeigen:
watch -n 0.1 cat /proc/mdstat |
Nach der re-synchronisation überprüfen:
echo 'check' >/sys/block/md127/md/sync_action |
Fürs Monitoring kann man dieses icinga/nagios Script benutzen:
#!/bin/bash WARN_LIMIT=$1 CRIT_LIMIT=$2 if [ -z $WARN_LIMIT ] || [ -z $CRIT_LIMIT ];then echo "Usage: check_linux_raid_mismatch WARNLIMIT CRITLIMIT" exit 3; else for file in /sys/block/md*/md/mismatch_cnt do DATA+=`cat $file` MD_NAME=`echo $file | awk 'BEGIN { FS = "/" } ; { print $4 }'` READ_DATA+="$MD_NAME=`cat $file` " PERF_DATA+="$MD_NAME=`cat $file` " done if [ $DATA -gt $CRIT_LIMIT ]; then echo "CRITICAL - software raid mismatch_cnts are greater than $CRIT_LIMIT ($READ_DATA) | $PERF_DATA" exit 2; elif [ $DATA -gt $WARN_LIMIT ]; then echo "WARNING - software raid mismatch_cnts are greater than $WARN_LIMIT ($READ_DATA) | $PERF_DATA" exit 1; elif [ $DATA -lt $WARN_LIMIT ]; then echo "OK - all software raid mismatch_cnts are smaller than $WARN_LIMIT ($READ_DATA) | $PERF_DATA" exit 0; elif [ $DATA -eq 0 ]; then echo "OK - all software raid mismatch_cnts are 0 ($READ_DATA) | $PERF_DATA" exit 0; else echo "UNKNOWN - software raid mismatch_cnts not found (DATA=$DATA / $READ_DATA) | $PERF_DATA" exit 3; fi fi |