Alles over de gezondheid van SD-kaarten op de Raspberry Pi

Gezondheid SD-kaart

De SD-kaart is - naast de voeding - een kritisch extra onderdeel van de Raspberry Pi. De gezondheid van de SD-kaart in de gaten houden is erg belangrijk voor een soepele werking van uw Raspberry Pi besturingssysteem en een goede gebruikerservaring. Dit artikel zal u verschillende manieren tonen om de gezondheid van uw microSD-kaart te controleren en te bewaken.

Eerst geef ik een diepgaand overzicht van hoe geheugenkaarten werken, zodat je de mogelijkheden en beperkingen van het controleren van de gezondheidstoestand van je SD-kaart kunt begrijpen.

Daarna leg ik uit hoe je je microSD-kaart kunt beschermen door veelvoorkomende problemen van Raspberry Pi-gebruikers te verminderen. We gaan ook in op de beste merken microSD-kaarten voor Raspberry Pi die we aanbevelen.

Als je wilt, kun je ook verder naar beneden gaan, om alleen de Linux-commando's te krijgen om de huidige status van de microSD-kaart te controleren.

Grondbeginselen: Binnenkant van de microSD-kaart

Inneres einer microSD Karte
Afbeelding: Illustratie van de binnenkant van een SD-kaart. De microSD-kaart heeft een soortgelijke structuur. Afbeelding bron: CC-BY-SA Korpsvart, Wikimedia Commons

De microSD-kaart bevat een flash-geheugenchip (links op de foto), en een microcontroller (rechts op de foto, meestal ARM-gebaseerd).

Flash

Flashgeheugen slaat informatie op door "vangen" elektronendie met hoogspanning door een niet-geleider worden "geïnjecteerd" in een zgn. vlottende poort(**). De elektronen maken dus deel uit van een transistor die al dan niet een aangesloten stroom kan laten lopen, afhankelijk van de lading van de zwevende poort. Theoretisch kunnen ze niet wegvloeien, omdat de zwevende poort elektrisch geïsoleerd is. Dit betekent dat de informatie blijft staan, zelfs nadat de stroomtoevoer is uitgeschakeld.

De informatie wordt steeds afgelezen tussen bron (S) en drain (D). Elektronen die in de zwevende poort worden gebracht, verhogen b.v. de drempelspanning van de transistor, van waaruit stroom zou gaan lopen. De transistor blokkeert dan bij een normale leesspanning (geleidt niet).

Voor het programmeren van de zwevende poort zijn aanzienlijk hogere elektrische spanningen (bijv. 10 V) nodig dan voor normaal lezen (bijv. 3,3 V). Om dit te doen, speelt ook de controlepoort (V1/V2/V3) een sleutelrol.

Om alles te wissen, drijft de controlepoort elektronen uit de zwevende poort door een hoge negatieve spanning aan te leggen.

NAND flash componenten die in microSD kaarten worden gebruikt groeperen de individuele geheugentransistors in pagina's, en verschillende van de pagina's in blokken. Een pagina heeft tussen 512 en 8192 bytes, een blok kan tot 256 pagina's bevatten (dus een totaal van 2048 kB met een paginagrootte van 8 kB).

Schrijven (voor een logische "1") kan bitgewijs of op zijn minst byte/woordgewijs. Wissen (voor een logische "0") kan alleen bloksgewijs. Als er ongewijzigde informatie is, moet die opnieuw worden geprogrammeerd.

Flashgeheugens hebben een beperkte levensduur door het programmeren en wissen, wat we berekenen in wiscycli.

De reden voor de beperkte levensduur is schade aan de isolerende oxidelaag, die de zwevende gate beschermt tegen ladingslekkage, veroorzaakt door de hoge spanningen. Zodra deze laag geleidend wordt, kan de geheugencel geen informatie meer vasthouden.

Terzijde: Multi-level celgeheugen cellen

Aanvankelijk waren er slechts twee ladingstoestanden (1 bit aan informatie) per geheugencel. Nu, dankzij meerdere zwevende poorten per transistor, slaan geheugencellen met meerdere niveaus verschillende ladingstoestanden op en dus meerdere bits per geheugentransistor. Tijdens het uitlezen evalueert het systeem hoe de toegepaste stroom anders door de transistor wordt geleid.

Enerzijds kan daardoor de dichtheid van de geheugencellen aanzienlijk worden verhoogd, maar anderzijds verloopt het uitlezen langzamer en reageren de geheugencellen veel gevoeliger met bitfouten op ladingverliezen. Met single-level cellen zijn 100.000 tot 1.000.000 write-erase cycli mogelijk, met TLC's (triple-level cellen met drie bits per geheugencel) ca. 1000 write-erase cycli.

Dit is de reden dat industriële SD-kaarten gewoonlijk een lagere geheugendichtheid hebben, en SLC (single level cells) gebruiken, voor een betere gegevensintegriteit.

De controleur

De controller heeft tot taak de flitser te beheren, en in het bijzonder om nivellering van slijtage en correctie van leesfouten. De prestaties en de levensduur van de microSD-kaart hangen in beslissende mate af van de algoritmen die in de controller worden gebruikt.

Flash-geheugen kan niet zo vaak worden herschreven als nodig is vanwege beschadiging van de isolerende oxidelaag van de zwevende poorten, zoals hierboven beschreven. Om beschadiging van afzonderlijke gebieden die bijzonder vaak worden gebruikt te voorkomen, de controller varieert de fysieke toewijzing tot de blokken die logisch kunnen worden aangesproken door het bestandssysteem (= wear leveling).

Deze variatie van de fysieke toewijzing is ook de reden dat het schrijven-testen van de SD-kaart (door te schrijven & lezen met bad block tools, enz.) in feite niet de echte slechte blokken zal identificeren en u in staat zal stellen om ze te vermijden op het besturingssysteem / bestandssysteem niveau! Alleen de flash-geheugen-controller in de microSD-kaart weet welk blok op een bepaald moment wordt geschreven naar / gelezen van, en zoals besproken kan dit in de loop van de tijd veranderen.

Defecte blokken (slechte blokken) zijn al aanwezig in gloednieuwe flash-geheugens. Deze defecte blokken worden gemarkeerd in een speciaal gebied van het flash-geheugen.

Foutcorrectie-informatie voor individuele blokken wordt ook beheerd, zodat leesfouten kunnen worden gecorrigeerd door middel van checksums. De controller voegt blokken met geclusterde leesfouten toe aan de lijst van slechte blokken, en verschuift de feitelijke fysieke toewijzing van het logische blok.

De microSD-kaart heeft gewoonlijk - afhankelijk van de fabrikant - ongeveer 10% reservecapaciteit om de slechte blokken te vervangen door goede "reserveblokken".

Vieze kleine geheimpjes: Flash geheugen problemen

Verwijdering is alleen met de klok mee

Gegevens kunnen alleen blok voor blok worden gewist. Wissen zet de geheugencellen onder druk en verkort hun levensduur - er worden nieuwe slechte blokken gecreëerd.

Defecte blokken uit de fabriek

Flashgeheugens worden reeds met defecte blokken geleverd. In de loop van het gebruik worden nog meer defecte blokken (slechte blokken) toegevoegd. Daarom probeert de controller door middel van wear-leveling de blokken zo gelijkmatig mogelijk te verdelen.

MLC en TLC bijzonder gevoelig

Geheugencellen met meerdere niveaus (MLC's) verminderen het aantal wiscycli en daarmee de betrouwbaarheid op lange termijn.

Lees Storen

Een fenomeen dat ik nog niet heb genoemd, maar dat bijzonder verraderlijk is, is Lees Storen. Zelfs wanneer alleen van de kaart wordt gelezen, kan dit - alleen al door het lezen - ertoe leiden dat naburige geheugencellen in hetzelfde blok hun programmering wijzigen. De waarschijnlijkheid dat dit gebeurt neemt sterk toe na een paar 100.000 lezingen.

Om Read Disturb te vermijden logt de controller daarom het aantal toegangen tot een blok, om het in één stuk naar een nieuwe locatie te kopiëren wanneer een drempel wordt overschreden, en het oorspronkelijke blok te wissen. Daarna kan het blok opnieuw worden gebruikt.

Dit zijn allemaal dingen die een controller moet compenseren om ons voor te houden dat het aan de buitenkant een "perfecte geheugenkaart" is, terwijl hij er aan de binnenkant allesbehalve perfect uitziet!

Tenslotte kunnen door röntgenstralen geschreven bits onbedoeld worden gewist. Hier kan alleen een röntgenveilig ontwerp van de kaart ervoor zorgen dat de gegevens intact blijven.

Fabrikant en selectie van een goede kaart

Zowel de microcontroller en het flash-apparaat als de uiteindelijke microSD-kaart kunnen van verschillende fabrikanten komen - de Panasonic SD-kaart op de voorbeeldfoto heeft een Samsung flash. De controller is gemaakt in Japan.

Er zijn vier fabrikanten die NAND-flashapparaten produceren:

  • Samsung <- marktleider
  • Toshiba
  • IM Flash Technologies (joint venture tussen Micron Technology en Intel)
  • Hynix in samenwerking met Numonyx

Toshiba en Samsung produceren het merendeel van alle chips.

SanDisk (aanbevolen)

SanDisk en Toshiba hebben een joint venture voor flashproductie. In 2009 heeft SanDisk de rechten op de fabrieken echter overgedragen aan Toshiba om een fabrikant van flashgeheugen zonder fabrieken. Ze werken nog steeds samen op het gebied van geheugenontwikkeling. SanDisk en Toshiba zijn samen met Matshushita de grondleggers van de SD-standaard, die in 1999 werd geïntroduceerd. SanDisk heeft ook de microSD-standaard gecreëerd.

Wij vertrouwen al geruime tijd op het merk SanDisk en hebben er tot nu toe zeer goede ervaringen mee gehad.

Samsung (aanbevolen)

We raden ook Samsung geheugenkaarten aan. Als marktleider in de NAND-flashsector kan Samsung alle onderdelen van de SD-kaart perfect op elkaar afstemmen en heeft het alle benodigde informatie voor een solide product.

Kingston (NIET aanbevolen)

We hadden een slechte ervaring met de betrouwbaarheid van 128 GB Kingston-kaarten in een kritiek project. Kingston heeft geen eigen fabrieken en koopt overtollige capaciteit van andere flashfabrikanten. Daardoor is er geen garantie voor consistente prestaties.

De volgende artikel door Bunny Huang is ook interessant in deze context.

Toshiba

Toshiba, als de #2 op de wereldwijde DRAM-markt, verkoopt ook zijn eigen geheugenkaartproducten. SanDisk en Toshiba zijn, samen met Matshushita, de grondleggers van de SD-standaard, die in 1999 werd geïntroduceerd. Wij hebben tot dusver geen ervaring met Toshiba-kaarten.

Transcend / Silicon Power

We hebben ook Transcend en Silicon Power kaarten gebruikt, vooral in het goedkope segment. De kaarten zijn in principe goed, maar we hebben bij Transcend meer retourzendingen / defecten gezien dan bij SanDisk. Voor kritische projecten zou ik daarom eerder SanDisk / Samsung aanraden.

Een goede geheugenkaart kiezen

Om een goede geheugenkaart te kiezen, moet u eerst de fabrikant kiezen. Wij adviseren Samsung of SanDisken mogelijk Toshiba, voor de shortlist.

Vervolgens is de geheugenklasse belangrijk. Deze klasse geeft de snelste schrijfsnelheid blok voor blok aan. Het is niet de schrijfsnelheid voor verspreide random access schrijfsessies, die meer betekenis heeft in echte toepassingen.

Een hogere klasse is duurder, maar wordt aanbevolen vanwege de aanzienlijke prestatieverhoging. Wij verzenden gewoonlijk klasse 10 kaarten.

In dit overzicht op eLinux.orgkun je controleren of een geschikte geheugenkaart compatibel is met je Raspberry Pi. Belangrijke opmerking: ze passen de firmware van de Raspberry Pi voortdurend aan voor betere compatibiliteit met geheugenkaarten en om gegevenscorruptie te voorkomen.

U moet bestellen bij betrouwbare bronnen - bijvoorbeeld, krijgen we onze SanDisk microSD kaarten rechtstreeks bij Raspberry Pi Trading, en gerenommeerde, grote Duitse distributeurs. Op Amazon, zorg ervoor dat u rechtstreeks bij Amazon bestelt, niet bij een marktplaatsverkoper.

Bepaalde informatie (cid, csd, datum, manfid, oemid, serie) van de microSD-kaart kan worden gelezen met Linux om te controleren of u de juiste fabrikant hebt ontvangen. Voorbeelden met een Transcend kaart:

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

De fabrikant ID (manfid) wordt toegewezen door SD-3C LLC, alsmede de OEM / Application ID (oemid). De oemid identificeert de OEM van de kaart en/of de inhoud van de kaart.

De productnaam (naam) is 5 tekens lang (ASCII). hwrev is de hardware revisie, en fwrev de firmware revisie. Samen vormen zij de productrevisie (hwrev.fwrev).

De serieel is het serienummer van de microSD-kaart, het is een 32-bits veld dat wordt gelezen als een niet-ondertekend geheel getal.

De mdt (Fabricagedatum) geeft aan wanneer de kaart werd vervaardigd - jaar en maand.

Je kunt de waarden vergelijken met websites om fraude met valse microSD-kaarten op te sporen. Ik raad aan om te lezen Bunny's blog artikel (een) en dit artikel (twee).

Stabiel man/oem combinaties van een merk wijzen op een goed gecontroleerde en consistente toeleveringsketen. SanDisk heeft bijvoorbeeld de volgende combinatie voor alle vermeldingen in de eLinux.org Wiki: man:0x000003 oem:0x5344. Andere merken, zoals Transcend, hebben verschillende leveranciers, dus consistente kwaliteit is niet zeker.

Corruptie van gegevens tijdens de werking voorkomen

De microSD-kaart is de "harde schijf" van de Raspberry Pi. Met een normale Linux-configuratie werkt het als een normale harde schijf - er wordt zowel gelezen als geschreven. Linux logt informatie in veel logbestanden en werkt onder andere de toegangstijden van bestanden bij. Gegevens veranderen dus vaak. Dit is iets waar microSD-kaarten in eerste instantie nooit voor ontworpen zijn.

Tip #1: Sluit Raspberry Pi goed af & gebruik een goede voeding

Je zou ook niet zomaar de stekker uit een Windows-computer trekken. Met Linux computers, en vooral de microSD kaart-ondersteunde Raspberry Pi's, is het slechts een kwestie van tijd voordat er datacorruptie optreedt tijdens stroomonderbrekingen.

Linux heeft lees-schrijf caches om bestandsoperaties te versnellen. Als je de stroom van de Pi afhaalt, verlies je mogelijk de informatie in de schrijfcaches die niet op de microSD zijn terechtgekomen.

Zoals eerder vermeld, verschuift de microSD-controller actief gegevens tijdens runtime voor wear-leveling, en het vermijden van leesstoringen. Dit gebeurt zonder medeweten van het Linux systeem ("transparant"). En afhankelijk van de fabrikant, meer of minder conservatief. Ook hier - vooral tijdens schrijfoperaties! - kunnen gegevens beschadigd raken en verloren gaan.

U moet er dus voor zorgen dat, na het afsluiten van uw Pi, de ACT-LED van de Raspberry Pi stopt met knipperen, en dan pas de stroom eraf halen.

Een slechte voeding kan ook leiden tot problemen als gevolg van brownouts (onderspanning). Gebruik in geval van twijfel de door Raspberry Pi Trading aanbevolen / geleverde voeding.

Tip #2 alleen-lezen systeem met overlays

Een alleen-lezen systeem beschermt de SD-kaart niet tegen leesstoring, en dus tegen veroudering door de noodzakelijke wiscycli. Dit gebeurt echter veel langzamer dan bij actief schrijven.

Een alleen-lezen bestandssysteem heeft ook andere voordelen, bijvoorbeeld minder controles van het bestandssysteem bij het opstarten.

Vooral embedded systemen, d.w.z. systemen die een specifiek doel dienen in een toepassing (bv. digital signage), hebben niet noodzakelijk de mogelijkheid nodig om voortdurend nieuwe software te installeren en nauwkeurige logs ter plaatse bij te houden. Je kunt de logs via het netwerk naar een centrale server sturen (indien nodig vertraagd) en voor systeemupdates kan het systeem in onderhoudsmodus worden gezet om de updates toe te passen.

Hier is wat informatie van het Debian project waarop Raspbian is gebaseerd: https://wiki.debian.org/ReadonlyRoot.

Met behulp van RAM-schijfoverlays (in tmpfs) kan een systeem nog steeds logbestanden schrijven of wijzigingen aanbrengen in bestanden. U kunt de RAM disk overlays periodiek synchroniseren met speciaal daarvoor bestemde partities op de SD-kaart. Je moet voorzichtig zijn met de RAM-schijf zodat deze niet overloopt (door de logbestanden), en er is natuurlijk minder RAM-geheugen beschikbaar voor normale activiteiten.

Wij gebruiken deze techniek met ons product Anonymeboxwaarbij moet worden aangenomen dat de gebruikers gewoon de stekker uit het stopcontact halen.

Bent u op zoek naar een partner om een solide read-only oplossing voor uw embedded Raspberry Pi project te realiseren? Wij (als pi3g e.K.) bieden advies & ontwikkelingsdiensten aanvoor hardware en software.

Tip #3 Vermindering van schrijfoperaties

Vooral bij oudere kernels werkt Linux de toegangstijd bij voor elke bestandstoegang, volgens de POSIX-standaard. Dit betekent dat elke leesoperatie automatisch resulteert in een schrijfoperatie. Er is de mogelijkheid om expliciet in te stellen noatime in /etc/fstab als je die nog niet hebt ingesteld (Raspbian lijkt die automatisch in te stellen).

Meer informatie over relativiteit en noatime

Uitschakelen van systeem log met behulp van masker:

systemctl mask systemd-journald.service
Symlink aangemaakt van /etc/systemd/system/systemd-journald.service naar /dev/null.
sudo systemctl mask rsyslog.service
Symlink aangemaakt van /etc/systemd/system/rsyslog.service naar /dev/null.

Andere logs die door andere toepassingen worden gemaakt, en de gevolgen van het uitschakelen van deze diensten (bijvoorbeeld dat bepaalde diensten niet meer starten) moeten natuurlijk in detail worden onderzocht.

Verwissel bestand:

Als er niet genoeg RAM is, verplaatst Linux individuele RAM gebieden in een SWAP bestand. (Overweeg het gebruik van een Raspberry Pi 4 met voldoende RAM, bijvoorbeeld de Pi 4 / 4 GB of de Pi 4 / 8 GB voor uw gebruik). Met het volgende commando kan de status van het SWAP-bestand gecontroleerd worden:

sudo systemctl status dphys-swapfile
dphys-swapfile.service - LSB: Automatisch genereren en gebruiken van een wisselbestand
Geladen: geladen (/etc/init.d/dphys-swapfile)
Actief: actief (afgesloten) sinds za 2017-07-01 19:11:57 UTC; 8min geleden
Proces: 498 ExecStart=/etc/init.d/dphys-swapfile start (code=exited, status=0/SUCCESS)

Je kunt het volgende commando gebruiken om SWAP uit te schakelen:

sudo systemctl disable dphys-swapfile

Conclusie

microSD-kaarten in continu gebruik stellen de betrouwbaarheid op lange termijn van Raspberry Pi-gebaseerde systemen zwaar op de proef.

Door de juiste voeding te gebruiken, alleen-lezen systemen met overlays te gebruiken, schrijfbewerkingen consequent te verminderen en een goede SD-kaart van een bekend merk te kiezen, kun je de stabiliteit op de lange termijn verhogen.

Als u professionele ondersteuning nodig heeft voor uw Raspberry Pi project / product, neem dan contact met ons op voor een gratis eerste consult.

Opmerkingen

(*) Opmerking: de Raspberry Pi 3, 3B+ en 4 kunnen opstarten vanaf USB-media, of via het netwerk (Ethernet), zonder microSD-kaart.

Speciaal voor opstarten via het netwerk raden we aan om een microSD-kaart met speciale firmware te installeren, omdat een time-out bug in de opstartcode een stabiele opstart verhindert (Raspberry Pi 3B).

De uitleg hierboven over de structuur van flashgeheugen is ook van toepassing op USB-sticks, omdat deze ook gebruik maken van flashgeheugen.

(**) Opmerking: een steeds meer gebruikt alternatief voor floating gates zijn charge trapping flash geheugens, het functionele principe blijft hetzelfde. De charge trapping flash cel maakt hogere geheugendichtheden mogelijk.

Als je meer wilt weten over SD-kaarten met je Raspberry Pi, kijk dan op onze vele artikelen over dit onderwerp hier.

5 Opmerkingen

  1. Pete op oktober 13, 2021 op 8:27 pm

    Hoi,
    is er een manier om de controller in de SD-kaart te controleren hoeveel slechte plocks er aanwezig zijn?
    Door dit periodiek te controleren wil ik een trendgrafiek opbouwen.
    Dank u voor het werk.
    Groeten,
    Peter

    • unintell op november 9, 2022 op 3:55 pm

      dat zou onmogelijk zijn voor een normale SD-kaart, tenzij je de MP-tool hebt voor de specifieke gebruikte controller, die nooit beschikbaar is.
      Het zou mogelijk zijn als de kaart van industriële kwaliteit is en SMART-informatie beschikbaar heeft (gespecificeerd in hun respectieve gegevensblad), en dan kunt u wat code schrijven om de SMART-gegevens uit te lezen.
      Maar dit is nog maar het begin van de PITA. Er is geen industriële standaard voor SD-kaart gezondheidscontrole, dus elke fabrikant implementeert het protocol anders en het wordt niet altijd gepubliceerd.
      Het SMART-rapport van sommige fabrikanten geeft alleen een percentage van de resterende levensduur van de kaart, sommige geven meer gedetailleerde informatie, waaronder gereserveerde blokken, aanvankelijk slechte blokken, latere slechte blokken, max/min/avg aantal wisbewerkingen, P/E levensduur, enz.
      Momenteel heb ik gezondheidsstatistieken kunnen lezen van kaarten van Lexar, ADATA, ATP, Sandisk, Apacer, Metorage, Delkindevices, SiliconePower, Swissbit en enkele andere.
      Mijn motivatie is het kraken van de SMART info van goedkope tweedehands industriële kaarten geproduceerd door Foresee, voorlopig heb ik de MPS/M9M/M9H/D7D/X52/X53 serie kaarten kunnen kraken en ik ben nog bezig met enkele andere modellen.

      Ik hoop dat er snel genoeg een industriële standaard komt voor SD kaart smart info. Ook vond ik het amusant dat sommige SD-kaarten een langere levensduur hebben dan veel SSD's lmao.

      • unintell op november 9, 2022 op 4:03 pm

        oh, ik vergat te vermelden dat de meerderheid (maar niet allemaal, shit.) van de kaarten SMART info geeft via het sturen van CMD56 commando naar de kaart w / een 32bit int argument, je zult dat magische getal moeten vinden uit de datasheet en het respectieve dataformaat om de gegevens te lezen. Als je de datasheet hebt, dan ben je in principe klaar, kijk naar sdmon tool op github voor voorbeeldcode.
        Als de datasheet niet bekend is of het magische getal niet is gepubliceerd, zul je de hele 31bit (het laagste bit is altijd 1) ruimte van int moeten doorlopen om het met geweld te kraken, en dat kan 12 uur tot een halve maand duren, afhankelijk van je geluk. Ik hoop dat er geen kwaadaardige fabrikanten zijn die hun magische nummer beginnen met 0xF_______. Op dit moment beginnen alle magische nummers die ik heb kunnen kraken/verzamelen met 0x1_______.

        Sommige kaarten vereisen een meer complexe routine om de SMART info uit te lezen, zoals Apacer, maar goed dat ze de nodige info in de datasheet hebben vermeld. Apacer maakt ook OEM-kaarten voor enkele andere merken, dus dezelfde routine is van toepassing.

  2. [...] SD-kaart gezondheid (inclusief best practices over het verzorgen van je SD-kaart!) [...]

  3. [Alles over de gezondheid van SD-kaarten / microSD-kaarten op de Raspberry Pi [...].

Laat een reactie achter