- Code: Select all
awk 'BEGIN{RS="\n\n"} $NF ~ /_/ {print $1}' /proc/mdstat
awk 'BEGIN{RS="\n\n"} $NF ~ /_/ {print $1}' /proc/mdstat#!/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
DISKS=`/sbin/blkid | grep sd | cut -c 1-8 | uniq`
MDISKS=`/sbin/blkid | grep /dev/md | cut -c 6-8 | uniq`
SMART=/usr/sbin/smartctl
ARGS="-H"
MARGS="--detail"
MDADM=/sbin/mdadm
RAID_RECOVER=`grep recovery /proc/mdstat | awk '{print $1}'`
RAID_RESYNC=`grep resync /proc/mdstat | awk '{print $1}'`
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 - State Clean:"
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 -n "$STATUS"
for mpart in $MDISKS
do
ARRAY=`sudo $MDADM $MARGS /dev/$mpart |grep -i "State :" |awk '{print $1 $2 $3 $4}'`
if [[ $ARRAY == "State:clean" ]]; then
echo "/dev/$mpart $ARRAY"
elif [[ $ARRAY != "State:clean" ]]; then
echo -n " $mpart"
echo $ARRAY
fi
done
echo
# quit
exit $EXIT
Users browsing this forum: No registered users and 2 guests