Verifier l'etat de sante d'un disque
Publié le
SMART
Les disques on un systeme d’autosurveillance integre permettant de verifier sont etat de sante. Self-Monitoring, Analysis and Reporting Technology
Un disque expose donc trois choses :
- attributs (compteurs et mesures)
- verdict global
- autotests
Attributs
RAW_VALUE : donnee relle (nb de secteurs, heures, erreurs) VALUE : note normalise par le fabriquant (plus haut = mieux) WORST : note notmalise plus basse atteinte THRESH : Seuil d’echec fixer par le fabriquant (VALUE)
Verdict
PASSED / FAILED
Tout est dans le nom, FAILED est une valeur sur alors que PASSED ne prouve rien.
Autotests
Un disque peut se tester lui meme.
- short : petite zoen (~2min)
- long : tout (plusieurs h)
- conveyance : degats de transport (~5min)
Logs
Il existe egalement un journal d’erreur qui enregistre les erreurs en usage reel
TEST
Pour tester un disque il faut deja les identifier :
lsblk -d -o NAME,SIZE,MODEL,SERIAL,ROTA,TRAN
ls -l /dev/disk/by-id/ | grep -v part ata- SATA
nvme- nvme
usb- usb
scsi- sas ou sata derriere sas/raid
wwn-0x id mondial
on peut rajouter | grep <format> pour en selectionner un en particulier
On travaille en by-id car celui ci ne change par la ou le NAME depend de l’ordre au demarrage. Pour faire plus simple on lui donne un id
D=/dev/disk/by-id/ata-<modèle>_<série> Pour aller plus vite on peut faire DX pour chaque disque et faire une boucle, c’est ce qu’on fera pour la suite (une boucle sur un disque marche evidemment).
for d in $D1 $D2 ...; do ...; done Pour verifier qu’un disque dispose de SMART on utilise
smartctl -d $D Activer SMART
smartctl -s on $D Pour un disque en usb il faut rajouter -d sat sur smartctl.
Relever l’etat actuel
smartctl -H -A $D On peut deja voir PASSED / FAILED et des attributs qui vont nous servir de reference (a noter; 5, 9, 187, 188, 197, 198, 199).
En donnant le resultat de smartctl -l error $D a une IA et ceux de la commande precendente (flemme de lire ca), on peut savoir si une erreur est ancienne ou recente.
Test court
Identifier si un disque est mort avant d’entamme un test long
smartctl -t short $D Test long
smartctl -t long $D Suivre un test
smartctl -c $D | grep -A1 'Self-test execution' Un test s’effectue sur un disque, donc tant que le disque ne s’etaint, il n’est pas oblige de garder une connexion avec lui.
Savoir quand un test est terminer
for d in $D1 $D2 ...; do echo "=== $d"; smartctl -c $d | grep -A1 'Self-test execution'; done Resultat d’un test
smartctl -l selftest $d Je vous laisse analyser les resultats avec IA…