logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

Raw Paste Créer un nouveau Paste

script entier d'analyse HDD et SSD - #4E0B39F7B2

  1. #!/bin/bash
  2. # SI BESOIN installer mailutils
  3.  
  4. USERMAIL=$USER
  5.  
  6. #function envoie_mail {
  7. # FROM=myuser\<user@domain.org\>
  8. # TO=user@domain.org
  9. # NIVEAU_ALERTE=
  10. # su - myuser -c '(echo "SRV HDD1 - Alerte niveau 2/4 : PERCENT_USED = ${PERCENT_USED}" | mail -s "[URGENT] - SRV HDD1 - Al>
  11. #}
  12.  
  13. # N° de série du SSD via smartctl
  14. SSD=("CT2000BX500SSD1" # Crucial BX 500 2To
  15. "183076804545" # SanDisk SSD PLUS 240GB
  16. "S62BNF0R615469A" # Samsung SSD 870 EVO 500GB
  17. )
  18. # Tera Bytes en ecriture max vu en datasheet ou sur le net
  19. LISTTBWMAX=("720" # Crucial BX 500 2To
  20. "300" # SanDisk SSD PLUS 240GB
  21. "600" # Samsung SSD 870 EVO 500GB
  22. )
  23. TBWMAX=0
  24.  
  25. ### MONITORING HDD1 /dev/sda POUR BAD BLOCK :
  26. ### Current_Pending_Sector & Reallocated sector
  27.  
  28. # récupération de la date et l'heure du jour ; on obtient ici une valeur telle que "mercredi 31 décembre 2014, 00:15:01" :
  29. DATE=`date +"%A %d %B %Y, %H:%M:%S"`
  30.  
  31. # récupération de la date et l'heure du jour sous un autre format ; on obtient ici un résultat sous la forme suivante : XX-YY-ZZZZ (ex: 31-12-2014) :
  32. DATE2=`date +"%d-%m-%Y"`
  33.  
  34. # Collecte des noeuds de disque dur /dev/sda /dev/sdb /dev/sdc , ...
  35. #disk=$(lsblk -l -d -p -n -o NAME,TYPE | awk '($2=="disk"){print $1}')
  36. declare -a disk=$(lsblk -l -d -p -n -o NAME,TYPE | awk '($2=="disk"){print $1}')
  37.  
  38. echo "${#disk[@]}"
  39.  
  40. # Pour chaque disque identifié, on analyse les attributs
  41. for d in "${disk[@]}"
  42. do
  43. echo "COMMENCEMENT"
  44. echo "$d"
  45. DISK=$d
  46. DISK_sub="$(basename $d)"
  47. #DISK_sub=$($d | cut --delimiter=/ --fields=2)
  48. #echo $DISK
  49. echo $DISK_sub
  50. #DISK=/dev/sda
  51.  
  52. # définition du chemin du répertoire à créer :
  53. #REP="/home/jo/Monitoring_hdd1/"
  54. REP="/root/Monitoring_hdd_$DISK_sub/"
  55.  
  56. # Si le répertoire n'existe pas on le crée
  57. if [ ! -d "$REP" ];then
  58. mkdir "$REP"
  59. fi
  60.  
  61. # définition du chemin du répertoire à créer :
  62. REP="/root/Monitoring_hdd_$DISK_sub/$DATE2"
  63.  
  64. # le fichier à créer dans ce répertoire est "pending_sector.csv"
  65. FICHIER="${REP}/pending_sector.csv"
  66.  
  67. # Si le répertoire n'existe pas on le crée
  68. if [ ! -d "$REP" ];then
  69. mkdir "$REP"
  70. fi
  71.  
  72. # Si le fichier n'existe pas on le crée et on y injecte les en tete
  73. if [ ! -f "$FICHIER" ];then
  74. touch "$FICHIER" &&
  75. ( date +"[%m-%d %H:%M:%S]"|tr -d "\n" && echo "Reallocated bad sectors,pendings sectors" ) > "$FICHIER"
  76. fi
  77.  
  78. TYPE="$(smartctl -a $DISK | grep 'Rotation Rate:' | awk '{print $3$4$5}')"
  79. NAME="$(smartctl -a $DISK | grep 'Device Model' | awk '{print $3}')"
  80.  
  81. #CAS DES SSD
  82. ############
  83. if [ "$TYPE" = "SolidStateDevice" ]; then
  84.  
  85. # Récupération des attributs nécessaire
  86. PERCENT_USED="$(smartctl -a $DISK | grep 'Percent_Lifetime_Remain' | awk '{print $10}')"
  87. TOTALWRITTEN="$(smartctl -a $DISK | grep 'Total_LBAs_Written' | awk '{print $10}')"
  88. SECTORSIZE="$(smartctl -a $DISK | grep 'Sector Size' | awk '{print $3}')"
  89.  
  90. # SI SSD NE RENVOIE PAS LE POURCENTAGE UTILISE de Tera Bytes, on le calcul POURCENT_USED=[(TBW*SECTOR_SIZE)/10e-12]
  91.  
  92. for i in "${!SSD[@]}"
  93. do
  94. #echo ${SSD[$i]}
  95. if [ ${SSD[$i]} == "CT2000BX500SSD1" ]; then
  96. TBWMAX=${LISTTBWMAX[$i]}
  97. #echo "i : ",$i
  98. #echo $TBWMAX
  99. else
  100. echo "NO"
  101. fi
  102. done
  103.  
  104. # CAS 1 CLASSIQUE -> SI attribut pourcentage_used!=0
  105. if [ -n "$PERCENT_USED" ]; then
  106.  
  107. echo $PERCENT_USED
  108.  
  109. if [ -n "$PERCENT_USED" ] && [ "$PERCENT_USED" -ge 20 ] && [ "$PERCENT_USED" -lt 30 ]; then
  110. ( date +"[%m-%d %H:%M:%S]"|tr -d "\n" && echo -n ",${PERCENT_USED}" ) >> "$FICHIER"
  111. su - $USERMAIL -c '(echo "$HOSTNAME - Alerte niveau 1/4 : PERCENT_USED = '"${PERCENT_USED}"'"% | mail -s "[URGENT] - $HOSTNAME - Alerte niveau 1/4" -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  112.  
  113. #
  114. elif [ -n "$PERCENT_USED" ] && [ "$PERCENT_USED" -ge 30 ] && [ "$PERCENT_USED" -lt 50 ]; then
  115. ( date +"[%m-%d %H:%M:%S]"|tr -d "\n" && echo -n ",${PERCENT_USED}" ) >> "$FICHIER"
  116. su - $USERMAIL -c '(echo "$HOSTNAME - Alerte niveau 2/4 : PERCENT_USED = '"${PERCENT_USED}"'"% | mail -s "[URGENT] - $HOSTNAME - Alerte niveau 2/4" -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  117.  
  118. #
  119. elif [ -n "$PERCENT_USED" ] && [ "$PERCENT_USED" -ge 50 ] && [ "$PERCENT_USED" -lt 80 ]; then
  120. ( date +"[%m-%d %H:%M:%S]"|tr -d "\n" && echo -n ",${PERCENT_USED}" ) >> "$FICHIER"
  121. su - $USERMAIL -c '(echo "$HOSTNAME - Alerte niveau 3/4 : PERCENT_USED = '"${PERCENT_USED}"'"% | mail -s "[URGENT] - $HOSTNAME - Alerte niveau 3/4" -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  122.  
  123. elif [ -n "$PERCENT_USED" ] && [ "$PERCENT_USED" -ge 80 ] && [ "$PERCENT_USED" -lt 100 ]; then
  124. ( date +"[%m-%d %H:%M:%S]"|tr -d "\n" && echo -n ",${PERCENT_USED}" ) >> "$FICHIER"
  125. su - $USERMAIL -c '(echo "$HOSTNAME - Alerte niveau 4/4 : PERCENT_USED = '"${PERCENT_USED}"'"% | mail -s "[URGENT] - $HOSTNAME - Alerte niveau 4/4" -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  126.  
  127. fi
  128.  
  129. # CAS 2 : BESOIN DE CALCUL DU POURCENTAGE_USED SI Total Written!=0 & TBWMAX!=0
  130. elif [ -z "$PERCENT_USED" ] & [ -n "$TOTALWRITTEN"] & [ -n "$TBWMAX"]; then
  131.  
  132. # CALCUL POURCENTAGE UTILISE FONCTION DU PARAM TBWMAX DU SSD
  133. echo $TBWMAX
  134.  
  135. #EXEMPLE -> TOTALWRITTEN=7800211101 octets #SECTORSIZE=512 #TBWMAX (dépend de chaque SSD)=720TB
  136. TBW=$(( ($TOTALWRITTEN*$SECTORSIZE)/1000000000000 ))
  137. echo $TBW
  138. PERCENT_USED=$(( ($TBW*100/$TBWMAX) ))
  139. echo $PERCENT_USED
  140. su - $USERMAIL -c '(echo "$HOSTNAME - Disque dur $NAME" | mail -s "CALCUL DU POURCENTAGE UTILISATION TBW - $HOSTNAME -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  141.  
  142. if [ -n "$PERCENT_USED" ] && [ "$PERCENT_USED" -ge 20 ] && [ "$PERCENT_USED" -lt 30 ]; then
  143. ( date +"[%m-%d %H:%M:%S]"|tr -d "\n" && echo -n ",${PERCENT_USED}" ) >> "$FICHIER"
  144. su - $USERMAIL -c '(echo "$HOSTNAME - Alerte niveau 1/4 : PERCENT_USED = '"${PERCENT_USED}"'"% | mail -s "[URGENT] - $HOSTNAME - Alerte niveau 1/4" -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  145.  
  146. #
  147. elif [ -n "$PERCENT_USED" ] && [ "$PERCENT_USED" -ge 30 ] && [ "$PERCENT_USED" -lt 50 ]; then
  148. ( date +"[%m-%d %H:%M:%S]"|tr -d "\n" && echo -n ",${PERCENT_USED}" ) >> "$FICHIER"
  149. su - $USERMAIL -c '(echo "$HOSTNAME - Alerte niveau 2/4 : PERCENT_USED = '"${PERCENT_USED}"'"% | mail -s "[URGENT] - $HOSTNAME - Alerte niveau 2/4" -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  150.  
  151. #
  152. elif [ -n "$PERCENT_USED" ] && [ "$PERCENT_USED" -ge 50 ] && [ "$PERCENT_USED" -lt 80 ]; then
  153. ( date +"[%m-%d %H:%M:%S]"|tr -d "\n" && echo -n ",${PERCENT_USED}" ) >> "$FICHIER"
  154. su - $USERMAIL -c '(echo "$HOSTNAME - Alerte niveau 3/4 : PERCENT_USED = '"${PERCENT_USED}"'"% | mail -s "[URGENT] - $HOSTNAME - Alerte niveau 3/4" -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  155.  
  156. elif [ -n "$PERCENT_USED" ] && [ "$PERCENT_USED" -ge 80 ] && [ "$PERCENT_USED" -lt 100 ]; then
  157. ( date +"[%m-%d %H:%M:%S]"|tr -d "\n" && echo -n ",${PERCENT_USED}" ) >> "$FICHIER"
  158. su - $USERMAIL -c '(echo "$HOSTNAME - Alerte niveau 4/4 : PERCENT_USED = '"${PERCENT_USED}"'"% | mail -s "[URGENT] - $HOSTNAME - Alerte niveau 4/4" -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  159.  
  160. fi
  161.  
  162. # CAS 3 : BESOIN ASSOCIATION TBWMAX A AU TABLEAU EN DEBUG DE PROG
  163. else
  164. su - $USERMAIL -c '(echo "$HOSTNAME - PAS ASSEZ DE DATA POUR TRAITER LE NOUVEAU SSD, associer son TBWMAX au tableau du script hdd_bad_block_sda.sh " | mail -s "[URGENT] - $HOSTNAME - PAS ASSEZ DE DATA POUR TRAITER LE NOUVEAU SSD, associer son TBWMAX au tableau du script hdd_bad_block_sda.sh" -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  165. fi
  166.  
  167.  
  168. #CAS DES HDD
  169. ############
  170. elif [ "$TYPE" != "SolidStateDevice" ]; then
  171.  
  172. # Reallocated bad sectors
  173. #REALLO=$(smartctl -a /dev/sda | grep 'Reallocated_Sector_Ct' | awk '{print $10}')
  174. REALLO="$(smartctl -a $DISK | grep 'Reallocated_Sector_Ct' | awk '{print $10}')"
  175. # récupération des pendings sectors
  176. #PENDING=$(smartctl -a /dev/sda | grep 'Current_Pending_Sector' | awk '{print $10}')
  177. PENDING="$(smartctl -a $DISK | grep 'Current_Pending_Sector' | awk '{print $10}')"
  178.  
  179. if [ -z "$PENDING" ]; then
  180. su - $USERMAIL -c '(echo "$HOSTNAME - Revoir Attribut Pending Smartctl : PENDING" | mail -s "[URGENT] - $HOSTNAME - Revoir Attribut Pending Smartctl : PENDING-> du changement HDD ou SSD ou disque Mort" -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  181. elif [ -z "$REALLO" ]; then
  182. su - $USERMAIL -c '(echo "$HOSTNAME - Revoir Attribut Reallo Smartctl : REALLO" | mail -s "[URGENT] - $HOSTNAME - Revoir Attribut Reallo Smartctl : REALLO -> du changement HDD ou SSD ou disque Mort" -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  183. fi
  184.  
  185. # Reallocated sector -> Prevention des bad sectors HDD
  186. if [ -n "$REALLO" ] && [ "$REALLO" -ge 0 ] && [ "$REALLO" -lt 5 ]; then
  187. ( date +"[%m-%d %H:%M:%S]"|tr -d "\n" && echo -n ",${REALLO},${PENDING}" ) >> "$FICHIER"
  188. su - $USERMAIL -c '(echo "$HOSTNAME - Alerte niveau 0/5 : reallocated visible < '"${REALLO}"'" | mail -s "[URGENT] - $HOSTNAME - Alerte niveau 0/5" -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  189.  
  190. # Tests bad sector en attente de reallocation -> si plus de reallocated sector -> perte de data ?
  191.  
  192. # Current_Pending_Sector < 5 && Reallocated sector > 5
  193. elif [ -n "$PENDING" ] && [ -n "$REALLO" ] && [ "$PENDING" -lt 5 ] && [ "$REALLO" -ge 5 ]; then
  194. ( date +"[%m-%d %H:%M:%S]"|tr -d "\n" && echo -n ",${REALLO},${PENDING}" ) >> "$FICHIER"
  195. su - $USERMAIL -c '(echo "$HOSTNAME - Alerte niveau 1/5 : reallocated visible,bad sector < '"${REALLO} ${PENDING}"'" | mail -s "[URGENT] - $HOSTNAME - Alerte niveau 1/5" -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  196.  
  197. # Current_Pending_Sector (> 5 & < 20) && Reallocated sector > 5
  198. elif [ -n "$PENDING" ] && [ -n "$REALLO" ] && [ "$PENDING" -ge 5 ] && [ "$PENDING" -lt 20 ] && [ "$REALLO" -ge 5 ]; then
  199. ( date +"[%m-%d %H:%M:%S]"|tr -d "\n" && echo -n ",${REALLO},${PENDING}" ) >> "$FICHIER"
  200. su - $USERMAIL -c '(echo "$HOSTNAME - Alerte niveau 2/5 : reallocated visible,bad sector < '"${REALLO},${PENDING}"'" | mail -s "[URGENT] - $HOSTNAME - Alerte niveau 2/5" -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  201.  
  202. # Current_Pending_Sector (> 20 & < 50) && Reallocated sector > 5
  203. elif [ -n "$PENDING" ] && [ -n "$REALLO" ] && [ "$PENDING" -ge 20 ] && [ "$PENDING" -lt 50 ] && [ "$REALLO" -ge 5 ]; then
  204. ( date +"[%m-%d %H:%M:%S]"|tr -d "\n" && echo -n ",${REALLO},${PENDING}" ) >> "$FICHIER"
  205. su - $USERMAIL -c '(echo "$HOSTNAME - Alerte niveau 3/5 : reallocated visible,bad sector < '"${REALLO},${PENDING}"'" | mail -s "[URGENT] - $HOSTNAME - Alerte niveau 3/5" -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  206.  
  207. # Current_Pending_Sector (> 50 & < 100) && Reallocated sector > 5
  208. elif [ -n "$PENDING" ] && [ -n "$REALLO" ] && [ "$PENDING" -ge 50 ] && [ "$PENDING" -lt 100 ] && [ "$REALLO" -ge 5 ]; then
  209. ( date +"[%m-%d %H:%M:%S]"|tr -d "\n" && echo -n ",${REALLO},${PENDING}" ) >> "$FICHIER"
  210. su - $USERMAIL -c '(echo "$HOSTNAME - Alerte niveau 4/5 : reallocated visible,bad sector < '"${REALLO},${PENDING}"'" | mail -s "[URGENT] - $HOSTNAME - Alerte niveau 4/5" -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  211.  
  212. # Current_Pending_Sector > 100 && Reallocated sector > 5
  213. elif [ -n "$PENDING" ] && [ -n "$REALLO" ] && [ "$PENDING" -ge 100 ] && [ "$REALLO" -ge 5 ]; then
  214. ( date +"[%m-%d %H:%M:%S]"|tr -d "\n" && echo -n ",${REALLO},${PENDING}" ) >> "$FICHIER"
  215. su - $USERMAIL -c '(echo "$HOSTNAME - Alerte niveau 5/5 : reallocated visible,bad sector < '"${REALLO},${PENDING}"'" | mail -s "[CRITIQUE] - $HOSTNAME - Alerte niveau 5/5" -aFrom:usermail\<usermail@domain.org\> usermail@domain.org)'
  216. #sudo shutdown -h now
  217. fi
  218. fi
  219. done
  220. exit 0

Pied de page des forums

Propulsé par FluxBB