Tout sur la santé des cartes SD / microSD sur le Raspberry Pi

La carte SD est, avec l'alimentation électrique, un composant supplémentaire essentiel du Raspberry Pi. Il est très important de surveiller son état de santé pour garantir le bon fonctionnement du système d'exploitation de votre Raspberry Pi et une bonne expérience utilisateur. Cet article vous montrera plusieurs façons de vérifier et de surveiller la santé de votre carte microSD.

Tout d'abord, je vais vous donner un aperçu détaillé du fonctionnement des cartes mémoire, afin que vous puissiez comprendre les possibilités et les limites de la vérification de l'état de santé de votre carte SD. Ensuite, j'expliquerai comment protéger votre carte microSD en réduisant les problèmes courants rencontrés par les utilisateurs de Raspberry Pi. Nous aborderons également les meilleures marques de cartes microSD pour Raspberry Pi que nous recommandons. Si vous le souhaitez, vous pouvez également descendre plus bas, pour obtenir simplement les commandes Linux permettant de vérifier l'état actuel de la carte microSD.

L'essentiel : L'intérieur de la carte microSD

Inneres einer microSD Karte
Image : Illustration de l'intérieur d'une carte SD. La carte microSD a une structure similaire. Source de l'image : CC-BY-SA Korpsvart, Wikimedia Commons

La carte microSD contient une puce de mémoire flash (à gauche de l'image), et un microcontrôleur (à droite de l'image, généralement basé sur ARM).

Flash

La mémoire flash stocke les informations en "piégeage" des électronsqui sont "injectés" à l'aide d'une haute tension, à travers un non-conducteur, dans ce que l'on appelle un "système". grille flottante(**). Les électrons font donc partie d'un transistor qui permet ou non le passage d'un courant connecté, en fonction de la charge de la grille flottante. Théoriquement, ils ne peuvent pas s'écouler, car la porte flottante est isolée électriquement. Cela signifie que les informations sont conservées même après la coupure de l'alimentation en courant.

L'information est toujours lue entre la source (S) et le drain (D). Les électrons introduits dans la grille flottante augmentent par exemple la tension de seuil du transistor, à partir de laquelle le courant circulerait. Le transistor se bloque alors à une tension de lecture normale (il ne conduit pas).

Pour programmer la porte flottante, on utilise des tensions électriques nettement plus élevées (par exemple 10 V) que pour le fonctionnement normal de la lecture (par exemple 3,3 V). Pour cela, on utilise en plus la porte de commande (V1/V2/V3).

Pour l'effacement, les électrons sont à nouveau chassés de la grille flottante par l'application d'une tension négative élevée via la grille de commande.

Les composants flash NAND utilisés dans les cartes microSD regroupent les différents transistors de mémoire en pages, et plusieurs de ces pages en blocs. Une page comporte entre 512 et 8192 octets, un bloc peut contenir jusqu'à 256 pages (donc un total de 2048 kB avec une taille de page de 8kB).

L'écriture (pour un "1" logique) peut se faire par bit ou au moins par octet/mot. L'effacement (pour un "0" logique) ne peut se faire que par bloc. Les informations qui n'ont pas été modifiées doivent encore être programmées à nouveau.

Les mémoires flash ont une durée de vie limitée en raison de la programmation et de l'effacement, qui est donnée en cycles d'effacement.

La raison de cette durée de vie limitée est la détérioration de la couche d'oxyde isolante, qui protège la grille flottante contre les fuites de charge, causées par les tensions élevées. Dès que cette couche devient conductrice, la cellule de mémoire ne peut plus contenir d'informations.

Aside : Cellules de mémoire à plusieurs niveaux

Initialement, il n'y avait que deux états de charge (1 bit d'information) par cellule de mémoire. Désormais, grâce à plusieurs portes flottantes par transistor, les cellules de mémoire à plusieurs niveaux stockent différents états de charge et donc plusieurs bits par transistor de mémoire. Le transistor conduit alors différemment le courant appliqué, ce qui est évalué lors de la lecture.

D'une part, cela permet d'augmenter sensiblement la densité des cellules de mémoire, mais d'autre part, la lecture est plus lente et les cellules de mémoire réagissent de manière beaucoup plus sensible aux pertes de charge avec des erreurs de bits. Avec les cellules à un niveau, 100 000 à 1 000 000 de cycles d'écriture-effacement sont possibles, avec les TLC (cellules à trois niveaux avec trois bits par cellule de mémoire) environ 1000 cycles d'écriture-effacement.

C'est la raison pour laquelle les cartes SD industrielles ont généralement des densités de mémoire plus faibles et utilisent des cellules à niveau unique (SLC), pour une meilleure intégrité des données..

Le contrôleur

La tâche du contrôleur est de gérer le flash, et en particulier d'effectuer nivellement de l'usure et correction des erreurs de lecture. Les performances et la longévité de la carte microSD dépendent de manière décisive des algorithmes utilisés dans le contrôleur.

La mémoire flash ne peut pas être réécrite aussi souvent que nécessaire en raison de l'endommagement de la couche d'oxyde isolante des grilles flottantes comme décrit ci-dessus. Pour éviter d'endommager les zones individuelles qui sont utilisées particulièrement fréquemment, le contrôleur varie l'allocation physique aux blocs qui peuvent être adressés logiquement par le système de fichiers (= wear leveling).

Cette variation de l'allocation physique est également la raison pour laquelle le test en écriture de la carte SD (en écrivant et en lisant avec des outils de détection des blocs défectueux, etc.) n'identifiera pas les véritables blocs défectueux et vous permettra de les éviter au niveau du système d'exploitation/système de fichiers ! Seul le contrôleur de mémoire flash à l'intérieur de la carte microSD sait quel bloc est écrit ou lu à un moment donné, et comme nous l'avons vu, cela peut changer avec le temps.

Les blocs défectueux (bad blocks) sont déjà présents dans la mémoire flash neuve. Ces blocs défectueux sont marqués dans une zone spéciale de la mémoire flash.

Les informations de correction d'erreur pour les blocs individuels sont également gérées afin que les erreurs de lecture puissent être corrigées par des sommes de contrôle. Le contrôleur ajoute les blocs présentant des erreurs de lecture groupées à la liste des blocs défectueux, et décale l'allocation physique réelle du bloc logique.

La carte microSD dispose généralement - selon le fabricant - d'une capacité de réserve d'environ 10% pour remplacer les blocs défectueux par de bons "blocs de réserve".

De sales petits secrets : Problèmes de mémoire flash

La suppression se fait uniquement dans le sens des blocs

Les données ne peuvent être effacées que bloc par bloc. L'effacement sollicite les cellules de la mémoire et réduit leur durée de vie - de nouveaux blocs défectueux sont créés.

Blocs défectueux provenant de l'usine

Les mémoires flash sont déjà livrées avec des blocs défectueux. Au cours du fonctionnement, d'autres blocs défectueux (bad blocks) sont ajoutés. Le contrôleur essaie donc d'écrire/effacer des blocs aussi uniformément répartis que possible par wear-leveling.

MLC et TLC particulièrement sensibles

Les cellules de mémoire à cellules multi-niveaux (MLC) réduisent le nombre de cycles d'effacement et donc la fiabilité à long terme.

Perturbation de la lecture

Un phénomène que je n'ai pas encore mentionné, mais qui est particulièrement perfide, est le suivant Perturbation de la lecture. Même s'il ne fait que lire la carte, il peut - par sa seule lecture - amener les cellules de mémoire voisines du même bloc à modifier leur programmation. La probabilité que cela se produise augmente fortement après quelques 100 000 lectures.

Pour éviter les perturbations de lecture, le contrôleur enregistre donc le nombre d'accès à un bloc afin de le copier en un seul morceau à un nouvel emplacement lorsqu'un seuil est dépassé, et de supprimer le bloc original. Après cela, le bloc peut être réutilisé à nouveau.

Ce sont autant de choses qu'un contrôleur doit compenser pour nous faire croire qu'il s'agit d'une "carte mémoire parfaite" à l'extérieur, alors qu'elle est tout sauf parfaite à l'intérieur !

Enfin et surtout, les bits écrits par les rayons X peuvent être effacés involontairement. Dans ce cas, seule une conception de la carte sécurisée contre les rayons X peut garantir que les données restent intactes.

Fabricant et sélection d'une bonne carte

Le microcontrôleur, le flash et la carte microSD finie peuvent provenir de différents fabricants. La carte SD Panasonic de la photo d'exemple est équipée d'un flash Samsung, et le contrôleur a été fabriqué au Japon.

Les dispositifs flash NAND sont produits par quatre fabricants :

  • Samsung <- leader du marché
  • Toshiba
  • IM Flash Technologies (coentreprise entre Micron Technology et Intel)
  • Hynix en coopération avec Numonyx

Toshiba et Samsung produisent la majorité de toutes les puces.

SanDisk

TL;DR recommandé

SanDisk et Toshiba ont une entreprise commune pour la fabrication de flash. Cependant, en 2009, SanDisk a transféré les droits sur les fabriques à Toshiba pour devenir une entreprise commune. fabricant de mémoire flash sans usine. Le développement des mémoires se fait toujours ensemble. SanDisk et Toshiba, ainsi que Matshushita, sont les fondateurs de la norme SD, introduite en 1999. La norme microSD a également été créée par SanDisk.

Nous faisons confiance à la marque SanDisk depuis longtemps, et nous avons eu de très bonnes expériences avec elle jusqu'à présent.

Samsung

TL;DR recommandé

Les cartes mémoire Samsung sont également fréquemment recommandées. En tant que leader du marché dans le secteur de la flash NAND, Samsung est en mesure d'adapter parfaitement tous les composants de la carte SD les uns aux autres et dispose de toutes les informations nécessaires à un produit solide.

Kingston

TL;DR PAS recommandé

Nous avons eu une mauvaise expérience avec la fiabilité des cartes Kingston 128 GB dans un projet critique. Kingston ne dispose pas de ses propres fabs et achète la capacité excédentaire d'autres fabricants de flash. Par conséquent, il est impossible de garantir des performances constantes.

Les éléments suivants article par Bunny Huang est également intéressant dans ce contexte.

Toshiba

Toshiba, en tant que #2 sur le marché mondial de la DRAM, vend également ses propres produits de cartes mémoire. SanDisk et Toshiba, ainsi que Matshushita, sont les fondateurs de la norme SD, introduite en 1999. Nous n'avons pas d'expérience avec les cartes Toshiba jusqu'à présent.

Transcend / Silicon Power

Nous avons également utilisé des cartes Transcend et Silicon Power, surtout dans la gamme à bas prix. Les cartes sont fondamentalement bonnes, mais nous avons constaté des retours / défauts plus élevés avec Transcend qu'avec SanDisk. Pour les projets critiques, je recommanderais donc plutôt SanDisk / Samsung.

Choisir une bonne carte mémoire

Pour choisir une bonne carte mémoire, la première chose à faire est de choisir le fabricant. Nous recommandons Samsung ou SanDisket éventuellement Toshiba, pour la liste des candidats retenus.

Ensuite, il faut tenir compte de la classe de mémoire. Cette classe indique la vitesse d'écriture la plus rapide, bloc par bloc. Il ne s'agit pas de la vitesse d'écriture pour les écritures à accès aléatoire dispersé, qui est plus significative dans les applications du monde réel.

Une classe supérieure est plus chère, mais elle est recommandée en raison de l'augmentation significative des performances. Nous expédions généralement des cartes de classe 10.

Sur cet aperçu sur eLinux.org une carte mémoire appropriée peut alors être vérifiée pour sa compatibilité avec le Raspberry Pi. Note importante : le firmware du Raspberry Pi a été modifié plusieurs fois pour une meilleure compatibilité avec les cartes mémoire et pour éviter la corruption des données.

Vous devez commander auprès de sources fiables, par exemple, nous obtenons nos cartes microSD SanDisk directement auprès de Raspberry Pi Trading et de grands distributeurs allemands réputés. Sur Amazon, veillez à commander directement auprès d'Amazon, et non auprès d'un détaillant de la place de marché.

Certaines informations (cid, csd, date, manfid, oemid, serial) de la carte microSD peut être lu avec Linux pour vérifier que vous avez reçu le bon fabricant. Exemples avec une carte Transcend :

cd /sys/class/mmc_host/mmc?/mmc?:*
echo "man:$(cat manfid) oem:$(cat oemid) name:$(cat name) hwrev:$(cat hwrev) fwrev:$(cat fwrev)"
 man:0x000074 oem:0x4a60 name:USD hwrev:0x1 fwrev:0x0
echo "serial:$(cat serial) mdt:$(cat date)"
serial:0x401e39f2 mdt:03/2017

L'ID du fabricant (manfid) est attribué par SD-3C LLCainsi que l'ID de l'OEM/de l'application (oemid). Le site oemid identifie l'équipementier de la carte et/ou le contenu de la carte.

Le nom du produit (nom) est composé de 5 caractères (ASCII). hwrev est la révision du matériel, et fwrev la révision du microprogramme. Ensemble, ils constituent la révision du produit (hwrev.fwrev).

Le site série est le numéro de série de la carte microSD, c'est un champ de 32 bits qui doit être lu comme un entier non signé.

Le site mdt (Date de fabrication) indique la date de fabrication de la carte - année et mois.

Les valeurs peuvent être comparées à celles des sites web pour détecter les fraudes par de fausses cartes microSD. Je recommande la lecture de Article du blog de Bunny (un) et cet article (deux).

Stable man/oem Les combinaisons d'une marque indiquent une chaîne d'approvisionnement bien contrôlée et cohérente. Par exemple, SanDisk a la combinaison suivante pour toutes les entrées dans le Wiki eLinux.org: man:0x000003 oem:0x5344. D'autres marques, telles que Transcend, varient leurs fournisseurs, de sorte qu'une qualité constante ne peut plus être garantie.

Éviter la corruption des données pendant le fonctionnement

La carte microSD est le "disque dur" du Raspberry Pi. Avec une configuration Linux normale, elle est traitée exactement de la même manière qu'un disque dur - les accès en lecture et en écriture ont lieu. Linux enregistre des informations dans de nombreux fichiers journaux et, entre autres, met à jour les temps d'accès aux fichiers. Les données sont donc fréquemment modifiées et écrasées. Les cartes microSD n'ont jamais été conçues pour cela.

Astuce #1 : Arrêter correctement le Raspberry Pi et utiliser une bonne alimentation électrique

Vous ne débrancheriez pas non plus un ordinateur Windows. Avec les ordinateurs Linux, et surtout avec les Raspberry Pi équipés de cartes microSD, ce n'est qu'une question de temps... avant que la corruption des données ne se produise pendant les coupures de courant.

Linux dispose de caches en lecture-écriture pour accélérer les opérations sur les fichiers. Lorsque vous débranchez l'alimentation du Pi, vous risquez de perdre les informations contenues dans les caches d'écriture qui n'ont pas encore été écrites sur la microSD.

Comme nous l'avons mentionné précédemment, le contrôleur microSD déplace activement les données au moment de l'exécution afin de niveler l'usure et d'éviter les perturbations de lecture. Cela se passe à l'insu du système Linux ("transparent"). Et selon le fabricant, de manière plus ou moins conservatrice. Ici aussi - surtout pendant les opérations d'écriture ! - des dommages et des pertes de données peuvent se produire.

Vous devez donc vous assurer qu'après avoir éteint votre Pi, la LED ACT du Raspberry Pi cesse de clignoter, et seulement ensuite, débrancher l'alimentation.

Une mauvaise alimentation peut également entraîner des problèmes dus à pannes d'électricité (sous-tension). En cas de doute, utilisez l'alimentation recommandée / fournie par Raspberry Pi Trading.

Tip #2 Système de lecture seule avec superpositions

Un système de lecture seule ne protège pas la carte SD des perturbations de lecture, et donc du vieillissement dû aux cycles d'effacement nécessaires. Cependant, cela se produit beaucoup plus lentement que lors d'une écriture active.

Un système de fichiers en lecture seule présente également d'autres avantages, par exemple moins de vérifications du système de fichiers au démarrage.

Les systèmes embarqués, c'est-à-dire les systèmes qui ont été développés dans un but précis et qui sont ensuite installés dans une application (par exemple, la signalisation numérique), n'ont pas nécessairement besoin de pouvoir installer constamment de nouveaux logiciels et de conserver des journaux précis sur place. Les journaux peuvent être envoyés par le réseau à un serveur central (en différé si nécessaire), et pour les mises à jour du système, le système peut être mis en mode maintenance pour appliquer les mises à jour.

Voici quelques informations provenant du projet Debian sur lequel Raspbian est basé : https://wiki.debian.org/ReadonlyRoot.

En utilisant des superpositions de disques RAM (dans tmpfs), un système peut toujours écrire des fichiers journaux ou apporter des modifications aux fichiers. Les superpositions du disque RAM peuvent être synchronisées périodiquement avec des partitions spécialement désignées sur la carte SD. Il faut faire attention au disque RAM pour qu'il ne déborde pas (à cause des fichiers journaux), et il y a bien sûr moins de mémoire RAM disponible pour les activités normales.

Nous utilisons cette technique avec notre produit Anonymeboxoù l'on peut supposer que les utilisateurs le débranchent simplement de la prise de courant.

Vous cherchez un partenaire pour réaliser une solution solide de lecture seule pour votre projet de Raspberry Pi embarqué ? Nous (en tant que pi3g e.K.) offrons des services de conseil et de développementpour le matériel et les logiciels.

Conseil #3 Réduction des opérations d'écriture

En particulier avec les anciens noyaux, Linux met à jour le temps d'accès pour chaque accès à un fichier, conformément à la norme POSIX. Cela signifie que chaque opération de lecture entraîne automatiquement une opération d'écriture.. Il est possible de définir explicitement noatime sur /etc/fstab s'il n'est pas déjà défini (Raspbian semble le définir automatiquement).

Plus d'informations sur relatime et noatime

Désactiver le journal du système en utilisant le masque :

systemctl mask systemd-journald.service
Création d'un lien symbolique de /etc/systemd/system/systemd-journald.service vers /dev/null.
sudo systemctl mask rsyslog.service
Création d'un lien symbolique de /etc/systemd/system/rsyslog.service vers /dev/null.

Les autres journaux créés par d'autres applications, et les conséquences de la désactivation de ces services (par exemple, certains services ne démarrent plus) doivent bien sûr être examinés en détail.

Fichier d'échange :

S'il n'y a pas assez de RAM, Linux déplace des zones de RAM individuelles dans un fichier SWAP. (Pensez à utiliser un Raspberry Pi 4 avec suffisamment de RAM, par exemple le Pi 4 / 4 GB ou le Pi 4 / 8 GB pour votre cas d'utilisation). La commande suivante permet de vérifier l'état du fichier SWAP :

sudo systemctl status dphys-swapfile
● dphys-swapfile.service - LSB : Autogénérer et utiliser un fichier d'échange.
Chargé : chargé (/etc/init.d/dphys-swapfile).
Active : active (a quitté) depuis le samedi 2017-07-01 19:11:57 UTC ; il y a 8 minutes.
Process : 498 ExecStart=/etc/init.d/dphys-swapfile start (code=exited, status=0/SUCCESS)

La commande suivante peut être utilisée pour désactiver le SWAP :

sudo systemctl disable dphys-swapfile

Conclusion

Les cartes microSD utilisées en permanence mettent à rude épreuve la fiabilité à long terme des systèmes basés sur les Raspberry Pi.

L'utilisation d'une alimentation électrique adaptée, de systèmes de lecture seule avec recouvrement, la réduction constante des opérations d'écriture et le choix d'une bonne carte SD d'une marque connue permettent d'accroître la stabilité à long terme.

Si vous avez besoin d'un soutien professionnel pour votre projet/produit basé sur Raspberry Pi, veuillez nous contacter pour une première consultation gratuite..

Notes

(*) NoteLes Raspberry Pi 3, 3B+ et 4 peuvent démarrer à partir d'un support USB ou d'un réseau (Ethernet), sans carte microSD.

En particulier pour un démarrage par le réseau, il est toujours recommandé d'installer une carte microSD avec un firmware spécial, car un bug de timeout dans le code de démarrage empêche un démarrage stable (Raspberry Pi 3B).

Les explications ci-dessus concernant la structure de la mémoire flash s'appliquent également aux clés USB, puisque la mémoire flash y est également installée.

(**) NoteLes mémoires flash à piégeage de charge sont une alternative de plus en plus utilisée aux portes flottantes, mais le principe de fonctionnement reste le même. La cellule flash à piégeage de charge permet des densités de mémoire plus élevées.

1 commentaire

  1. Pete sur octobre 13, 2021 à 8:27

    Salut,
    Y a-t-il un moyen de vérifier le contrôleur dans la carte SD, combien de mauvais plocks sont présents ?
    En vérifiant cela périodiquement, je voudrais construire un graphique de tendance.
    Merci pour ce travail.
    Regards,
    Peter

Laissez un commentaire