Les disques durs modernes ont un mécanisme interne appelé S.M.A.R.T. grâce auquel 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?
Aperçu
Des programmes tels que «mdadm» (pour la gestion du RAID logiciel) et «Palimpsest Disk Utility» (utilisé sur Ubuntu LiveCD) utilisent les informations S.M.A.R.T pour vous informer lorsque le disque est sur le point de tomber ou échoue. Cependant, sur un serveur sans tête (sans interface graphique), il n'y a aucun service qui vous informera de la catastrophe en cours 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 des disques durs du système a atteint une limite délibérément inférieure au seuil "le disque est défectueux" et enverra l'avertissement par e-mail à l'administrateur de la machine.
Prérequis et hypothèses
- Vous avez déjà configuré l'assistance par e-mail pour le serveur à l'aide du " Comment configurer les alertes par e-mail sous Linux ” guide.
- 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’éditeur, c’est simplement parce que j’y suis habitué ... vous pouvez utiliser tout 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 de surveillance:
sudo vim /root/smart-monitor.sh
Faites-en un contenu:
#! / Bin / Bash
######## Fonction e-mail ########
email_admin_func ()
{
echo "À: [email protected]"> $ temp_email_file
echo "De: [email protected]" >> $ fichier_email_temp
echo "Objet: Seuil du moniteur S.M.A.R.T dépassé" >> $ temp_email_file
echo "" >> $temp_email_file
echo -e $1 >> $temp_email_file
/ usr / sbin / ssmtp -t <$ fichier_email_temp
echo "A envoyé un e-mail à 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 ########
temp_email_file = / tmp / smart_monitor.txt
allowed_threshold = 5 # définir le nombre de secteurs défectueux avec lesquels vous êtes prêt à vivre, recommandé 5.
########Moteur########
pour i dans sda sdb; do # Ajoutez ou soustrayez les noms de disque de cette liste en fonction de votre configuration.
si [[ "`smartc_func $i`" -ge $allowed_threshold ]]; puis
echo Envoyer un e-mail à l'administrateur
email_admin_func "L'un des disques durs sur" `hostname`", a atteint la limite du seuil supérieur !!! nLe seuil a été défini sur: $ allowed_threshold et l'état du disque $ i était: "` smartc_func $ i` ""
être
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é - Réglez ce paramètre sur ce que vous jugez approprié, j'ai utilisé 5 parce que la limite définie pour les disques durs «de qualité serveur» que j'ai utilisés était de 10. (j'ai trouvé le seuil pour les disques «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 «for». Actuellement, deux disques (sda et sdb) sont inclus, ajustez donc votre configuration. Vous pouvez inclure tous vos disques ou seulement certains, si vous devez * exclure un disque pour une raison quelconque.
* dans ma configuration d'origine, le premier disque était un lecteur flash, donc lire ses informations si cela est possible n'est pas d'une grande utilité.
Rendez le script exécutable:
sudo chmod + x /root/smart-monitor.sh
La configuration est terminée.
Planifiez l'exécution automatique du script
Nous voulons que le script s'exécute automatiquement afin de créer un nouveau travail Cron pour lui.
Comme indiqué dans le "
Comment configurer les alertes par e-mail sous Linux
»Guide le résultat de le faire, est que si le script lui-même rencontre une erreur, cron nous 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 tous les matins à 7 heures du matin.
Tout votre secteur nous appartient :)