Script de moniteur de disque dur pour serveurs Linux sans tête
Les disques durs modernes ont un mécanisme interne appelé S.M.A.R.T. à travers lequel il est possible de savoir quand un disque dur est sur le point de tomber en panne. Ne serait-il pas agréable que le serveur vous envoie un e-mail avant un tel échec?
Vue d'ensemble
Des programmes tels que «mdadm» (pour la gestion RAID logiciel) et «Palimpsest Disk Utility» (utilisé sur le LiveCD Ubuntu) utilisent les informations S.M.A.R.T pour vous informer lorsque le disque est sur le point ou en panne. Cependant, sur un serveur sans interface utilisateur (sans interface graphique), aucun service ne vous informera de la fin prochaine avant qu'il ne soit trop tard. De plus, comment le sauriez-vous sans vous connecter manuellement au serveur??
Ce script, lorsqu'il est exécuté une fois par jour avec cron, alertera si le nombre de secteurs défectueux du disque dur du système a atteint une limite délibérément inférieure au seuil «le disque est défectueux», et envoie cet avertissement à l'administrateur de la machine..
Prérequis et hypothèses
- Vous avez déjà configuré la prise en charge du courrier électronique pour le serveur à l'aide du guide «Comment configurer les alertes par courrier électronique sous Linux»..
- Vous utilisez un système basé sur Debian.
- Vous n'utilisez pas de contrôleur RAID * matériel.
- Vous me verrez utiliser VIM comme programme d’édition, c’est parce que j’y suis habitué… vous pouvez utiliser n’importe quel autre éditeur que vous souhaitez..
* Parce qu'il est très possible que le contrôleur RAID matériel bloque l'accès du système à ces informations.
Installer
Installez le package “smartmontools” qui lit les informations S.M.A.R.T du contrôleur de disque dur et nous les présente..
sudo aptitude installer smartmontools
Créez le script du moniteur:
sudo vim /root/smart-monitor.sh
Faites-en le contenu:
#! / bin / bash
######## Email fonction ########
email_admin_func ()
echo "To: [email protected]"> $ temp_email_file
echo "De: [email protected]" ">> $ fichier_temp
echo "Sujet: dépassement du seuil du moniteur S.M.A.R.T" >> $ fichier_temp_email
echo "" >> $ temp_email_file
echo -e $ 1 >> $ temp_email_file
/ usr / sbin / ssmtp -t < $temp_email_file
echo "Envoyé un email à l'administrateur"
smartc_func ()
/ usr / sbin / smartctl -A / dev / $ 1 | grep Reallocated_Sector_Ct | tr -s "| cut -d" -f11
######## Fin des fonctions ########
######## Définir le paramètre de travail ########
fichier_temp_email = / tmp / smart_monitor.txt
allowed_threshold = 5 # définissez le nombre de secteurs défectueux avec lesquels vous souhaitez vivre, recommandé 5.
########Moteur########
pour i in sda sdb; do # Ajoutez ou soustrayez les noms de disques de cette liste en fonction de votre configuration.
if [["'smartc_func $ i'" -ge $ allowed_threshold]]; puis
echo Envoi d'un courrier électronique à l'administrateur
email_admin_func "L'un des disques durs de" 'nom d'hôte "" a atteint la limite de seuil supérieure !!! nLe seuil a été défini sur: $ allowed_threshold et l'état du disque $ i était: "' smartc_func $ i '" "
Fi
terminé
Les points clés à noter sont:
- Fonction e-mail - Définissez les informations appropriées, telles que le nom de la machine et l'adresse e-mail de l'administrateur..
- Seuil autorisé - Définissez ce paramètre sur ce que vous jugez approprié. J’en ai utilisé 5 car la limite définie pour les disques durs «de niveau serveur» que j’utilisais était de 10 (j’ai trouvé le seuil pour les lecteurs «grand public»: être aussi élevé que 140).
- Définissez les périphériques que vous souhaitez surveiller en ajustant l'énumération des noms de disque dans la boucle «pour». Actuellement, deux disques (sda et sdb) sont inclus. Réglez-le en fonction de votre configuration. Vous pouvez inclure tous vos disques ou juste quelques-uns, si vous devez * exclure un disque pour une raison quelconque.
* Dans ma configuration d'origine, le premier disque était un lecteur flash. Il n'est donc pas très utile de lire ses informations, si possible..
Rendre le script exécutable:
sudo chmod + x /root/smart-monitor.sh
La configuration est terminée.
Planifier l'exécution automatique du script
Nous voulons que le script s'exécute automatiquement afin de créer un nouveau travail Cron pour celui-ci..
Comme indiqué dans le guide «Comment configurer les alertes par e-mail sous Linux», le résultat est que, si le script lui-même rencontre une erreur, cron nous en informera automatiquement par e-mail dès que cela se produit..
Ouvrez le planificateur de tâches cron:
sudo crontab -e
Ajoutez ceci à son contenu:
0 7 * * * /root/smart-monitor.sh> /tmp/last_smart_monitor_run.log
Cela définira le script à exécuter chaque matin à 7 heures..
Tout votre secteur nous appartient :)