#!/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
EOF } #------------------------------ WEB-STOP -------------------------------# webend(){ cat >> $WEB/hdd.html <<\EOF
HDD-Model Serial Size Path Temp Fail
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