Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh$
- $
- ### Parameters ###$
- logfile="/tmp/smart_report.tmp"$
- email="your_email@gmail.com"$
- subject="SMART Status Report for FreeNAS"$
- drives="da0 da1 da2 da3 da4 da5 da6 da7"$
- 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