#!/bin/bash
#########################################################################
# Script for check HDD & RAID state #
# Created by Pavol Macko - DoIT #
# ver 0.4 #
#########################################################################
#---------------------------- VARIABLES --------------------------------#
REP=/tmp/hdd.rep
WEB=/var/www/hdd
TMP=/tmp/hdd.tmp
LOG=/tmp/hdd.log
test -d $WEB || mkdir -p $WEB
test -f $TMP && rm -rf $TMP
test -f $LOG && rm -rf $LOG
#----------------------------- WEB-START -------------------------------#
webstart(){
cat > $WEB/hdd.html <<\EOF
SITE HDD
Disk overview on server [SITE]
Number of disks: [NUM] | Last update: DATE
| HDD-Model |
Serial |
Size |
Path |
Temp |
Fail |
EOF
}
#------------------------------ WEB-STOP -------------------------------#
webend(){
cat >> $WEB/hdd.html <<\EOF
EOF
NUM=$(cat $REP | egrep -v "SERIAL|---" | wc -l)
SITE=$(hostname -s | sed 's/-/ /g' | awk '{print $1}')
sed -i "s/NUM/$NUM/g" $WEB/hdd.html
sed -i "s/DATE/`date`/g" $WEB/hdd.html
sed -i "s/SITE/$SITE/g" $WEB/hdd.html
}
#--------------------------- CHECK HDD INFO ----------------------------#
checkhdd(){
echo -e "- \e[1;32mExtracting\e[0m HDD info from PVE hypervisor"
echo "--------------------------------------" > /tmp/hdd.rac
echo -e "\e[1;37mHW-RAID-CONTROLER\e[0m" >> /tmp/hdd.rac
echo "--------------------------------------" >> /tmp/hdd.rac
CON=$(megacli -ShowSummary -aALL | grep ProductName | awk '{$1=$2="";print $0}' | sed 's/ //g')
echo -e "\e[1;36m$CON\e[0m" >>/tmp/hdd.rac
echo "------ ---------- --------" > /tmp/hdd.rai
echo -e "\e[1;37mTYPE SIZE STATUS\e[0m" >> /tmp/hdd.rai
echo "------ ---------- --------" >> /tmp/hdd.rai
megacli -LDInfo -L0 -a0 > /tmp/hdd.r0
RAI=$(cat /tmp/hdd.r0 | grep Name | sed 's/://g' | awk '{print $2}')
SIZ=$(cat /tmp/hdd.r0 | grep "Size" | egrep -v "Sector|Strip" | awk '{print $3""$4}')
STA=$(cat /tmp/hdd.r0 | grep State | awk '{print $3}')
echo -e "\e[1;36m$RAI $SIZ $STA\e[0m" >> /tmp/hdd.rai
megacli -LDInfo -L1 -a0 > /tmp/hdd.r1
RAI=$(cat /tmp/hdd.r1 | grep Name | sed 's/://g' | awk '{print $2}')
SIZ=$(cat /tmp/hdd.r1 | grep "Size" | egrep -v "Sector|Strip" | awk '{print $3""$4}')
STA=$(cat /tmp/hdd.r1 | grep State | awk '{print $3}')
echo -e "\e[1;36m$RAI $SIZ $STA\e[0m" >> /tmp/hdd.rai
echo "------ ---------- --------" >> /tmp/hdd.rai
megacli -PDList -a0 > /tmp/hdd.tmp
echo "-------------------- ---------------- ---------- -------- --- -----" > $REP
echo -e "\e[1;37mHDD-MODEL SERIAL SIZE PATH TEMP FAIL\e[0m" >> $REP
echo "-------------------- ---------------- ---------- -------- --- -----" >> $REP
SN=$(cat /tmp/hdd.tmp | grep "Inquiry Data" | awk '{print $NF}')
for i in $SN;
do
MODL=$(cat /tmp/hdd.tmp | grep -B15 $i | grep "Inquiry Data" | awk '{print $3"-"$4}')
SIZE=$(cat /tmp/hdd.tmp | grep -B15 $i | grep "Raw Size" | awk '{print $3"GB"}')
PORT=$(cat /tmp/hdd.tmp | grep -B15 $i | grep "Connected Port Number" | awk '{print $4}')
FAIL=$(cat /tmp/hdd.tmp | grep -B20 $i | grep "Predictive Failure Count" | awk '{print $NF}')
TEMP=$(cat /tmp/hdd.tmp | grep -A12 $i | grep "Temperature" | sed 's/://g' | awk '{print $3}')
if [[ "$FAIL" == "0" ]]; then
FAIL_HTML="0"
else
FAIL_HTML="$FAIL"
fi
echo "" >> $WEB/hdd.html
echo "| $MODL | " >> $WEB/hdd.html
echo "$i | " >> $WEB/hdd.html
echo "$SIZE | " >> $WEB/hdd.html
echo "$PORT | " >> $WEB/hdd.html
echo "$TEMP | " >> $WEB/hdd.html
echo "$FAIL_HTML | " >> $WEB/hdd.html
echo "
" >> $WEB/hdd.html
echo "$MODL $i $SIZE $PORT $TEMP $FAIL" >> $REP
done
echo "-------------------- ---------------- ---------- -------- --- -----" >> $REP
}
#------------------------------- CORE ----------------------------------#
webstart
checkhdd
webend
echo -e "- Final HTML report (\e[1;35mhttp://$(ifconfig vmbr0 | grep -w inet | awk '{print $2}' | sed 's/ //g')/hdd/hdd.html\e[0m)"
cat /tmp/hdd.rac
cat /tmp/hdd.rai | column -t
cat $REP | column -t