Tout sur la santé des cartes SD 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 présenterons également les meilleures marques de cartes microSD pour Raspberry Pi que nous recommandons.
Si vous le souhaitez, vous pouvez également passer plus bas, pour obtenir les commandes Linux permettant de vérifier l'état actuel de la carte microSD.
L'essentiel : L'intérieur de la carte microSD
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 l'information reste en place même après la coupure de l'alimentation électrique.
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 la programmation de la porte flottante, des tensions électriques nettement plus élevées (par exemple 10 V) sont nécessaires que pour l'opération de lecture normale (par exemple 3,3 V). Pour ce faire, la porte de contrôle (V1/V2/V3) joue un rôle essentiel.
Pour tout effacer, la porte de contrôle chasse les électrons de la porte flottante en appliquant une tension négative élevée.
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 dans le sens des aiguilles d'une montre. S'il reste des informations non modifiées, elles doivent ê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, que nous calculons 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 hautes tensions. 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. Aujourd'hui, 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. Lors de la lecture, le système évalue comment le courant appliqué est conduit différemment par le transistor.
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, la mémoire 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'une mémoire flash Samsung. Le contrôleur a été fabriqué au Japon.
Quatre fabricants produisent des dispositifs flash NAND :
- 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 (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. Elles collaborent encore aujourd'hui pour le développement de mémoires. SanDisk et Toshiba, ainsi que Matshushita, sont les fondateurs de la norme SD, introduite en 1999. SanDisk a également créé la norme microSD.
Nous faisons confiance à la marque SanDisk depuis longtemps, et nous avons eu de très bonnes expériences avec elle jusqu'à présent.
Samsung (recommandé)
Nous recommandons également les cartes mémoire Samsung. 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 pour obtenir un produit solide.
Kingston (NON recommandé)
Nous avons eu une mauvaise expérience avec la fiabilité des cartes Kingston de 128 Go dans un projet critique. Kingston ne dispose pas de ses propres usines et achète la capacité excédentaire à d'autres fabricants de flashes. Par conséquent, il n'y a aucune garantie de 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, la classe de mémoire est importante. 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 aléatoires dispersées, 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.orgVous pouvez vérifier la compatibilité d'une carte mémoire avec votre Raspberry Pi. Remarque importante : le micrologiciel du Raspberry Pi est constamment modifié afin d'améliorer la compatibilité avec les cartes mémoire et d'é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 se lit comme un entier non signé.
Le site mdt (Date de fabrication) indique la date de fabrication de la carte - année et mois.
Vous pouvez comparer les valeurs avec des sites web pour détecter les fraudes commises par de fausses cartes microSD. Je vous recommande de lire 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, comme Transcend, font appel à des fournisseurs différents, de sorte qu'une qualité constante n'est pas 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 fonctionne comme un disque dur normal - des accès en lecture et en écriture se produisent. Linux enregistre des informations dans de nombreux fichiers journaux et, entre autres, met à jour les temps d'accès aux fichiers. Les données changent donc fréquemment. 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 le Pi, vous risquez de perdre les informations contenues dans les caches d'écriture qui n'ont pas été transférées sur la carte 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 intégrés en particulier, c'est-à-dire les systèmes qui remplissent une fonction spécifique 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. Vous pouvez envoyer les journaux via 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 les recouvrements du disque RAM (dans tmpfs), un système peut toujours écrire des fichiers journaux ou apporter des modifications à des fichiers. Vous pouvez synchroniser périodiquement les recouvrements du disque RAM avec des partitions spécialement désignées sur la carte SD. Vous devez faire attention au disque RAM afin 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 si ce n'est pas déjà fait (Raspbian semble le faire 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)
Vous pouvez utiliser la commande suivante 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 en lecture seule avec recouvrement, la réduction constante des opérations d'écriture et le choix d'une bonne carte SD d'une marque réputée permettent d'accroître la stabilité à long terme.
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, nous recommandons d'installer une carte microSD avec un micrologiciel spécial, car un bogue de temporisation 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, puisqu'elles reposent également sur la mémoire flash.
(**) 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.
Si vous souhaitez en savoir plus sur les cartes SD avec votre Raspberry Pi, consultez le site suivant nos nombreux articles sur le sujet ici.
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
ce serait impossible pour une carte SD de qualité grand public normale, à moins d'avoir l'outil MP pour le contrôleur spécifique utilisé, qui n'est jamais disponible.
Ce serait possible si la carte est de qualité industrielle et si elle dispose d'informations SMART (spécifiées dans leur fiche technique respective). Vous pourriez alors écrire un code pour lire les données SMART.
Mais ce n'est que le début du problème. Il n'y a pas de norme industrielle pour la surveillance de l'état des cartes SD. Chaque fabricant implémente donc le protocole différemment et il n'est pas toujours publié.
Le rapport SMART de certains fabricants ne vous donne qu'un pourcentage de la durée de vie restante de la carte, d'autres fournissent des informations plus détaillées, notamment les blocs réservés, les blocs défectueux initiaux, les blocs défectueux ultérieurs, le nombre d'effacements max/min/avg, la durée de vie P/E, etc.
Actuellement, j'ai pu lire les statistiques de santé des cartes de Lexar, ADATA, ATP, Sandisk, Apacer, Metorage, Delkindevices, SiliconePower, Swissbit et d'autres encore.
Ma motivation est de craquer les informations SMART de cartes industrielles d'occasion bon marché produites par Foresee, pour l'instant j'ai réussi à craquer les cartes des séries MPS/M9M/M9H/D7D/X52/X53 et je travaille encore sur d'autres modèles.
J'espère qu'il y aura bientôt un standard industriel pour les informations intelligentes des cartes SD. J'ai aussi trouvé amusant que certaines cartes SD aient une durée de vie TBW supérieure à celle de nombreux SSD lmao.
oh, j'ai oublié de mentionner que la majorité (mais pas toutes, merde.) des cartes donnent des informations SMART en envoyant une commande CMD56 à la carte avec un argument 32bit int, vous aurez besoin de trouver ce nombre magique dans la fiche technique et le format de données respectif pour lire les données. Si vous avez la feuille de données, alors vous avez pratiquement terminé, consultez l'outil sdmon sur github pour un exemple de code.
Si la feuille de données n'est pas disponible ou si le nombre magique n'est pas publié, vous devrez itérer l'espace entier de 31 bits (le bit le plus bas est toujours 1) de int pour le craquer de force, et cela peut prendre de 12 heures à un demi-mois selon votre chance. J'espère qu'il n'y a pas de fabricant maléfique qui commence son nombre magique par 0xF_______. Pour l'instant, tous les numéros magiques que j'ai réussi à craquer/collecter commencent par 0x1_______.
Certaines cartes nécessitent une routine plus complexe pour lire l'information SMART, comme Apacer, mais c'est une bonne chose qu'ils aient fourni les informations nécessaires dans la fiche technique. Apacer fabrique des cartes OEM pour d'autres marques aussi, donc la même routine s'applique.
[...] La santé de la carte SD (y compris les meilleures pratiques pour prendre soin de votre carte SD !) [...]
[...] Tout sur la santé des cartes SD / microSD sur le Raspberry Pi [...]