Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [root@Triforce] /mnt/Baldr/bin# cat -e Script1
- #!/bin/sh$
- $
- ### Parameters ###$
- logfile="/tmp/smart_report.tmp"$
- email="jhavens12@gmail.com"$
- subject="SMART Status Report for FreeNAS"$
- drives=`sysctl -n kern.disks | awk '{for (i=NF; i!=0 ; i--) print $i }'`$
- tempWarn=40$
- tempCrit=45$
- sectorsCrit=10$
- warnSymbol="?"$
- critSymbol="!"$
- $
- ### Set email headers ###$
- ($
- echo "To: ${email}"$
- echo "Subject: ${subject}"$
- echo "Content-Type: text/html"$
- echo "MIME-Version: 1.0"$
- echo -e "\r\n"$
- ) > ${logfile}$
- $
- ### Set email body ###$
- echo "<pre style=\"font-size:14px\">" >> ${logfile}$
- $
- ###### summary ######$
- ($
- echo ""$
- echo "########## SMART status report summary for all drives ##########"$
- echo ""$
- echo "+------+---------------+----+-----+-----+-----+-------+-------+--------+------+----------+------+-------+"$
- echo "|Device|Serial |Temp|Power|Start|Spin |ReAlloc|Current|Offline |Seek |Total |High |Command|"$
- echo "| | | |On |Stop |Retry|Sectors|Pending|Uncorrec|Errors|Seeks |Fly |Timeout|"$
- echo "| | | |Hours|Count|Count| |Sectors|Sectors | | |Writes|Count |"$
- echo "+------+---------------+----+-----+-----+-----+-------+-------+--------+------+----------+------+-------+"$
- ) >> ${logfile}$
- for drive in $drives$
- do$
- ($
- smartctl -A -i -v 7,hex48 /dev/${drive} | \$
- awk -v device=${drive} -v tempWarn=${tempWarn} -v tempCrit=${tempCrit} -v sectorsCrit=${sectorsCrit} -v warnSymbol=${warnSymbol} -v $
- critSymbol=${critSymbol} '\$
- /Serial Number:/{serial=$3} \$
- /Temperature_Celsius/{temp=$10} \$
- /Power_On_Hours/{onHours=$10} \$
- /Start_Stop_Count/{startStop=$10} \$
- /Spin_Retry_Count/{spinRetry=$10} \$
- /Reallocated_Sector/{reAlloc=$10} \$
- /Current_Pending_Sector/{pending=$10} \$
- /Offline_Uncorrectable/{offlineUnc=$10} \$
- /Seek_Error_Rate/{seekErrors=("0x" substr($10,3,4));totalSeeks=("0x" substr($10,7))} \$
- /High_Fly_Writes/{hiFlyWr=$10} \$
- /Command_Timeout/{cmdTimeout=$10} \$
- END {$
- if (temp > tempCrit || reAlloc > sectorsCrit || pending > sectorsCrit || offlineUnc > sectorsCrit) device=device " " critSymbol;$
- else if (temp > tempWarn || reAlloc > 0 || pending > 0 || offlineUnc > 0) device=device " " warnSymbol;$
- seekErrors=sprintf("%d", seekErrors);$
- totalSeeks=sprintf("%d", totalSeeks);$
- if (totalSeeks == "0") {$
- seekErrors="N/A";$
- totalSeeks="N/A";$
- }$
- if (hiFlyWr == "") hiFlyWr="N/A";$
- if (cmdTimeout == "") cmdTimeout="N/A";$
- printf "|%-6s|%-15s| %s |%5s|%5s|%5s|%7s|%7s|%8s|%6s|%10s|%6s|%7s|\n",$
- device, serial, temp, onHours, startStop, spinRetry, reAlloc, pending, offlineUnc, seekErrors, totalSeeks, hiFlyWr, cmdTimeout;$
- }'$
- ) >> ${logfile}$
- done$
- ($
- echo "+------+---------------+----+-----+-----+-----+-------+-------+--------+------+----------+------+-------+"$
- echo ""$
- echo ""$
- ) >> ${logfile}$
- $
- ###### for each drive ######$
- for drive in $drives$
- do$
- brand=`smartctl -i /dev/${drive} | grep "Model Family" | awk '{print $3, $4, $5}'`$
- serial=`smartctl -i /dev/${drive} | grep "Serial Number" | awk '{print $3}'`$
- ($
- echo ""$
- echo "########## SMART status report for ${drive} drive (${brand}: ${serial}) ##########"$
- smartctl -n never -H -A -l error /dev/${drive}$
- smartctl -n never -l selftest /dev/${drive} | grep "# 1 \|Num" | cut -c6-$
- echo ""$
- echo ""$
- ) >> ${logfile}$
- done$
- sed -i '' -e '/smartctl 6.3/d' ${logfile}$
- sed -i '' -e '/Copyright/d' ${logfile}$
- sed -i '' -e '/=== START OF READ/d' ${logfile}$
- sed -i '' -e '/SMART Attributes Data/d' ${logfile}$
- sed -i '' -e '/Vendor Specific SMART/d' ${logfile}$
- sed -i '' -e '/SMART Error Log Version/d' ${logfile}$
- echo "</pre>" >> ${logfile}$
- $
- ### Send report ###$
- sendmail -t < ${logfile}$
- rm ${logfile}$
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement