#!/bin/bash # http://fr.wikipedia.org/wiki/Self-Monitoring,_Analysis_and_Reporting_Technology #Attributes names (this is deduced from ID by smartctl and may be incorrect, as it's highly vendor-specific) #Flag values: if given in POSRCK+ format, the presence of each letter indicates that the flag is on. #P: pre-failure warning ; O: updated continuously ; S: speed / performance attribute ; R: error rate ; C: event count K: auto-keep ; +: undocumented bits present #Updated: the attribute is usually updated continuously, or during Offline Data Collection only. #Type: alarm condition is reached when if normalized value becomes less than or equal to threshold. Type indicates whether it's a signal of drive's pre-failure time or just an old age. #Raw value: as reported by drive. May or may not be sensible. #Threshold for normalized value. Normalized value should be greater than threshold #Worst normalized value recorded for this attribute during the drive's lifetime(with SMART enabled) #Normalized value (highly vendor-specific; converted from Raw value by the drive's firmware) #Failed when the normalized value became equal or less than threshold bold='' nobold='' bgblue='' bgnormal='' italic='' noitalic='' under='' nounder='' #modelName=$(echo "$synoSystem" | grep $OID_modelName | cut -d "=" -f2) # -P showall #smart2=$(ssh root@192.168.0.8 "smartctl -a /dev/hda -d ata") #Temp=$(echo "$smart2" | egrep "Model|Temp") #echo "$Temp" #WORST (le pire) #THRESH (battre) threshold (seuil) #smart3=$(ssh root@192.168.0.8 "find /dev/hd[a-d] -exec /usr/syno/bin/smartctl -iA -d ata {} \;") #Serial=$(echo "$smart3" | egrep "Serial") #echo "$Serial" # fdisk -l ; df -h # pour les pérfis ide: /dev/hd* # pour les périferiques sata et usb: /dev/sd* # fdisk -l | grep "^/dev/" # df -h | grep "USB" #sdq: Toshiba 750 Go (volumeUSB2) #/usr/syno/bin/smartctl -aH -d sat /dev/sdq => OK #sdr: Toshiba 2 To (volumeUSB1) #/usr/syno/bin/smartctl -aH -d sat /dev/sdr => OK ** # -d TYPE, --device=TYPE # Specify device type to one of: ata, scsi, sat[,auto][,N][+TYPE], usbcypress[,X], usbjmicron[,p][,x][,N], usbsunplus, marvell, areca,N/E, 3ware,N, hpt,L/M/N, megaraid,N, cciss,N, auto, test model="" serial="" firmware="" capacity="" temperature="" health="" smart1="" smart1v="" smart1t="" smart1w="" smart2="" smart2v="" smart2t="" smart2w="" smart3="" smart3v="" smart3t="" smart3w="" smart4="" smart4v="" smart4t="" smart4w="" smart5="" smart5v="" smart5t="" smart6w="" smart6="" smart6v="" smart6t="" smart6w="" smart7="" smart7v="" smart7t="" smart7w="" smart8="" smart8v="" smart8t="" smart8w="" smart9="" smart9v="" smart9t="" smart9w="" smart10="" smart10v="" smart10t="" smart10w="" smart11="" smart11v="" smart11t="" smart11w="" smart12="" smart12v="" smart12t="" smart12w="" smart13="" smart13v="" smart13t="" smart13w="" smart14="" smart14v="" smart14t="" smart14w="" smart15="" smart15v="" smart15t="" smart15w="" i=0 j=0 declare RESULT=() while read -r LINE; do RESULT[${#RESULT[@]}]=$LINE #echo $LINE _model=$(echo $LINE | grep "Device Model"| cut -d ":" -f2) if [ -n "$_model" ] ; then model[$i]=$_model ; fi _serial=$(echo $LINE | grep "Serial Number"| cut -d ":" -f2) if [ -n "$_serial" ] ; then serial[$i]=$_serial ; fi _firmware=$(echo $LINE | grep "Firmware Version"| cut -d ":" -f2) if [ -n "$_firmware" ] ; then firmware[$i]=$_firmware ; fi # recherche chaine entre [] sed 's/.*\[//;s/\].*//' _capacity=$(echo $LINE | grep "User Capacity"| cut -d ":" -f2 | sed 's/.*\[//;s/\].*//') if [ -n "$_capacity" ] ; then capacity[$i]=$_capacity ; fi _temperature=$(echo $LINE | grep "Temperature_Celsius"| cut -d " " -f10) if [ -n "$_temperature" ] ; then temperature[$i]=$_temperature ; fi _health=$(echo $LINE | grep "SMART overall-health"| cut -d ":" -f2 | sed 's/^ *//g') if [ -n "$_health" ] ; then health[$i]=$_health ; fi ## SMART _smart1=$(echo $LINE | grep "Raw_Read_Error_Rate") #1 if [ -n "$_smart1" ] then # VALUE WORST THRESH (valeur mini failed) echo $_smart1 smart1[$i]=$(echo $_smart1 | awk '{print $10}') smart1v[$i]=$(echo $_smart1 | awk '{print $4}') smart1w[$i]=$(echo $_smart1 | awk '{print $5}') smart1t[$i]=$(echo $_smart1 | awk '{print $6}') fi _smart2=$(echo $LINE | grep "Reallocated_Sector_Ct") #5 if [ -n "$_smart2" ] then smart2[$i]=$(echo $_smart2 | awk '{print $10}') smart2v[$i]=$(echo $_smart2 | awk '{print $4}') smart2w[$i]=$(echo $_smart2 | awk '{print $5}') smart2t[$i]=$(echo $_smart2 | awk '{print $6}') fi _smart3=$(echo $LINE | grep "Spin_Retry_Count") #10 if [ -n "$_smart3" ] then smart3[$i]=$(echo $_smart3 | awk '{print $10}') smart3v[$i]=$(echo $_smart3 | awk '{print $4}') smart3w[$i]=$(echo $_smart3 | awk '{print $5}') smart3t[$i]=$(echo $_smart3 | awk '{print $6}') fi _smart4=$(echo $LINE | grep "Command_Timeout") #188 if [ -n "$_smart4" ] then smart4[$i]=$(echo $_smart4 | awk '{print $10}') smart4v[$i]=$(echo $_smart4 | awk '{print $4}') smart4w[$i]=$(echo $_smart4 | awk '{print $5}') smart4t[$i]=$(echo $_smart4 | awk '{print $6}') fi _smart5=$(echo $LINE | grep "Airflow_Temperature_Cel") #190 if [ -n "$_smart5" ] then smart5[$i]=$(echo $_smart5 | awk '{print $10}') smart5v[$i]=$(echo $_smart5 | awk '{print $4}') smart5w[$i]=$(echo $_smart5 | awk '{print $5}') smart5t[$i]=$(echo $_smart5 | awk '{print $6}') fi _smart6=$(echo $LINE | grep "Reallocated_Event_Count") #196 if [ -n "$_smart6" ] then smart6[$i]=$(echo $_smart6 | awk '{print $10}') smart6v[$i]=$(echo $_smart6 | awk '{print $4}') smart6w[$i]=$(echo $_smart6 | awk '{print $5}') smart6t[$i]=$(echo $_smart6 | awk '{print $6}') fi _smart7=$(echo $LINE | grep "Current_Pending_Sector") #197 if [ -n "$_smart7" ] then smart7[$i]=$(echo $_smart7 | awk '{print $10}') smart7v[$i]=$(echo $_smart7 | awk '{print $4}') smart7w[$i]=$(echo $_smart7 | awk '{print $5}') smart7t[$i]=$(echo $_smart7 | awk '{print $6}') fi _smart8=$(echo $LINE | grep "Offline_Uncorrectable") #198 if [ -n "$_smart8" ] then smart8[$i]=$(echo $_smart8 | awk '{print $10}') smart8v[$i]=$(echo $_smart8 | awk '{print $4}') smart8w[$i]=$(echo $_smart8 | awk '{print $5}') smart8t[$i]=$(echo $_smart8 | awk '{print $6}') fi _smart9=$(echo $LINE | grep "Soft_Read_Error_Rate") #201 if [ -n "$_smart9" ] then smart9[$i]=$(echo $_smart9 | awk '{print $10}') smart9v[$i]=$(echo $_smart9 | awk '{print $4}') smart9w[$i]=$(echo $_smart9 | awk '{print $5}') smart9t[$i]=$(echo $_smart9 | awk '{print $6}') fi _smart10=$(echo $LINE | grep "Disk_Shift") #220 if [ -n "$_smart10" ] then smart10[$i]=$(echo $_smart10 | awk '{print $10}') smart10v[$i]=$(echo $_smart10 | awk '{print $4}') smart10w[$i]=$(echo $_smart10 | awk '{print $5}') smart10t[$i]=$(echo $_smart10 | awk '{print $6}') fi ## INFOS _smart11=$(echo $LINE | grep "Start_Stop_Count") #4 if [ -n "$_smart11" ] then smart11[$i]=$(echo $_smart11 | awk '{print $10}') smart11v[$i]=$(echo $_smart11 | awk '{print $4}') smart11w[$i]=$(echo $_smart11 | awk '{print $5}') smart11t[$i]=$(echo $_smart11 | awk '{print $6}') fi _smart12=$(echo $LINE | grep "Seek_Error_Rate") #7 if [ -n "$_smart12" ] then smart12[$i]=$(echo $_smart12 | awk '{print $10}') smart12v[$i]=$(echo $_smart12 | awk '{print $4}') smart12w[$i]=$(echo $_smart12 | awk '{print $5}') smart12t[$i]=$(echo $_smart12 | awk '{print $6}') fi _smart13=$(echo $LINE | grep "Power_On_Hours") #9 if [ -n "$_smart13" ] then smart13[$i]=$(echo $_smart13 | awk '{print $10}') smart13v[$i]=$(echo $_smart13 | awk '{print $4}') smart13w[$i]=$(echo $_smart13 | awk '{print $5}') smart13t[$i]=$(echo $_smart13 | awk '{print $6}') fi _smart14=$(echo $LINE | grep "Power_Cycle_Count") #12 if [ -n "$_smart14" ] then smart14[$i]=$(echo $_smart14 | awk '{print $10}') smart14v[$i]=$(echo $_smart14 | awk '{print $4}') smart14w[$i]=$(echo $_smart14 | awk '{print $5}') smart14t[$i]=$(echo $_smart14 | awk '{print $6}') fi _smart15=$(echo $LINE | grep "UDMA_CRC_Error_Count") #199 if [ -n "$_smart15" ] then smart15[$i]=$(echo $_smart15 | awk '{print $10}') smart15v[$i]=$(echo $_smart15 | awk '{print $4}') smart15w[$i]=$(echo $_smart15 | awk '{print $5}') smart15t[$i]=$(echo $_smart15 | awk '{print $6}') fi if [ -n "$(echo $LINE | grep "Copyright")" ] ; then ((i=i+1)) ; fi #echo $i done < <(ssh root@192.168.0.8 "find /dev/sd[a-d,q-r] -exec /usr/syno/bin/smartctl -a -v 9,minutes -d sat {} \;") #done < <(find /dev/disk0 -exec smartctl -a -v 9,minutes -d sat {} \;) for((j=1;j<=$i;j++)); do echo "${bold}Disk $j [${health[j]}]:${nobold}" echo " Modèle:${model[j]} N° serie:${serial[j]} Firmware:${firmware[j]} Capacité: ${capacity[j]}" echo " Temp: ${temperature[j]}°C" echo " ${under}Alarmes:${nounder}" a=${smart1[j]} #echo "Raw_Read_Error_Rate: $a" if [[ -n $a && $a -gt 0 ]]; then echo " Raw_Read_Error_Rate: $a" ; fi av=${smart1v[j]} at=${smart1t[j]} aw=${smart1w[j]} echo "value: $av tresh: $at worst: $aw" b=${smart2[j]} #echo "Reallocated_Sector_Ct: $b" if [[ -n $b && $b -gt 0 ]]; then echo " Reallocated_Sector_Ct: $b" ; fi c=${smart3[j]} #echo "Spin_Retry_Count: $c" if [[ -n $c && $c -gt 0 ]]; then echo " Spin_Retry_Count: $c" ; fi d=${smart4[j]} #echo "Command_Timeout: $d" if [[ -n $d && $d -gt 0 ]]; then echo " Command_Timeout: $d" ; fi e=${smart5[j]} #echo "Airflow_Temperature_Cel: $e" if [[ -n $e && $e -gt 0 ]]; then echo " Airflow_Temperature_Cel: $e" ; fi f=${smart6[j]} #echo "Reallocated_Event_Count: $f" if [[ -n $f && $f -gt 0 ]]; then echo " Reallocated_Event_Count: $f" ; fi # g=${smart7[j]} #echo "Current_Pending_Sector: $g" if [[ -n $g && $g -gt 0 ]]; then echo " Current_Pending_Sector: $g" ; fi h=${smart8[j]} #echo "Offline_Uncorrectable: $h" if [[ -n $h && $h -gt 0 ]]; then echo " Offline_Uncorrectable: $h" ; fi k=${smart9[j]} #echo "Soft_Read_Error_Rate: $k" if [[ -n $k && $k -gt 0 ]]; then echo " Soft_Read_Error_Rate: $k" ; fi # l=${smart10[j]} #echo "Disk_Shift: $l" if [[ -n $l && $l -gt 0 ]]; then echo " Disk_Shift: $l" ; fi # echo " ${under}Infos:${nounder}" m=${smart11[j]} #echo "Start_Stop_Count: $m" if [[ -n $m && $m -gt 0 ]]; then echo " Start_Stop_Count: $m" ; fi # n=${smart12[j]} #echo "Seek_Error_Rate: $n" if [[ -n $n && $n -gt 0 ]]; then echo " Seek_Error_Rate: $n" ; fi # o=${smart13[j]} #echo "Power_On_Hours: $o" if [[ -n $o && $o -gt 0 ]]; then echo " Power_On_Hours: $o" ; fi # p=${smart14[j]} #echo "Power_Cycle_Count: $p" if [[ -n $p && $p -gt 0 ]]; then echo " Power_Cycle_Count: $p" ; fi # q=${smart15[j]} #echo "UDMA_CRC_Error_Count: $q" if [[ -n $q && $q -gt 0 ]]; then echo " UDMA_CRC_Error_Count: $q" ; fi # done #for hd in /dev/hda*; do #for hd in /dev/hd[a-z]; do #for hd in /dev/disk[1-9]; do #dd=$(ssh root@192.168.0.8 "for hd in /dev/hd[a-d]; do smartctl -A $hd -d ata; done") #dd=$(ssh root@192.168.0.8 "for i in $(ls /dev/ | grep sd[a-d]\$) ; do /usr/syno/bin/smartctl -A /dev/$i -d ata; done") #dd=$(ssh root@192.168.0.8 "for i in $(ls /dev/ | grep sd[a-d]\$) ; do /usr/syno/bin/smartctl -A /dev/sda -d ata; done") #echo "$dd" #VALUE="_AAAA" #if [ ${VALUE: 1:3} = "AA" ]; then #echo "oui" #else #echo "non" #fi