Support forum for Nagios Core, Nagios Plugins, NCPA, NRPE, NSCA, NDOUtils and more. Engage with the community of users including those using the open source solutions.
for disk in $DISKS
do
HD_STAT=`sudo $SMART $ARGS $disk | sed -n '4,$ s/^[^:]*: //p'`
if [[ $HD_STAT != "PASSED" ]]; then
echo "$disk $HD_STAT"
EXIT=2
fi
done
for mpart in $MDISKS
do
if [[ $RAID_RECOVER ]]; then
STATUS="Raid WARNING - Checked $RAID_DEVICES arrays,$RAID_RECOVER"
ARRAY=`sudo $MDADM $MARGS $mpart |grep -i "State :" |awk '{print $1 $2 $3 $4}'`
if [[ $ARRAY != "State:clean" ]]; then
echo "$mpart $ARRAY"
fi
EXIT=1
elif [[ $RAID_RESYNC ]]; then
STATUS="Raid WARNING - Checked $RAID_DEVICES arrays,$RAID_RESYNC"
ARRAY=`sudo $MDADM $MARGS $mpart |grep -i "State :" |awk '{print $1 $2 $3 $4}'`
if [[ $ARRAY != "State:clean" ]]; then
echo "$mpart $ARRAY"
fi
EXIT=1
elif [[ $RAID_STATUS == "0" ]]; then
STATUS="Raid OK - Checked $RAID_DEVICES arrays."
ARRAY=`sudo $MDADM $MARGS $mpart |grep -i "State :" |awk '{print $1 $2 $3 $4}'`
if [[ $ARRAY != "State:clean" ]]; then
echo "$mpart $ARRAY"
fi
EXIT=0
else
STATUS="Raid CRITICAL - Checked $RAID_DEVICES arrays,$RAID_STATUS are DEGARDED"
ARRAY=`sudo $MDADM $MARGS $mpart |grep -i "State :" |awk '{print $1 $2 $3 $4}'`
if [[ $ARRAY != "State:clean" ]]; then
echo "$mpart $ARRAY"
fi
EXIT=2
fi
for disk in $DISKS
do
if [[ $RAID_RECOVER ]]; then
STATUS="Software Raid WARNING - Checked $RAID_DEVICES arrays, recovering : $RAID_RECOVER"
HD_STAT=`sudo $SMART $ARGS $disk | sed -n '4,$ s/^[^:]*: //p'`
if [[ $HD_STAT != "PASSED" ]]; then
echo "$disk $HD_STAT"
EXIT=2
fi
EXIT=1
elif [[ $RAID_RESYNC ]]; then
STATUS="Raid WARNING - Checked $RAID_DEVICES arrays,$RAID_RESYNC"
HD_STAT=`sudo $SMART $ARGS $disk | sed -n '4,$ s/^[^:]*: //p'`
if [[ $HD_STAT != "PASSED" ]]; then
echo "$disk $HD_STAT"
EXIT=2
fi
EXIT=1
elif [[ $RAID_STATUS == "0" ]]; then
STATUS="Raid OK - Checked $RAID_DEVICES arrays."
HD_STAT=`sudo $SMART $ARGS $disk | sed -n '4,$ s/^[^:]*: //p'`
if [[ $HD_STAT != "PASSED" ]]; then
echo "$disk $HD_STAT"
EXIT=2
fi
EXIT=0
else
STATUS="Raid CRITICAL - Checked $RAID_DEVICES arrays,$RAID_STATUS are DEGARDED"
EXIT=2
fi
done
echo $STATUS
for mpart in $MDISKS
do
ARRAY=`sudo $MDADM $MARGS $mpart |grep -i "State :" |awk '{print $1 $2 $3 $4}'`
if [[ $ARRAY != "State:clean" ]]; then
echo "$mpart $ARRAY"
fi
done
Its giving me the output:But want to clarify if the exit status are fine here?
Thanks for the response.I just wanted to cross verify.
I wanted the following for the OK Status:
Status OK - State Clean: md0 md1 md2 md3 md4 md5
Currently my script gives something like this which is looking odd in GUI
OK-6
/dev/md0 Clean
/dev/md1 Clean
/dev/md2 Clean
/dev/md3 Clean
/dev/md4 Clean
/dev/md5 Clean
Below the complete script.I managed to convert them into a single line using tr command,but not able to have displayed something like:
RAID OK - State Clean: md0 md1 md2 md3 md4 md5
Current Output of the below script:
For OK STATUS:
OK - 6
md0md1md2md3md4md5
For OTHERs,this is fine but like to have space between "md0State:clean,degraded" to be liked to changed as "md0 State:clean,degraded"
WARNING - Checked 6 arrays,resync=PENDING
md0State:clean,degraded
md2State:clean,degraded
md3State:clean,degraded
md4State:clean,degraded
md5State:clean,degraded
#!/bin/bash
# Get count of raid arrays
RAID_DEVICES=`grep ^md -c /proc/mdstat`
# Get count of degraded arrays
RAID_STATUS=`grep "\[.*_.*\]" /proc/mdstat -c`
#echo "$RAID_DEVICES"
#Get count of Physical Disks
for disk in $DISKS
do
if [[ $RAID_RECOVER ]]; then
STATUS=" WARNING - $RAID_DEVICES ,recovering : $RAID_RECOVER"
HD_STAT=`sudo $SMART $ARGS $disk | sed -n '4,$ s/^[^:]*: //p'`
if [[ $HD_STAT != "PASSED" ]]; then
echo "$disk $HD_STAT"
EXIT=2
fi
EXIT=1
elif [[ $RAID_RESYNC ]]; then
STATUS=" WARNING - $RAID_DEVICES,$RAID_RESYNC"
HD_STAT=`sudo $SMART $ARGS $disk | sed -n '4,$ s/^[^:]*: //p'`
if [[ $HD_STAT != "PASSED" ]]; then
echo "$disk $HD_STAT"
EXIT=2
fi
EXIT=1
elif [[ $RAID_STATUS == "0" ]]; then
STATUS=" OK - $RAID_DEVICES"
HD_STAT=`sudo $SMART $ARGS $disk | sed -n '4,$ s/^[^:]*: //p'`
if [[ $HD_STAT != "PASSED" ]]; then
echo "$disk $HD_STAT"
fi
EXIT=0
else
STATUS=" CRITICAL - Checked $RAID_DEVICES arrays,$RAID_STATUS are DEGARDED"
EXIT=2
fi
done
echo $STATUS
for mpart in $MDISKS
do
ARRAY=`sudo $MDADM $MARGS $mpart |grep -i "State :" |awk '{print $1 $2 $3 $4}'`
if [[ $ARRAY == "State:clean" ]]; then
echo $mpart | cut -c6-8 |tr -d '\n'
elif [[ $ARRAY != "State:clean" ]]; then
echo $mpart | cut -c6-8 |tr -d '\n'
echo $ARRAY
fi
done
A question here,
If the physical drives are good but the arrays are bad then wil the above script take care of that scenario meaning Will it produce State Clean ?
Should I consider having Exit status for the second loop as well?Can you please check the second loop and Can u suggest appropriate one's?
I added a EXIT=1 if the $ARRAY != "State:clean to be on safer side
the modified second loop:
for mpart in $MDISKS
do
ARRAY=`sudo $MDADM $MARGS $mpart |grep -i "State :" |awk '{print $1 $2 $3 $4}'`
if [[ $ARRAY == "State:clean" ]]; then
echo $mpart | cut -c6-8 |tr -d '\n'|sed 's/\(.\{3\}\)/\1 /g'
EXIT=0
elif [[ $ARRAY != "State:clean" ]]; then
echo $mpart | cut -c6-8 |tr -d '\n'
echo $ARRAY
EXIT=1
fi