mismatch_cnt is not 0 on /dev/md*

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

Quellen

Published by

Steven Varco

Steven ist ein Redhat RHCE-Zertifizierter Linux-Crack und ist seit über 18 Jahren sowohl beruflich wie auch privat auf Linux spezialisiert. In seinem Keller steht ein Server Rack mit diversen ESX und Linux Servern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.