Filesystem/Monitoring/Smart

De TartareFR
Aller à la navigation Aller à la recherche

Introduction

Le but de ce tutoriel est d'utiliser la technologie SMART (équipant tout les disques durs récents) pour vérifier si son état est correct ou pas. Les disques SMART sont capables de surveiller en continu l'état du disque et d'alerter l'utilisateur si une anomalie est détectée, et la plupart sont aussi capables de faire des tests spécifiques pour une meilleure analyse.


Warning.png
Sauvegardez toujours vos données importante, sans tenir compte de ce que SMART dit !
Même si SMART est vraiment sûr, des fois il peut se tromper. Aussi, le délais après l'alerte de SMART peut ne pas être assez long pour mettre les données dans un endroit sécurisé.

Procédure d'installation

La première chose a faire est de vérifier si SMART est activé dans le BIOS. Par exemple :

S.M.A.R.T. for Hard Disk: Enabled

Certain BIOS n'ont pas l'option et désactivent SMART, mais ne vous inquiétez pas, smartctl peut l'activer (voir plus bas). Référez vous au manuel de la carte mère pour plus de précisions.

Maintenant installons le paquet <package>smartmontools</package>.

# yum install smartmontools

Vérifiez si votre disque gère SMART :

# smartctl -i /dev/hda

Ou pour les périphériques SATA :

# smartctl -i -d ata /dev/sda

Pour activer SMART sur les disques IDE :

# smartctl -s on /dev/hda

Pour activer SMART sur les disques SATA :

# smartctl -s on -d ata /dev/sda

Utiliser smartctl

Statut de santé SMART

Vérifiez le statut de santé de SMART :

# smartctl -H /dev/hda

Si vous lisez PASSED c'est bon, mais si vous lisez FAILED vous devez sauvegarder vos données maintenant : le disque est déjà planté ou est prédit a planter dans les 24 heures.

Journal d'erreur SMART

Maintenant vérifiez le journal d'erreur SMART (c'est un liste d'erreurs détectées par SMART durant la vie du disque) :

# smartctl -l error /dev/hda

Si vous lisez No Errors Logged c'est bon. Si il y a quelques erreurs vous ne devriez pas non-plus vous inquiéter. Si il y a un nombre important d'erreurs, sauvegardez vos données et prévoyez de changer le disque.

Lire le statut de santé et le journal d'erreur SMART n'est pas suffisant : vous devriez vraiment faire d'autres tests spécifiques.

Tests SMART

Ces tests n'interfèrent pas avec le fonctionnement normal des disques et peut être réalisé à n'importe quel moment. Il est décrit ici uniquement comment les lancer et lire leur rapport. Si vous voulez en apprendre plus, lisez la page de manuel ( man smartctl ).

Premièrement vous devrez connaître quels tests sont gérés par votre disque :

# smartctl -c /dev/hda

Vous saurez aussi combien de temps dure chaque test.

Maintenant exécutez le test SMART Immediate Offline (si il est supporté bien sûr) :

# smartctl -t offline /dev/hda

Vous n'avez plus qu'a attendre, smartctl vous dira combien de temps. Quand c'est finis vous n'avez plus qu'a lire à nouveau le journal d'erreur SMART pour avoir le rapport.

Si vous avez a vérifier plusieurs disques, vous devriez créer un script comme celui-ci, qui enregistre le journal SMART dans le fichier approprié après que le test soit effectué. Exécutez ce script avec les types de tests comme arguments. Si vous ne comprenez pas ce que le script fait, ne l'utilisez pas.

<path>/usr/local/bin/smartd.sh</path>

#!/bin/sh

# Script by Meliorator. irc://irc.freenode.net/Meliorator

[ ! "$@" ] && echo "Usage: $0 type [type] [type]"

[ ! -e smart-logs ] && mkdir smart-logs
[ ! -d smart-logs ] && Can not create smart-logs dir && exit 1

a=0

for t in "$@"; do

        case "$t" in
                offline) s=1 && l=error;;
                short|long) s=60 && l=selftest;;
                *) echo $t is an unrecognised test type. Skipping... && continue
        esac

        for hd in /dev/hd*[^0-9]; do
                r=$(( $(smartctl -t $t $hd | grep 'Please wait' | awk '{print $3}') * $s ))
                echo Check $hd - $t test in $(( $r / 60 )) minute\(s\)
                [ $r -gt $a ] && a=$r
        done

        echo Waiting $(( $a / 60 )) minute\(s\) for all tests to complete
        sleep $a

        for hd in /dev/hd*[^0-9]; do
                smartctl -l $l $hd 2>&1 >> smart-logs/smart-${t}-${hd##*/}.log
        done

done

for i in {1..10}; do
        sleep .01
        echo -n -e \\a
done

echo "All tests have completed"

N'oubliez pas de rendre le script exécutable :

# chmod +x smart.sh

Maintenant soucions-nous du Short Self Test SMART ou du Extended Self Test (si supportés). Ils sont similaires mais le second est plus précis que le premier :

# smartctl -t short /dev/hda
# smartctl -t long /dev/hda

Vérifiez alors le journal des erreurs du test SMART Self Test :

# smartctl -l selftest /dev/hda

Maintenant exécutons le test SMART Conveyance Self Test :

# smartctl -t conveyance /dev/hda

Vérifiez à nouveau le journal :

# smartctl -l selftest /dev/hda

Surveiller automatiquement vos disques

Si vous voulez surveiller automatiquement vos disques, vous devrez configurer le service smartd et faire en sorte qu'il soit lancé au démarrage.

Si vous utilisez des disques SATA ou SCSI, le fichier de périphérique bouge durant le démarrage, vous ne devrez alors pas utiliser /dev/sd? pour trouver vos disques. Vous devrez utiliser les liens symboliques dans <path>/dev/disk/by-id</path> :

lrwxrwxrwx 1 root root  9 2008-02-20 17:16 scsi-SDNS0P6B00FED -> ../../sdb
lrwxrwxrwx 1 root root 10 2008-02-20 17:16 scsi-SDNS0P6B00FED-part1 -> ../../sdb1
lrwxrwxrwx 1 root root  9 2008-02-20 17:16 scsi-SDNS0P6B00FTH -> ../../sda
lrwxrwxrwx 1 root root 10 2008-02-20 17:16 scsi-SDNS0P6B00FTH-part1 -> ../../sda1
lrwxrwxrwx 1 root root  9 2008-02-20 17:16 scsi-S_5QHZ0BRZ -> ../../sdc
lrwxrwxrwx 1 root root 10 2008-02-20 17:16 scsi-S_5QHZ0BRZ-part1 -> ../../sdc1
lrwxrwxrwx 1 root root  9 2008-02-20 17:16 scsi-S_5QH02EWC -> ../../sdf
lrwxrwxrwx 1 root root 10 2008-02-20 17:16 scsi-S_5QH02EWC-part1 -> ../../sdf1
lrwxrwxrwx 1 root root  9 2008-02-20 17:16 scsi-S_5QH02EX3 -> ../../sdh
lrwxrwxrwx 1 root root 10 2008-02-20 17:16 scsi-S_5QH02EX3-part1 -> ../../sdh1
lrwxrwxrwx 1 root root  9 2008-02-20 17:16 scsi-S_5QH02EYT -> ../../sdd
lrwxrwxrwx 1 root root 10 2008-02-20 17:16 scsi-S_5QH02EYT-part1 -> ../../sdd1
lrwxrwxrwx 1 root root  9 2008-02-20 17:16 scsi-S_9QG4MSPC -> ../../sdg
lrwxrwxrwx 1 root root 10 2008-02-20 17:16 scsi-S_9QG4MSPC-part1 -> ../../sdg1
lrwxrwxrwx 1 root root  9 2008-02-20 17:16 scsi-S_9QG56Q28 -> ../../sdi
lrwxrwxrwx 1 root root 10 2008-02-20 17:16 scsi-S_9QG56Q28-part1 -> ../../sdi1
lrwxrwxrwx 1 root root 10 2008-02-20 17:16 usb-PLEXTOR_CORPORATION._PLEXTOR_USB2.0-ATA.ATAPI_Bridge_000000002BDC -> ../../scd0
lrwxrwxrwx 1 root root  9 2008-02-20 17:16 usb-ST316002_1A_200509223316-0:0 -> ../../sde
lrwxrwxrwx 1 root root 10 2008-02-20 17:16 usb-ST316002_1A_200509223316-0:0-part1 -> ../../sde1

Ce système a 8 disques durs, 2 SCSI et 6 SATA, ainsi qu'un lecteur DVD USB et un disque USB.

La suite va décrire comment :

  • surveiller un disque SCSI seul (<path>/dev/disk/by-id/scsi-SDNS0P6B00FED</path>).
  • programmer les test (Offline, Extended et Conveyance) pour être lancés tout les vendredi entre 11h00 et 15h00.
  • exécuter un script si une erreur est détectée : ce script écrira un rapport détaillé et éteindra l'ordinateur.

Le fichier de configuration du service smartd est dans <path>/etc/smartd.conf</path>. Si il n'existe pas, créez-le.

...
#DEVICESCAN
...
/dev/disk/by-id/scsi-SDNS0P6B00FTH \ 
-H \
-l error -l selftest \
-s (O/../../5/11|L/../../5/13|C/../../5/15) \
-m ThisIsNotUsed -M exec /usr/local/bin/smartd.sh

Contenu du script <path>/usr/local/bin/smartd.sh</path> :

#!/bin/bash
LOGFILE="/var/log/smartd.log"
echo -e "$(date)\n$SMARTD_MESSAGE\n" >> "$LOGFILE"
shutdown -h now


Rendez le script exécutable :

# chmod +x /usr/local/bin/smartd.sh

Ce script et cette configuration ne sont que des exemples, chacun est libre de l'adapter a ses besoins et préférences. Si vous voulez en savoir plus vous pouvez lire la page de manuel :

$ man smartd.conf

Pour vérifier le script, vous devrez ajouter -M test à la dernière ligne de <path>smartd.conf</path> et lancer le service (notez que comme convenu il éteindra votre ordinateur) :

# /etc/init.d/smartd start

Si quelque chose ne vas pas vous pouvez vérifier <path>/var/log/messages</path>:

# tail /var/log/messages

Maintenant enlevez l'option -M test et configurez le lancement de smartd au démarrage :

# rc-update add smartd default

Finis !

Liens utiles

Page originale :

Autres :