Linux

check_md_raid

Description:

Check all active software raid arrays on a Linux server.

Current Version

Last Release Date

June 16, 2009

Compatible With


Project Files
Project Notes
Simple shell script that reads /proc/mdstat and creates some status according to that files content. Unlike other scripts found here this script does not need any root access to mdadm. Just start it, the script doesn't need any arguments.
Reviews (4) Add a Review
Fixed some deprecated commad
by damned, December 31, 2023

Hi, here's my version that works on my config, i changed some deprecated commands: #!/bin/bash # # Created by Sebastian Grewe, Jammicron Technology # # Get count of raid arrays RAID_DEVICES=$(grep ^md -c /proc/mdstat) # Get count of degraded arrays #RAID_STATUS=`grep "[.*_.*]" /proc/mdstat -c` RAID_STATUS=$(grep -E "[.*(=|>|.).*]" /proc/mdstat -c) # Is an array currently recovering, get percentage of recovery RAID_RECOVER=$(grep recovery /proc/mdstat | awk '{print $4}') RAID_RESYNC=$(grep resync /proc/mdstat | awk '{print $4}') RAID_CHECK=$(grep check /proc/mdstat | awk '{print $4}') # Check raid status # RAID recovers --> Warning if [ -n "${RAID_RECOVER}" ]; then #if [[ $RAID_RECOVER ]]; then STATUS="WARNING - Checked $RAID_DEVICES arrays, recovering : $RAID_RECOVER" EXIT=1 elif [ -n "${RAID_RESYNC}" ]; then STATUS="WARNING - Checked $RAID_DEVICES arrays, resync : $RAID_RESYNC" EXIT=1 elif [ -n "${RAID_CHECK}" ]; then STATUS="OK - Checked $RAID_DEVICES arrays, check : $RAID_CHECK" EXIT=0 # RAID ok elif [ -n "${RAID_STATUS}" = "0" ]; then STATUS="OK - Checked $RAID_DEVICES arrays." EXIT=0 # All else critical, better save than sorry else EXTEND_RAID_STATUS=$(grep -E "[.*(=|>|.|_).*]" /proc/mdstat | awk '{print $2}' | uniq -c | xargs echo) STATUS="WARNING- Checked $RAID_DEVICES arrays, $RAID_STATUS have failed check: $EXTEND_RAID_STATUS " EXIT=1 fi # Status and quit echo "$STATUS" exit $EXIT



Added OK For Check and %
by michael.luczkow, July 31, 2015

Hi, I added another status for state "check" which is OK (0), and dumps the % complete. ############ [root@stack2 bin]# ./check_md_raid OK - Checked 1 arrays, check : 0.4% ############ [root@stack2 bin]# more ./check_md_raid #!/bin/bash # # Created by Sebastian Grewe, Jammicron Technology # # Get count of raid arrays RAID_DEVICES=`grep ^md -c /proc/mdstat` # Get count of degraded arrays #RAID_STATUS=`grep "[.*_.*]" /proc/mdstat -c` RAID_STATUS=`egrep "[.*(=|>|.).*]" /proc/mdstat -c` # Is an array currently recovering, get percentage of recovery RAID_RECOVER=`grep recovery /proc/mdstat | awk '{print $4}'` RAID_RESYNC=`grep resync /proc/mdstat | awk '{print $4}'` RAID_CHECK=`grep check /proc/mdstat | awk '{print $4}'` # Check raid status # RAID recovers --> Warning if [[ $RAID_RECOVER ]]; then STATUS="WARNING - Checked $RAID_DEVICES arrays, recovering : $RAID_RECOVER" EXIT=1 elif [[ $RAID_RESYNC ]]; then STATUS="WARNING - Checked $RAID_DEVICES arrays, resync : $RAID_RESYNC" EXIT=1 elif [[ $RAID_CHECK ]]; then STATUS="OK - Checked $RAID_DEVICES arrays, check : $RAID_CHECK" EXIT=0 # RAID ok elif [[ $RAID_STATUS == "0" ]]; then STATUS="OK - Checked $RAID_DEVICES arrays." EXIT=0 # All else critical, better save than sorry else EXTEND_RAID_STATUS=`egrep "[.*(=|>|.|_).*]" /proc/mdstat | awk '{print $2}' | uniq -c | xargs echo` STATUS="WARNING- Checked $RAID_DEVICES arrays, $RAID_STATUS have failed check: $EXTEND_RAID_STATUS " EXIT=1 fi # Status and quit echo $STATUS exit $EXIT



check_md_raid
by ndarkduck, January 31, 2014

Yet I changed some lines, making this script more useful for our environment, from the last review. Next step would be to parse the raid status, but so far I got the messages listed below, so this is how far my script could go. Cheers! [======>..............] check = 34.7% (72921088/209711382) finish=6891.0min speed=330K/sec [========>............] check = 43.7% (91719680/209711382) finish=480.0min speed=4096K/sec #!/bin/bash # # Created by Sebastian Grewe, Jammicron Technology # # Get count of raid arrays RAID_DEVICES=`grep ^md -c /proc/mdstat` # Get count of degraded arrays #RAID_STATUS=`grep "[.*_.*]" /proc/mdstat -c` RAID_STATUS=`egrep "[.*(=|>|.).*]" /proc/mdstat -c` # Is an array currently recovering, get percentage of recovery RAID_RECOVER=`grep recovery /proc/mdstat | awk '{print $4}'` RAID_RESYNC=`grep resync /proc/mdstat | awk '{print $4}'` # Check raid status # RAID recovers --> Warning if [[ $RAID_RECOVER ]]; then STATUS="WARNING - Checked $RAID_DEVICES arrays, recovering : $RAID_RECOVER" EXIT=1 elif [[ $RAID_RESYNC ]]; then STATUS="WARNING - Checked $RAID_DEVICES arrays, resync : $RAID_RESYNC" EXIT=1 # RAID ok elif [[ $RAID_STATUS == "0" ]]; then STATUS="OK - Checked $RAID_DEVICES arrays." EXIT=0 # All else critical, better save than sorry else EXTEND_RAID_STATUS=`egrep "[.*(=|>|.|_).*]" /proc/mdstat | awk '{print $2}' | uniq -c | xargs echo` STATUS="WARNING- Checked $RAID_DEVICES arrays, $RAID_STATUS have failed check: $EXTEND_RAID_STATUS " EXIT=1 fi # Status and quit echo $STATUS exit $EXIT



small modification
by Luiso, February 28, 2011

#!/bin/bash # # Created by Sebastian Grewe, Jammicron Technology # # Get count of raid arrays RAID_DEVICES=`grep ^md -c /proc/mdstat` # Get count of degraded arrays RAID_STATUS=`grep "[.*_.*]" /proc/mdstat -c` # Is an array currently recovering, get percentage of recovery RAID_RECOVER=`grep recovery /proc/mdstat | awk '{print $4}'` RAID_RESYNC=`grep resync /proc/mdstat | awk '{print $4}'` # Check raid status # RAID recovers --> Warning if [[ $RAID_RECOVER ]]; then STATUS="WARNING - Checked $RAID_DEVICES arrays, recovering : $RAID_RECOVER" EXIT=1 elif [[ $RAID_RESYNC ]]; then STATUS="WARNING - Checked $RAID_DEVICES arrays, resync : $RAID_RESYNC" EXIT=1 # RAID ok elif [[ $RAID_STATUS == "0" ]]; then STATUS="OK - Checked $RAID_DEVICES arrays." EXIT=0 # All else critical, better save than sorry else STATUS="CRITICAL - Checked $RAID_DEVICES arrays, $RAID_STATUS have FAILED" EXIT=2 fi # Status and quit echo $STATUS exit $EXIT



Project Stats
Rating
4.5 (4)
Favorites
1
Views
183,212