Ce script sert à surveiller l’état SMART des disques et vérifier le RAID système (mdadm). Il permet également de surveiller un storage externe et de repérer les disques dégradés, les températures anormales, les secteurs défectueux, les erreurs PCI/contrôleur et d’envoyer un rapport par mail pour une maintenance preventive.
Smartctl
L’outil smartctl fait partie du paquet smartmontools` et permet de :
lire les informations SMART des disques
lancer des auto-tests
détecter des signes de panne imminente
L’outil smartctl fonctionne avec :
disques SATA
SAS
NVMe
disques USB (souvent partiellement)
RAID matériels (via des drivers spécifiques)
L’accès aux disques se fait via :
le driver cciss (pour les anciens serveurs)
smartctl -a -d cciss,0 /dev/sdX
hpsa (actuel)
smartctl -a -d hpsa,0 /dev/sdX
Script bash
Ce script génère un rapport dans le dossier /root/ et l’envoie par mail.
# ========================= # DELETE OLD REPORT rm -f $REPORT
# ========================= # MANAGE SPARE DISK # /!\ update the sparedisk.txt after change the disk # Update the DISK variable to correspond of the disks if [ ! -f $SPAREFILE ] then SPAREDISK=5 else SPAREDISK=$(cat $SPAREFILE) fi
# ========================= # STORAGE DISKS echo -e "\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> $REPORT echo -e "┣━━━━━ DISK OF STORAGE D3700 - SDA" >> $REPORT echo -e "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >> $REPORT echo "Spare Disk: $SPAREDISK" >> $REPORT for i in $(seq 0 5); do if [ $i -ne $SPAREDISK ]; then echo -e "\n┣━━━ DISK $i ━━━━━━━━━━━━━━━━━━━ \n" >> $REPORT /usr/sbin/smartctl -a -d cciss,$i $DISK | egrep "Serial number|SMART Health|Current Drive Temperature|Elements in grown defect|Errors Corrected|algorithm|read:|write:|verify:|Non-medium|Background short|Self-test log|LifeTime" | head -15 3>&1 4>&2 >>$REPORT 2>&1
fi done
# ========================= # MAIL SENDED echo -e "Please find the reports for the preventive maintenance of the storage $(hostname)."\ | mail -s "$(hostname) : Preventive maintenance" -S \ smtp=smtp://mail.my.company.org -S from="[email protected]" -a $REPORT $MAIL