URL: https://linuxfr.org/news/s-m-a-r-t-badblocks-badblocks2 Title: S.M.A.R.T. badblocks badblocks2 Authors: Yves DEMUR Ysabeau đ§¶, patrick_g, bobble bubble, BenoĂźt Sibaud et palm123 Date: 2024ćčŽ06æ26æ„T22:11:08+02:00 License: CC By-SA Tags: stockage et badblocks Score: 53 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.  ---- [S.M.A.R.T](https://fr.wikipedia.org/wiki/Self-Monitoring,_Analysis_and_Reporting_Technology) [E2fsprogs](https://e2fsprogs.sourceforge.net/) [Badblocks2](http://yves.demur.free.fr/ydgu02/guppy-prod-0a3C6F9z/) ---- 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.](https://fr.wikipedia.org/wiki/Self-Monitoring,_Analysis_and_Reporting_Technology) 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)](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=554794#25), 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]( http://yves.demur.free.fr). 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.](https://fr.wikipedia.org/wiki/Self-Monitoring,_Analysis_and_Reporting_Technology). **Que lâesprit « aware » soit en toi, sur tes donnĂ©es et sur ton espace de stockage**