Alles über den Zustand der SD-Karte / microSD-Karte auf dem Raspberry Pi

Die SD-Karte ist - neben der Stromversorgung - eine wichtige zusätzliche Komponente des Raspberry Pi. Die Überwachung ihres Zustands ist sehr wichtig, um einen reibungslosen Betrieb des Raspberry Pi-Betriebssystems und eine gute Benutzererfahrung zu gewährleisten. Dieser Artikel zeigt Ihnen mehrere Möglichkeiten, wie Sie den Zustand Ihrer microSD-Karte überprüfen und überwachen können.

Zunächst gebe ich einen ausführlichen Überblick über die Funktionsweise von Speicherkarten, damit Sie die Möglichkeiten und Grenzen der Überprüfung des Zustands Ihrer SD-Karte verstehen können. Dann erkläre ich, wie Sie Ihre microSD-Karte schützen können, indem Sie häufige Probleme, die bei Raspberry Pi-Benutzern auftreten, reduzieren. Wir gehen auch auf die besten microSD-Kartenmarken für Raspberry Pi ein, die wir empfehlen. Wenn Sie möchten, können Sie auch weiter nach unten springen, um nur die Linux-Befehle zur Überprüfung des aktuellen microSD-Kartenstatus zu erhalten.

Die Grundlagen: Das Innere der microSD-Karte

Das Innere einer microSD-Karte
Abbildung: Illustration des Inneren einer SD-Karte. Die microSD-Karte hat eine ähnliche Struktur. Bildquelle: CC-BY-SA Korpsvart, Wikimedia Commons

Die microSD-Karte enthält einen Flash-Speicherchip (links im Bild) und einen Mikrocontroller (rechts im Bild, meist ARM-basiert).

Blitzlicht

Der Flash-Speicher speichert Informationen durch "Einfangen" von Elektronendie mit Hochspannung durch einen Nichtleiter in eine so genannte bewegliches Tor(**). Die Elektronen sind also Teil eines Transistors, der je nach der Ladung des schwebenden Gates einen angeschlossenen Strom fließen lässt oder nicht. Theoretisch können sie nicht abfließen, weil das schwebende Gate elektrisch isoliert ist. Das bedeutet, dass die Informationen auch nach dem Abschalten der Stromversorgung erhalten bleiben.

Die Information wird immer zwischen Source (S) und Drain (D) gelesen. In das Floating Gate eingebrachte Elektronen erhöhen z. B. die Schwellenspannung des Transistors, ab der Strom fließen würde. Der Transistor sperrt dann bei einer normalen Lesespannung (leitet nicht).

Zur Programmierung des Floating-Gates werden deutlich höhere elektrische Spannungen (z.B. 10 V) verwendet als für den normalen Lesebetrieb (z.B. 3,3 V). Zu diesem Zweck wird zusätzlich das Steuergate (V1/V2/V3) verwendet.

Zum Löschen werden die Elektronen durch Anlegen einer hohen negativen Spannung über das Steuer-Gate wieder aus dem Floating-Gate herausgetrieben.

Die in microSD-Karten verwendeten NAND-Flash-Komponenten gruppieren die einzelnen Speichertransistoren zu Seiten und mehrere der Seiten zu Blöcken. Eine Seite hat zwischen 512 und 8192 Byte, ein Block kann bis zu 256 Seiten enthalten (also insgesamt 2048 kB bei 8kB Seitengröße).

Das Schreiben (für eine logische "1") kann bitweise oder zumindest byte- / wortweise erfolgen. Das Löschen (für eine logische "0") kann nur blockweise erfolgen. Informationen, die nicht verändert wurden, müssen trotzdem neu einprogrammiert werden.

Flash-Speicher haben aufgrund des Programmierens und Löschens eine begrenzte Lebensdauer, die in Löschzyklen angegeben wird

Der Grund für die begrenzte Lebensdauer ist die Beschädigung der isolierenden Oxidschicht, die das schwebende Gate vor Ladungsverlusten schützt, die durch die hohen Spannungen verursacht werden. Sobald diese Schicht leitfähig wird, können keine Informationen mehr in der Speicherzelle gespeichert werden.

Übrigens: Mehrstufige Zellspeicherzellen

Ursprünglich gab es nur zwei Ladungszustände (1 Bit an Informationen) pro Speicherzelle. Dank mehrerer Floating Gates pro Transistor speichern nun mehrstufige Zellspeicherzellen unterschiedliche Ladungszustände und damit mehrere Bits pro Speichertransistor. Der Transistor leitet dann den angelegten Strom unterschiedlich, was beim Auslesen ausgewertet wird.

Dadurch lässt sich einerseits die Dichte der Speicherzellen deutlich erhöhen, andererseits ist das Auslesen langsamer und die Speicherzellen reagieren wesentlich empfindlicher mit Bitfehlern auf Ladungsverluste. Bei Single-Level-Zellen sind 100.000 bis 1.000.000 Schreib-Löschzyklen möglich, bei TLCs (Triple-Level-Zellen mit drei Bits pro Speicherzelle) ca. 1000 Schreib-Löschzyklen.

Aus diesem Grund haben industrielle SD-Karten in der Regel eine geringere Speicherdichte und verwenden SLC (Single Level Cells), um eine bessere Datenintegrität zu gewährleisten..

Der Controller

Die Aufgabe des Controllers ist die Verwaltung des Blitzes, insbesondere die Durchführung Verschleißnivellierung und Lesefehlerkorrektur. Die Leistung und Langlebigkeit der microSD-Karte hängt entscheidend von den im Controller verwendeten Algorithmen ab.

Flash-Speicher können aufgrund der oben beschriebenen Beschädigung der isolierenden Oxidschicht der Floating-Gates nicht beliebig oft wiederbeschrieben werden. Um Schäden an einzelnen, besonders häufig genutzten Bereichen zu vermeiden, der Controller variiert die physische Zuordnung zu den Blöcken, die vom Dateisystem logisch adressiert werden können (= Wear Leveling).

Diese Variation der physischen Zuweisung ist auch der Grund dafür, dass die Schreibprüfung der SD-Karte (durch Schreiben und Lesen mit Bad-Block-Tools usw.) die wirklich fehlerhaften Blöcke nicht identifiziert und es Ihnen ermöglicht, sie auf der Ebene des Betriebssystems/Dateisystems zu vermeiden! Nur der Flash-Speicher-Controller in der microSD-Karte weiß, welcher Block zu einem bestimmten Zeitpunkt beschrieben oder gelesen wird, und wie bereits erwähnt, kann sich dies im Laufe der Zeit ändern.

Defekte Blöcke (Bad Blocks) sind bereits im fabrikneuen Flash-Speicher vorhanden. Diese defekten Blöcke werden in einem speziellen Bereich des Flash-Speichers markiert.

Es werden auch Fehlerkorrekturinformationen für einzelne Blöcke verwaltet, so dass Lesefehler durch Prüfsummen korrigiert werden können. Der Controller fügt Blöcke mit gehäuften Lesefehlern zur Liste der fehlerhaften Blöcke hinzu und verschiebt die tatsächliche physische Zuordnung des logischen Blocks.

Die microSD-Karte hat - je nach Hersteller - in der Regel etwa 10% freie Kapazität, um die schlechten Blöcke durch gute "Reserveblöcke" zu ersetzen.

Schmutzige kleine Geheimnisse: Probleme mit dem Flash-Speicher

Die Löschung erfolgt nur blockweise

Daten können nur Block für Block gelöscht werden. Das Löschen belastet die Speicherzellen und verkürzt ihre Lebensdauer - es entstehen neue fehlerhafte Blöcke.

Defekte Blöcke aus der Fabrik

Flash-Speicher werden bereits mit defekten Blöcken ausgeliefert. Im Laufe des Betriebes kommen weitere defekte Blöcke (Bad Blocks) hinzu. Der Controller versucht daher, durch Wear-Leveling möglichst gleichmäßig verteilte Blöcke zu schreiben / zu löschen.

MLC und TLC besonders empfindlich

Speicherzellen mit mehreren Ebenen (MLCs) reduzieren die Anzahl der Löschzyklen und damit die langfristige Zuverlässigkeit.

Lesen stören

Ein von mir noch nicht erwähntes, aber besonders perfides Phänomen ist Lesen stören. Selbst wenn nur von der Karte gelesen wird, kann dies - allein durch das Lesen - dazu führen, dass benachbarte Speicherzellen im selben Block ihre Programmierung ändern. Die Wahrscheinlichkeit, dass dies geschieht, steigt nach einigen 100.000 Lesevorgängen stark an.

Um Read Disturb zu vermeiden, protokolliert der Controller daher die Anzahl der Zugriffe auf einen Block, um ihn bei Überschreiten eines Schwellenwertes in einem Stück an eine neue Stelle zu kopieren und den ursprünglichen Block zu löschen. Danach kann der Block wiederverwendet werden.

All dies sind Dinge, die ein Controller kompensieren muss, um uns vorzugaukeln, dass es sich um eine "perfekte Speicherkarte" handelt, während sie im Inneren alles andere als perfekt aussieht!

Nicht zuletzt können mit Röntgenstrahlen geschriebene Bits ungewollt gelöscht werden. Hier kann nur ein röntgensicheres Design der Karte sicherstellen, dass die Daten unversehrt bleiben.

Hersteller & Auswahl einer guten Karte

Sowohl der Mikrocontroller und der Flash-Baustein als auch die fertige microSD-Karte können von verschiedenen Herstellern stammen - die Panasonic-SD-Karte auf dem Beispielfoto hat einen Samsung-Flash, und der Controller wurde in Japan hergestellt.

NAND-Flash-Geräte werden von vier Herstellern produziert:

  • Samsung <- Marktführer
  • Toshiba
  • IM Flash Technologies (Gemeinschaftsunternehmen von Micron Technology und Intel)
  • Hynix in Zusammenarbeit mit Numonyx

Toshiba und Samsung produzieren den Großteil aller Chips.

SanDisk

TL;DR empfohlen

SanDisk und Toshiba haben ein Joint Venture für die Flash-Fertigung. Im Jahr 2009 übertrug SanDisk jedoch die Rechte an den Produktionsstätten an Toshiba und wurde damit zu einem Hersteller von Flash-Speicher ohne Fertigungsanlagen. Die Speicherentwicklung erfolgt nach wie vor gemeinsam. SanDisk und Toshiba sind zusammen mit Matshushita die Begründer des SD-Standards, der 1999 eingeführt wurde. Der microSD-Standard wurde ebenfalls von SanDisk entwickelt.

Wir vertrauen schon seit langem auf die Marke SanDisk und haben bisher sehr gute Erfahrungen damit gemacht.

Samsung

TL;DR empfohlen

Auch die Speicherkarten von Samsung werden häufig empfohlen. Als Marktführer im NAND-Flash-Bereich kann Samsung alle Komponenten der SD-Karte perfekt aufeinander abstimmen und verfügt über alle notwendigen Informationen für ein solides Produkt.

Kingston

TL;DR NICHT empfohlen

Wir haben schlechte Erfahrungen mit der Zuverlässigkeit von 128-GB-Karten von Kingston in einem kritischen Projekt gemacht. Kingston hat keine eigenen Produktionsstätten und kauft überschüssige Kapazitäten von anderen Flash-Herstellern. Daher kann eine gleichbleibende Leistung nicht garantiert werden.

Die folgenden Artikel von Bunny Huang ist in diesem Zusammenhang ebenfalls interessant.

Toshiba

Toshiba, die Nummer #2 auf dem weltweiten DRAM-Markt, vertreibt auch seine eigenen Speicherkartenprodukte. SanDisk und Toshiba sind zusammen mit Matshushita die Begründer des SD-Standards, der 1999 eingeführt wurde. Wir haben bisher keine Erfahrungen mit Toshiba-Karten.

Transcend / Silicon Power

Wir haben auch Transcend- und Silicon Power-Karten verwendet, insbesondere im Niedrigpreissegment. Die Karten sind grundsätzlich gut, aber wir haben bei Transcend höhere Rückläufer/Defekte gesehen als bei SanDisk. Für kritische Projekte würde ich daher eher SanDisk / Samsung empfehlen.

Auswahl einer guten Speicherkarte

Um eine gute Speicherkarte auszuwählen, muss man sich zunächst für einen Hersteller entscheiden. Wir empfehlen Samsung oder SanDiskund möglicherweise Toshiba in die engere Wahl.

Als nächstes sollte die Speicherklasse betrachtet werden. Diese Klasse gibt die schnellste Schreibgeschwindigkeit Block für Block an. Es handelt sich nicht um die Schreibgeschwindigkeit für verstreute Schreibvorgänge mit wahlfreiem Zugriff, die in realen Anwendungen sinnvoller ist.

Eine höhere Klasse ist zwar teurer, wird aber wegen der deutlich höheren Leistung empfohlen. In der Regel versenden wir Karten der Klasse 10.

Unter diese Übersicht auf eLinux.org Eine geeignete Speicherkarte kann dann auf ihre Kompatibilität mit dem Raspberry Pi überprüft werden. Wichtiger Hinweis: Die Firmware des Raspberry Pi wurde mehrmals geändert, um die Kompatibilität mit Speicherkarten zu verbessern und Datenbeschädigungen zu vermeiden.

Sie sollten bei vertrauenswürdigen Quellen bestellen - zum Beispiel, wir bekommen unsere SanDisk microSD-Karten direkt von Raspberry Pi Trading und seriösen, großen deutschen Distributoren. Bei Amazon sollten Sie darauf achten, dass Sie direkt bei Amazon und nicht bei einem Marketplace-Händler bestellen.

Bestimmte Informationen (cid, csd, Datum, manfid, oemid, Serie) der microSD-Karte kann mit Linux gelesen werden, um zu prüfen, ob Sie den richtigen Hersteller erhalten haben. Beispiele mit einer Transcend-Karte:

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)"
Seriennummer:0x401e39f2 mdt:03/2017

Die Hersteller-ID (manfid) wird zugewiesen durch SD-3C LLCsowie die OEM-/Anwendungs-ID (oemid). Die Website oemid identifiziert den OEM der Karte und/oder den Inhalt der Karte.

Der Produktname (Name) ist 5 Zeichen lang (ASCII). hwrev ist die Hardware-Revision und fwrev die Firmware-Revision. Zusammen bilden sie die Produktrevision (hwrev.fwrev).

Die Serie ist die Seriennummer der microSD-Karte. Es handelt sich um ein 32-Bit-Feld, das als Ganzzahl ohne Vorzeichen gelesen werden sollte.

Die mdt (Herstellungsdatum) gibt an, wann die Karte hergestellt wurde - Jahr und Monat.

Die Werte können mit den Werten auf Websites verglichen werden, um Betrug durch gefälschte microSD-Karten zu erkennen. Ich empfehle die Lektüre Bunnys Blogartikel (einer) und dieser Artikel (zwei).

Stabil man/oem Kombinationen einer Marke deuten auf eine gut kontrollierte und konsistente Lieferkette hin. SanDisk hat zum Beispiel die folgende Kombination für alle Einträge im eLinux.org Wiki: man:0x000003 oem:0x5344. Andere Marken wie Transcend wechseln ihre Lieferanten, so dass eine gleichbleibende Qualität nicht mehr garantiert werden kann.

Vermeidung von Datenbeschädigungen während des Betriebs

Die microSD-Karte ist die "Festplatte" des Raspberry Pi. Bei einer normalen Linux-Konfiguration wird sie genau so behandelt wie eine Festplatte - es finden sowohl Lese- als auch Schreibzugriffe statt. Linux protokolliert Informationen in vielen Protokolldateien und aktualisiert unter anderem die Dateizugriffszeiten. Die Daten werden also häufig geändert und überschrieben. Das ist etwas, wofür microSD-Karten von vornherein nicht konzipiert wurden.

Tipp #1: Raspberry Pi richtig herunterfahren und eine gute Stromversorgung verwenden

Auch einen Windows-Computer würden Sie nicht einfach ausstecken. Bei Linux-Computern und insbesondere bei den Raspberry Pi-Computern mit microSD-Kartenunterstützung ist es nur eine Frage der Zeit bevor die Daten bei Stromausfällen beschädigt werden.

Linux verfügt über Schreib-Lese-Caches, um Dateivorgänge zu beschleunigen. Wenn Sie den Pi einfach vom Strom trennen, können Sie die Informationen in den Schreib-Caches verlieren, die noch nicht auf die microSD-Karte geschrieben wurden.

Wie bereits erwähnt, verschiebt der microSD-Kontroller aktiv Daten zur Laufzeit, um den Verschleiß auszugleichen und Lesestörungen zu vermeiden. Dies geschieht ohne das Wissen des Linux-Systems ("transparent"). Und je nach Hersteller mehr oder weniger konservativ. Auch hier können - insbesondere bei Schreibvorgängen! - kann es zu Datenbeschädigungen und -verlusten kommen.

Stellen Sie also sicher, dass nach dem Herunterfahren Ihres Pi die ACT-LED des Raspberry Pi aufhört zu blinken, und ziehen Sie erst dann den Strom.

Eine schlechte Stromversorgung kann auch zu Problemen führen aufgrund von Stromausfälle (Unterspannung). Verwenden Sie im Zweifelsfall das von Raspberry Pi Trading empfohlene/gelieferte Netzteil.

Tipp #2 Nur-Lese-System mit Overlays

Ein Nur-Lese-System schützt die SD-Karte nicht vor Lesestörungen und damit vor Alterung durch die notwendigen Löschzyklen. Dies geschieht jedoch viel langsamer als beim aktiven Schreiben.

Ein schreibgeschütztes Dateisystem hat auch andere Vorteile, z. B. weniger Dateisystemprüfungen beim Starten.

Vor allem eingebettete Systeme - d.h. Systeme, die für einen bestimmten Zweck entwickelt wurden und dann in einer Anwendung (z.B. Digital Signage) installiert werden - benötigen nicht unbedingt die Möglichkeit, ständig neue Software zu installieren und genaue Protokolle vor Ort zu führen. Die Protokolle können über das Netz an einen zentralen Server gesendet werden (ggf. verzögert), und bei Systemaktualisierungen kann das System in den Wartungsmodus versetzt werden, um die Aktualisierungen anzuwenden.

Hier sind einige Informationen aus dem Debian-Projekt, auf dem Raspbian basiert: https://wiki.debian.org/ReadonlyRoot.

Mit RAM-Disk-Overlays (in tmpfs) kann ein System weiterhin Protokolldateien schreiben oder Änderungen an Dateien vornehmen. Die RAM-Disk-Overlays können in regelmäßigen Abständen mit speziell dafür vorgesehenen Partitionen auf der SD-Karte synchronisiert werden. Es muss darauf geachtet werden, dass die RAM-Disk nicht überläuft (wegen der Protokolldateien), und es steht natürlich weniger RAM-Speicher für normale Aktivitäten zur Verfügung.

Wir verwenden diese Technik mit unserem Produkt AnonymeboxEs muss davon ausgegangen werden, dass die Nutzer einfach den Stecker aus der Steckdose ziehen.

Sind Sie auf der Suche nach einem Partner, der eine solide Nur-Lese-Lösung für Ihr Embedded Raspberry Pi Projekt realisiert? Wir (als pi3g e.K.) bieten Beratungs- & Entwicklungsdienstleistungenfür Hardware und Software.

Tipp #3 Verringerung der Schreibvorgänge

Insbesondere bei älteren Kerneln aktualisiert Linux die Zugriffszeit für jeden Dateizugriff gemäß dem POSIX-Standard. Dies bedeutet, dass jeder Lesevorgang automatisch zu einem Schreibvorgang führt.. Es besteht die Möglichkeit, explizit festzulegen noatime in /etc/fstab wenn es nicht bereits gesetzt ist (Raspbian scheint es automatisch zu setzen).

Mehr Informationen über relatime und noatime

Systemprotokoll mit Maske deaktivieren:

systemctl mask systemd-journald.service
Symlink von /etc/systemd/system/systemd-journald.service nach /dev/null erstellt.
sudo systemctl mask rsyslog.service
Symlink von /etc/systemd/system/rsyslog.service nach /dev/null erstellt.

Andere Protokolle, die von anderen Anwendungen erstellt werden, und die Folgen der Deaktivierung dieser Dienste (z. B. dass bestimmte Dienste nicht mehr starten) sollten natürlich im Detail untersucht werden.

Auslagerungsdatei:

Wenn nicht genügend RAM vorhanden ist, verschiebt Linux einzelne RAM-Bereiche in eine SWAP-Datei. (Denken Sie daran, einen Raspberry Pi 4 mit ausreichend RAM zu verwenden, z. B. der Pi 4 / 4 GB oder der Pi 4 / 8 GB für Ihren Anwendungsfall). Mit dem folgenden Befehl kann der Status der SWAP-Datei überprüft werden:

sudo systemctl status dphys-swapfile
● dphys-swapfile.service - LSB: Autogenerierung und Verwendung einer Auslagerungsdatei
Geladen: geladen (/etc/init.d/dphys-swapfile)
Aktiv: aktiv (beendet) seit Sat 2017-07-01 19:11:57 UTC; vor 8min
Prozess: 498 ExecStart=/etc/init.d/dphys-swapfile start (code=exited, status=0/SUCCESS)

Der folgende Befehl kann verwendet werden, um SWAP zu deaktivieren:

sudo systemctl disable dphys-swapfile

Schlussfolgerung

microSD-Karten im Dauereinsatz stellen die langfristige Zuverlässigkeit von Raspberry Pi-basierten Systemen auf eine harte Probe.

Mit der richtigen Stromversorgung, Nur-Lese-Systemen mit Overlays, konsequenter Reduzierung der Schreibvorgänge und der Auswahl einer guten SD-Karte einer bekannten Marke kann die Stabilität langfristig erhöht werden.

Wenn Sie professionelle Unterstützung für Ihr Raspberry Pi basiertes Projekt / Produkt benötigen, kontaktieren Sie uns bitte für eine kostenlose Erstberatung.

Anmerkungen

(*) AnmerkungRaspberry Pi 3, 3B+ und 4 können von USB-Medien oder über das Netzwerk (Ethernet) ohne microSD-Karte booten.

Speziell für das Booten über das Netzwerk ist es nach wie vor empfehlenswert, eine microSD-Karte mit einer speziellen Firmware zu installieren, da ein Timeout-Bug im Bootcode ein stabiles Booten verhindert (Raspberry Pi 3B).

Die obigen Erläuterungen zum Aufbau des Flash-Speichers gelten auch für USB-Sticks, da in diesen ebenfalls Flash-Speicher installiert ist.

(**) AnmerkungEine zunehmend verwendete Alternative zu Floating-Gates sind Charge-Trapping-Flash-Speicher, wobei das Funktionsprinzip dasselbe bleibt. Die Charge Trapping Flash-Zelle ermöglicht höhere Speicherdichten.

1 Kommentar

  1. Veröffentlich von Pete am Oktober 13, 2021 um 8:27 pm

    Hallo,
    Gibt es eine Möglichkeit, den Controller auf der SD-Karte daraufhin zu überprüfen, wie viele schlechte Plocks vorhanden sind?
    Indem ich dies regelmäßig überprüfe, möchte ich ein Trenddiagramm erstellen.
    Ich danke Ihnen für Ihre Arbeit.
    Herzliche Grüße,
    Peter

Hinterlassen Sie einen Kommentar