S.M.A.R.T. badblocks badblocks2

Posté par  (site web personnel) . Édité par Ysabeau 🧶 🧦, patrick_g, bobble bubble, Benoît Sibaud et palm123. Modéré par Pierre Jarillon. Licence CC By‑SA.
Étiquettes :
34
3
juil.
2024
Matériel

S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology) est un système de surveillance intégré aux disques durs modernes et aux disques SSD. Il évalue en continu le bien-être du périphérique tout en anticipant les éventuels dysfonctionnements. Il utilise une réserve de secteurs de rechange pour réparer quand il détecte un secteur en anomalie.
Le programme Linux badblocks teste les blocs d’un média par écriture+relecture+comparaison. À l’origine il servait à mettre les blocs mauvais en liste noire dans le file-system.

Est-il utile de nos jours de vérifier ses médias ?
Comment se situe S.M.A.R.T. par rapport à l’outil badblocks ?
Comment vérifier un média en tenant compte de sa surveillance par S.M.A.R.T. ?

C'est ce que nous allons voir dans la suite de la dépêche.

smart-drive

Sommaire

Préambule

Quelle précaution prendre vis-à-vis du risque de mauvaise qualité du stockage, quand je viens d’acheter un média (disque SSD, disque rotatif, clé USB, carte SD) ou un appareil sous Linux équipé d’un espace de stockage dont j’ignore la technologie ?
Sans être parano, je me dis qu’avant d’envoyer des données précieuses sur l’espace de stockage, c’est le moment de faire certaines vérifications. Mais quelles vérifications ? Qu’est-il possible de faire ?

Sur un média connectable, tout est possible.
Sur un appareil neuf sans système ni données, tout est possible en utilisant une distrib Live.
Sur les autres, ça dépend, il y en a où on n’a même pas un accès root pour lancer une vérification « dure » ou « molle » (Android, routeur…).

En écrivant cet article, je me suis rendu compte que je ne me suis jusqu’ici jamais posé de questions sur l’opportunité de vérifier les espaces de stockage de mes téléphones, PC portables, routeurs, box… bref tous les appareils vendus prêts à être utilisés. Pourtant, que sais-je de la vérification faite par celui qui a installé le système ? Rien, et j’utilise, sans penser que l’espace de stockage de l’appareil n’est ni plus ni moins robuste que celui du PC Linux que j’ai installé dernièrement, mais que j’ai vérifié consciencieusement.

S.M.A.R.T.

S.M.A.R.T. est un système de surveillance intégré aux disques durs modernes et aux disques SSD. Il évalue en continu le bien-être du périphérique tout en anticipant les éventuels dysfonctionnements. Il surveille un maximum de paramètres (température, temps de fonctionnement, vitesse de rotation pour les disques magnétiques, nombre de démarrages et d’arrêts…) et dépend de l’expérience du fabricant. La réparation de secteurs utilise une réserve de secteurs et le mapping entre secteurs logiques et secteurs physiques.

On pourrait se dire que, de nos jours, les supports sont fiables et testés par les intégrateurs. D’autres considèrent que la technologie S.M.A.R.T. suffit… et c’est bien commode de ne plus se soucier de la fiabilité des supports de stockage. Mais à la première galère due à un média défaillant, tu évolueras dans ta confiance.

Sais-tu seulement sur lesquels de tes médias S.M.A.R.T. est installé et actif ?
Si tu utilises un RaspberryPi, ton média système est… une carte SD. Elle n’a pas S.M.A.R.T.. Idem pour l’extension de mémoire que tu as ajoutée à ton téléphone.

Je t’invite à lire la page Wikipedia sur S.M.A.R.T. et son paragraphe « Standard, implémentation et limitations ». Que fait et que ne fait pas le S.M.A.R.T. qui fonctionne sur le disque du PC qui te permet de lire cet article ? Difficile de savoir. Comment est-il configuré ? Fais un sondage autour de toi à ce sujet et tu seras pris pour un parano.

Sur ton PC, sais-tu qu’il y a une option S.M.A.R.T. dans le BIOS (ou UEFI) ? Sais-tu qu’il y a un service smartd dans ton Linux ? As-tu compris aussi qu’avec du RAID il n’est pas toujours opportun d’activer S.M.A.R.T. ? Les communications entre S.M.A.R.T. RAID et l’O.S. peuvent se passer plus ou moins bien selon la qualité de ces éléments. Il te faut bien comprendre ce qu’il est possible de paramétrer et deviner comment ça marche derrière.

Si tu demandes une vérification à S.M.A.R.T. par smartctl, sais-tu ce qu’il fait ? Se contente-t-il de lire ou fait-il un test en écriture ?

Enfin, quand S.M.A.R.T. détecte qu’un secteur est devenu défectueux, il ne peut pas deviner quels bits sont défaillants, aussi il renseigne le secteur de secours avec ce qu’il peut, qui est l’état du secteur après défaillance. S.M.A.R.T. a ses limites, il répare comme il peut. S’il est configuré pour, il alerte quand il prévoit de la défaillance, mais sais-tu reconnaître ses alertes ? As-tu compris ce que tu dois faire en réponse aux alertes ?

Je t’invite à apercevoir la complexité de prise en main de S.M.A.R.T. en faisant quelques recherches sur ces listes de mots :

smartctl howto
smartctl configure self test
smartd howto

et tu verras que ce n’est pas simple à comprendre et à configurer.

Tu peux te dire naïvement que tout est bien configuré par défaut et que tes médias seront toujours impeccables. Sinon, il va falloir investir en temps et faire quelques essais. À toi de choisir.

S.M.A.R.T. est une belle avancée technologique, mais il est dangereux de lui attribuer des mérites indus.

BADBLOCKS

Le programme Linux badblocks a été créé en même temps que le paquetage e2fsprogs (mkfs.ext2, mkfs.ext3, mkfs.ext4, fsck.ext2…). À l’époque S.M.A.R.T. n’existait pas et il n’y avait pas de mapping entre les adresses logiques et physiques. C’est le file-system qui devait tout gérer quand il détectait un bloc défectueux, notamment la mise du bloc en liste noire. C’est pour cela que mke2fs et e2fsck lancent un badblocks « dur » quand on leur spécifie deux fois l’option -c. Cela dure trèèès longtemps car les paramètres par défaut ne sont plus bien optimisés.

Depuis l’arrivée de S.M.A.R.T., certains considèrent badblocks comme obsolète. Mais qui peut affirmer que TOUS les médias utilisés par TOUS les usages de Linux sont équipés de S.M.A.R.T. ?
Peut-être qu’au M.I.T. avec un réseau de classe A, on ne s’abaisse pas à utiliser une clé USB ou un RaspberryPi. Je me demande dans quel type de bulle vivent ceux qui pensent que S.M.A.R.T. est sur tous les médias de stockage.

Quand j’achète une clé USB, je lui passe badblocks dessus et s’il y a des mauvais blocs, je la rends et je me fais rembourser.
J’ai essayé d’interroger les fonctionnalités S.M.A.R.T. de diverses clés USB et je n’ai rien obtenu, comme si cette utilité n’y était pas installée :

# smartctl --scan-open
# smartctl -x /dev/sdc
# smartctl -i -d scsi -T verypermissive /dev/sdc

Mes recherches sur Internet n’ont abouti à rien qui me permette de voir une réponse de la part de clés USB. Peut-être que si j’achetais (cher) des clés USB de très haute qualité, j’y trouverais S.M.A.R.T. ?

Comme l’intervenant du message #25 de ce rapport de bug (en), je pense que badblocks est loin d’être obsolète.
J’ai envie d’imiter le message #20 juste au-dessus en disant : « Je dois demander --- ***pourquoi*** vous (et d’autres personnes) mettez de l’essence dans vos voitures en 2024 ? L’essence en tant que chose a commencé à devenir inutile pour les voitures vers 2011, lorsque la voiture électrique s’est répandue, et que les batteries sont devenues suffisamment énergétiques pour faire rouler des véhicules sur des centaines de km ».

Je t’invite aussi à une recherche sur la liste de mots « courbe en baignoire composants électroniques ». Le programme badblocks peut servir au déverminage. On sait en détail ce qu’il fait. Son résultat est clair, contrairement aux implémentations propriétaires de S.M.A.R.T..
Sans déverminage (rodage) on court le risque de subir trop tôt une réparation discrète incomplète : le secteur réparé sera physiquement bon mais son contenu sera corrompu. La conséquence peut être catastrophiquement discrète. Par exemple, un fichier LibreOffice est une archive zip (compressée), la corruption d’un seul bit y a des conséquences imprévisibles.

De mon côté, j’utilise badblocks pour tester les médias nouvellement acquis et pour effacer ceux bons à réformer. Ce programme permet aussi la chasse aux médias « fake-size », du genre carte SD de 1To qui accepte de recevoir 1To de fichiers, mais qui ne stocke en réalité que 8Go. On trouve de nos jours (juin 2024) des clés USB de 16To vendues au prix de 5 € ! L’application h2testw sous windows et son équivalent f3 sous linux sont spécialement conçus pour cette chasse. Le microprogramme de ces clés USB ou de ces disques a été détourné pour déclarer un espace de stockage falsifié. C’est de l’escroquerie.

BADBLOCKS2

Mon usage du badblocks du paquetage e2fsprogs-1.47.0 m’a amené à y caractériser un bug reproductible en novembre 2023. J’ai eu l’intention de remonter le bug aux équipes ad hoc de ma distribution (Mageia) mais je me suis d’abord mis à regarder le source.

J’y ai trouvé l’origine du bug, et j’ai trouvé d’autres bugs. En ajoutant des instructions de traçage et de simulation d’erreurs du média, j’ai mis en évidence encore d’autres bugs. De fil en aiguille, j’ai fini par retoucher profondément certains algorithmes, et j’ai appelé badblocks2 cette nouvelle version. J’y ai ajouté diverses options faciles à programmer et commodes à l’usage. J’ai copieusement testé.

Si tu veux essayer badblocks2 et/ou prendre connaissance de ma démarche, je livre tout sur mon site. Tu verras pourquoi je me suis rabattu sur la création d’une nouvelle version, plutôt que de faire remplacer l’ancienne (ce qui aurait profité à tous).
Tu peux te faire une idée des fonctionnalités ajoutées en consultant les *.8.txt .
Tu peux t’inspirer des tests décrits dans le fichier Alire.txt, tester diverses valeurs pour -c -t et voir l’effet sur la vitesse de traitement. Tu peux même jouer à arracher la clé en cours de test (Ctrl-C pour arrêter) !

J’espère que ce programme servira à d’autres que moi.

En pratique

Voici une suggestion d’actions à faire lors de l’acquisition d’un nouveau média (disque SSD, disque rotatif, clé USB, carte SD…). Les commandes doivent être lancées par l’opérateur root.
Avec cela, quand dans quelques années tu satureras le média, tu seras sûr que le dernier secteur utilisé aura été déverminé avant la mise en production.

ATTENTION : les usages de badblocks proposés sont destructifs pour les données présentes sur le média. Le mode non-destructif du badblocks actuel comporte des bugs (version e2fsprogs-1.47.0). Celui de badblocks2 a été corrigé.
ATTENTION : la liste des mauvais blocs renvoyée par le badblocks actuel est fausse (version e2fsprogs-1.47.0). Le nombre de mauvais blocs est correct. La liste renvoyée par badblocks2 est correcte.
ATTENTION : le paramètre device du média est supposé être /dev/sdc. Ne pas se tromper, au risque d’effacer un autre média en cours d’usage.

D’abord déterminer le block-size du noyau, c’est une bonne valeur à prendre comme block-size du file-system :

# blockdev --getbsz /dev/sdc

Dans ce qui suit, je suppose que la valeur 4096 a été renvoyée.

Ensuite déterminer si S.M.A.R.T. est sur le média :

# smartctl --scan-open
# smartctl -x /dev/sdc
# smartctl -i -d scsi -T verypermissive /dev/sdc

Si S.M.A.R.T. n’est pas sur le média

Passer badblocks2 pour voir s’il y a 0 ou peu de mauvais blocs :

# badblocks2 -b 4096 -c 32768 -wrrvvss -t r -t r -e 40 -o /tmp/sdc.bb /dev/sdc

L’option -e peut être supprimée ou modifiée selon la limite du nombre de mauvais blocs considérée acceptable ; les options -t peuvent être différentes selon la sévérité souhaitée (voir le man).

S’il y a trop de mauvais blocs, refuser d’utiliser le média (->garantie ?).

S’il y a 0 mauvais bloc on peut formater en toute tranquillité (partitionner éventuellement avant) :

# mkfs.ext? -b 4096 ... /dev/sdc

S’il y a quelques mauvais blocs, sans que la limite -e soit atteinte, on pourra formater en utilisant la liste sauvée de mauvais blocs :

# mkfs.ext? -b 4096 -l /tmp/sdc.bb ... /dev/sdc

Si l’on veut partitionner, il faudra recalculer la liste des mauvais blocs de chaque partition avant de formater (remplacer sdc par sdc1 dans les commandes badblocks2 et mkfs.ext? ci-dessus).

Si l’on veut formater en vfat exfat ou f2fs (clés USB en général), il n’est pas possible d’utiliser la liste des mauvais blocs détectés ; la seule solution est de refuser d’utiliser le média s’il y a des mauvais blocs (ou alors de restreindre l’usage à une zone saine… à localiser)

Si S.M.A.R.T. est sur le média

On peut vérifier son activation par smartctl :

# smartctl -i /dev/sdc

Ensuite, il faut interroger le média sur l’état et les capacités de son S.M.A.R.T. :

# smartctl -a /dev/sdc

Noter le nombre de réallocations faites et prévues :

# smartctl -a /dev/sdc | grep -i _sector

Puis faire une passe de déverminage, en écriture+lecture car on ne sait pas si l’écriture seule suffit ; ne pas utiliser l’option -p de badblocks ; les options -t peuvent être différentes selon la sévérité souhaitée (voir le man) :

# badblocks2 -b 4096 -c 32768 -wrvvss -t r -o /tmp/sdc.bb1 /dev/sdc

Faire une passe de vérification, il ne devrait plus y avoir de mauvais blocs :

# badblocks2 -b 4096 -c 32768 -wrvvss -t r -o /tmp/sdc.bb2 /dev/sdc

S’il y a encore des mauvais blocs, c’est soit que le déverminage n’est pas terminé, soit que le média et/ou son S.M.A.R.T. sont foireux (il ne détecte pas les mauvais secteurs vus par badblocks2 ou les secteurs de réserve sont mauvais ou… pire) ; relancer des passes une par une jusqu’à ce qu’il n’y ait plus de mauvais bloc détecté.

Re-interroger S.M.A.R.T. pour voir l’évolution des réallocations :

# smartctl -a /dev/sdc | grep -i _sector

Ensuite on peut formater (partitionner éventuellement avant) en considérant que le média a remappé tous ses mauvais secteurs et est donc impeccable pour l’utilisation :

# mkfs.ext? -b 4096 ... /dev/sdc

Par la suite, on pourra de temps en temps consulter l’état de santé du média en service :

# smartctl -H /dev/sda

Si on est courageux, on peut lancer de temps en temps un contrôle du média par son S.M.A.R.T.
Si on est encore plus courageux, on configurera smartd pour que ces vérifications soient automatiques et pour que les alertes soient envoyées par courriel.

Attention à la communication entre l’O.S., S.M.A.R.T. et RAID (niveau carte mère / niveau OS / contrôleurs bas de gamme), voir la page Wikipedia sur S.M.A.R.T..

Que l’esprit « aware » soit en toi, sur tes données et sur ton espace de stockage

Aller plus loin

  • # Sau-ve-gar-des !

    Posté par  . Évalué à 4 (+4/-0).

    Je comprends les angoisses de l'auteur. Tout le monde devrait les comprendre.
    D'ailleurs, tout le monde devrait considérer qu'un support de stockage peut tomber en rade à tout moment.

    Et c'est pour ça qu'on fait des sauvegardes.

    Comme on dit dans les milieux autorisés, il y a deux types d'utilisateurs : ceux qui font régulièrement leurs sauvegardes, et ceux qui n'ont jamais perdu de données.

    Pour moi, S.M.A.R.T. ne sert qu'à anticiper la perte d'un disque. Quand l'alerte se déclenche, il est temps d'acquérir un disque de remplacement.

    Pour moi, badblocks ne sert qu'à une seule chose : renvoyer un nouveau disque défectueux à son vendeur pour échange ou remboursement.

    Dans tous les cas, 1 (un) seul bloc défectueux, c'est déjà trop, le disque est déjà mort. Le nombre ne peut qu'augmenter, ça augmente vite, et plus ça augmente, et plus ça augmente vite.

    • [^] # Re: Sau-ve-gar-des !

      Posté par  . Évalué à 3 (+1/-0).

      Absolument, j'ai vu passer un projet industrialisé qui tournait avec des rpi et leurs cartes SD, à aucun moment se posait la question de la pérennité du stockage, effrayant.

      Chouette dépêche qui me fit découvrir badblocks.
      Il est vrai que ne pouvant monitorer des smartphones et des crtes SD avec SMART j'ai toujours considéré ça comme volatile et donc sauvegardes.
      Par contre vous êtes seul sur badblocks2 ou j'ai lu trop vite ?

      • [^] # Re: Sau-ve-gar-des !

        Posté par  (site web personnel) . Évalué à 5 (+5/-0).

        Au début je n'ai fait que regarder le source pour aider les mainteneurs avec une bonne suggestion. Je me suis pris au jeu et j'ai instrumenté pour bien tester les erreurs E/S. Puis les idées de corrections sont venues, engendrant l'envie irrépressible de les implémenter. De même pour les améliorations. Passionnant !
        J'ai proposé mon travail directement au mainteneur de e2fsprogs, qui ne m'a même pas répondu. Contacté par un mainteneur de Mageia, il a répondu que je violais tout plein de règles pour patcher (modifs minimales … le but étant que les différences soient bien visibles). Je ne suis pas un développeur github et c'est par ignorance que j'ai fauté. J'ai donc proposé à Mageia une version très peu modifiée pour corriger un seul bug. Il m'a été suggéré de me connecter à github pour proposer cela. Je n'ai pas envie d'investir en savoir-faire et savoir-vivre pour être accepté sur github juste pour corriger quelques lignes (insuffisantes pour moi). De plus le mainteneur du paquetage trouve badblocks obsolète !
        J'ai donc fait badblocks2 et je me suis lâché sur les modifs légères (re-indentation, changement de nom de variables …) en plus des grosses modifs d'algo et de type de données (pour traiter les graaands disques).
        Pour recompiler, il faut régénérer les répertoires source de e2fsprogs, copier badblocks2.c et badblocks2.8.in dans le répertoire misc, y modifier Makefile pour qu'il les compile. Perso j'ajoute CFLAGS="-O3 -DBBKIDBG -Wall -Wextra" et en tests SYSLIBS="-lefence".

        Je propose ce que j'ai fait. Si un mainteneur de distrib s'y intéresse, il peut évaluer l'opportunité à l'intégrer, voire trouver un mainteneur (quoique, en toute prétention de développeur, je considère que mon bébé badblocks2.c est parfait :-)).
        Moi, je m'en sers.

        Mon travail a aussi établi que malgré les bugs, si un badblocks -w ... ne trouve aucun mauvais bloc, c'est que le média est bon. Je pense que cela peut être satisfaisant pour beaucoup de vérificateurs de médias effaçables. Je leur suggère quand même de forcer sur la valeur de -c. Le man de badblocks2 comporte des explications que n'a pas celui de badblocks.

  • # site perso

    Posté par  . Évalué à 3 (+1/-0).

    Aparté: on ne peut pas refuser cookies.
    Vous ne devriez pas laisser autant d'infos dans vos mentions légales, vraiment.

    • [^] # Re: site perso

      Posté par  (site web personnel) . Évalué à 1 (+2/-1).

      Oui, mais j'ai lu quelque part qu' "un site sans mentions légales est illégal"
      Voir la référence :
      https://www.economie.gouv.fr/entreprises/site-internet-mentions-obligatoires
      Je ne parle pas de l'hébergeur, mais qui en France a besoin de donner les coordonnées de free.fr ?

      • [^] # Re: site perso

        Posté par  (site web personnel) . Évalué à 1 (+0/-0).

        Merci pour ton article trés intéressant sur SMART et le "bad" badblocks !

        À la lecture de la page du ministère, j'interprète que les mentions obligatoires le sont pour une entreprise (auto ou autre). En tant que particulier ce serai inutile !?

      • [^] # Re: site perso

        Posté par  (site web personnel) . Évalué à 2 (+0/-0).

        Tu es une entreprise ?

        Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN

      • [^] # Re: site perso

        Posté par  (site web personnel) . Évalué à 5 (+3/-0).

        À l'époque à laquelle je m'y étais intéressé, je n'ai jamais réussi à trouver un document détaillant clairement les mentions qui devaient figurer sur le site internet d'un particulier. Comme je n'avais pas envie de faire figurer mon adresse ou mon numéro de téléphone sur mon site, je me suis inspiré des mentions légales du site de Maître Eolas, sachant que, d'une part, il est farouchement attaché à son pseudonymat et que, d'autre part, compte tenu de sa profession et de son exposition médiatique, il devait très certainement être dans les clous concernant les mentions légales…

        Zelbinium : ne laissez plus les smartphones empoisonner votre relation avec vos enfants, ni compromettre leur bien-être !

        • [^] # Re: site perso

          Posté par  . Évalué à 2 (+0/-0).

          je me suis inspiré des mentions légales du site de Maître Eolas

          Merci pour le lien, j'ai bien rigolé, et la partie RGPD a amené un rayon de soleil dans cette journée pluvieuse.

  • # DBAN !

    Posté par  . Évalué à 6 (+5/-0).

    Perso, j’utilise Darik’s Boot And Nuke (DBAN) à la place de badblocks. C’est la version énervée qui fait plusieurs passes et secoue chaque bit dans tous les sens. Si le disque survit à l’opération, c’est qu’il est bon. Et s’il est déjà bien fatigué, ça l’achève.

    L’algorithme est d’ailleurs approuvé NSA pour l’effacement des données.

    (Après vérification, DBAN n’est plus vraiment maintenu, le remplaçant serai ShredOS, a tester…)

    • [^] # Re: DBAN !

      Posté par  (site web personnel) . Évalué à 2 (+1/-0).

      La commande shred fait partie de coreutils et se trouve disponible sur tout live cd (ex: system rescue). Tu n'as qu'a faire shred -v /dev/sdX, ça fonctionne…

      J'évite ce genre de commande sur un SSD où il est préférable de faire un blkdiscard -f /dev/sdX et de faire confiance à son contrôleur pour gérer ses badblocks.

  • # remplaçant de smartctl avec valeurs plus claires

    Posté par  . Évalué à 4 (+3/-0).

    Pour surveiller l'état de l'usure de mes SSD, j'utilise "smartctl -a /dev/ssd" et je colle les valeurs significatives dans un fichier pour suivre l'évolution, et j'ai découvert "skdump" qui permet d'avoir une sortie plus "humaine" à lire, si le modèle est bien supporté par le programme.

  • # super travail

    Posté par  (site web personnel, Mastodon) . Évalué à 2 (+1/-0).

    Bravo, super travail. On voit bien là tout l'intérêt d'un logiciel libre qui peut continuer à être maintenu même quand les majors le délaisse. Encore faut-il des personnes assidues et courageuses comme vous. Merci.

    Sous licence Creative common. Lisez, copiez, modifiez faites en ce que vous voulez.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.