Allt om SD-korthälsa på Raspberry Pi

SD-kortets hälsa

SD-kortet är - vid sidan av strömförsörjningen - en viktig ytterligare komponent i Raspberry Pi. Det är viktigt att övervaka dess hälsa för att säkerställa en smidig drift av operativsystemet för Raspberry Pi och en bra användarupplevelse. Den här artikeln visar dig flera sätt att kontrollera och övervaka hälsan hos ditt microSD-kort.

Först kommer jag att ge en djupgående översikt över hur minneskort fungerar, så att du kan förstå möjligheterna och begränsningarna med att kontrollera SD-kortets hälsotillstånd.

Sedan förklarar jag hur du skyddar ditt microSD-kort genom att minska vanliga problem som Raspberry Pi-användare upplever. Vi kommer också att gå in på de bästa microSD-kortmärkena för Raspberry Pi som vi rekommenderar.

Om du vill kan du också hoppa längre ner för att bara få Linux-kommandona för att kontrollera det aktuella microSD-kortets status.

Grunderna: Inuti microSD-kortet

Inre en microSD Karte
Bild: Illustration av insidan av ett SD-kort. MicroSD-kortet har en liknande struktur. Bildkälla: CC-BY-SA Korpsvart, Wikimedia Commons

MicroSD-kortet innehåller ett flashminneschip (till vänster i bilden) och en mikrokontroller (till höger i bilden, vanligtvis ARM-baserad).

Flash

Flash-minnet lagrar information genom att "fångar" elektroner, som "injiceras" med hjälp av högspänning genom en icke-ledare i en så kallad flytande grind(**). Elektronerna är alltså en del av en transistor som kan eller inte kan tillåta en ansluten ström att flöda, beroende på laddningen i den flytande grinden. Teoretiskt sett kan de inte flyta bort, eftersom den flytande grinden är elektriskt isolerad.. Det innebär att informationen stannar kvar även efter att strömförsörjningen har stängts av.

Informationen läses alltid mellan källan (S) och drain (D). Elektroner som förs in i den flytande grinden ökar t.ex. transistorens tröskelspänning, varifrån strömmen skulle flöda. Transistorn blockerar då vid en normal lässpänning (leder inte).

För programmering av den flytande gaten krävs betydligt högre elektriska spänningar (t.ex. 10 V) än för normal läsdrift (t.ex. 3,3 V). För att göra detta spelar dessutom styrgrinden (V1/V2/V3) en nyckelroll.

För att radera allt driver kontrollgrinden elektroner ut ur den flytande grinden genom att applicera en hög negativ spänning.

NAND flash-komponenter som används i microSD-kort grupperar de enskilda minnestransistorerna i sidor och flera av sidorna i block. En sida har mellan 512 och 8192 byte, ett block kan innehålla upp till 256 sidor (alltså totalt 2048 kB med 8 kB sidstorlek).

Skrivning (för en logisk "1") kan göras bitvis eller åtminstone byte/ordvis. Radering (för en logisk "0") kan endast göras blockvis. Om det finns någon oförändrad information måste den programmeras in igen.

Flashminnen har en begränsad livslängd på grund av programmering och radering, som vi beräknar i raderingscykler.

Anledningen till den begränsade livslängden är skador på det isolerande oxidskiktet, som skyddar den flytande gaten från laddningsläckage, orsakat av de höga spänningarna. Så snart detta skikt blir ledande kan minnescellen inte lagra mer information.

I övrigt: Multi-level cell minnesceller

Från början fanns det bara två laddningstillstånd (1 bit information) per minnescell. Nu, tack vare flera flytande grindar per transistor, kan minnesceller med flera nivåer lagra olika laddningsstatus och därmed flera bitar per minnestransistor. Under avläsningen utvärderar systemet hur den tillförda strömmen leds på olika sätt av transistorn.

Å ena sidan gör detta det möjligt att öka minnescellernas täthet avsevärt, men å andra sidan är utläsningen långsammare och minnescellerna reagerar mycket känsligare med bitfel på laddningsförluster. Med celler på en nivå är 100 000-1 000 000 000 skriv- och raderingscykler möjliga, med TLC (celler på tre nivåer med tre bitar per minnescell) ca 1 000 skriv- och raderingscykler.

Detta är anledningen till att industriella SD-kort vanligtvis har lägre minnestäthet och använder SLC (single level cells) för bättre dataintegritet..

Kontrollansvarig

Controllerens uppgift är att hantera blixten, och i synnerhet att utföra följande utjämning av slitage och korrigering av läsfel. MicroSD-kortets prestanda och livslängd beror i hög grad på de algoritmer som används i styrenheten.

Flashminnet kan inte skrivas om så ofta som krävs på grund av att det isolerande oxidskiktet på de flytande grindarna skadas enligt beskrivningen ovan. För att undvika skador på enskilda områden som används särskilt ofta, styrenheten varierar den fysiska tilldelningen till de block som kan adresseras logiskt av filsystemet (= slitageutjämning).

Denna variation i den fysiska tilldelningen är också anledningen till att skrivtestning av SD-kortet (genom att skriva och läsa med verktyg för dåliga block, etc.) faktiskt inte identifierar de verkliga dåliga blocken och gör att du kan undvika dem på operativsystems/filsystemnivå! Endast flashminneskontrollen i microSD-kortet vet vilket block som skrivs till/läses från vid varje given tidpunkt, och som diskuterats kan detta ändras med tiden.

Defekta block (dåliga block) finns redan i helt nya flashminnen. Dessa defekta block markeras i ett särskilt område i flashminnet.

Information om felkorrigering för enskilda block hanteras också så att läsfel kan korrigeras med hjälp av kontrollsummor. Styrenheten lägger till block med klustrade läsfel i listan över dåliga block och flyttar den faktiska fysiska tilldelningen av det logiska blocket.

MicroSD-kortet har vanligtvis - beroende på tillverkare - cirka 10% reservkapacitet för att byta ut de dåliga blocken mot bra "reservblock".

Smutsiga små hemligheter: Problem med flashminnet

Radering sker endast med blockvis

Data kan bara raderas block för block. Radering belastar minnescellerna och förkortar deras livslängd - nya dåliga block skapas.

Defekta block från fabriken

Flashminnen levereras redan med defekta block. Under drift läggs ytterligare defekta block (dåliga block) till. Styrenheten försöker därför att skriva/radera block så jämnt fördelade som möjligt genom wear-leveling.

MLC och TLC är särskilt känsliga

MLC-celler (Multilevel Cell Memory cells) minskar antalet raderingscykler och därmed tillförlitligheten på lång sikt.

Läs störningar

Ett fenomen som jag ännu inte har nämnt, men som är särskilt förrädiskt, är följande Läs störningar. Även när den bara läser från kortet kan den - bara genom att läsa - få angränsande minnesceller i samma block att ändra sin programmering. Sannolikheten för att detta skall inträffa ökar kraftigt efter några 100 000 läsningar.

För att undvika Read Disturb loggar styrenheten därför antalet åtkomster till ett block för att kopiera det i ett stycke till en ny plats när ett tröskelvärde överskrids och för att radera det ursprungliga blocket. Därefter kan blocket återanvändas igen.

Allt detta är saker som en styrenhet måste kompensera för för att kunna låtsas att det är ett "perfekt minneskort" på utsidan, medan det ser allt annat än perfekt ut på insidan!

Sist men inte minst kan bitar som skrivits med röntgenstrålar raderas oavsiktligt. Här är det bara en röntgensäker utformning av kortet som kan garantera att uppgifterna förblir intakta.

Tillverkare och val av ett bra kort

Både mikrokontroller och flash-enhet och det färdiga microSD-kortet kan komma från olika tillverkare - Panasonic SD-kortet i exempelbilden har Samsung-flash. Styrenheten tillverkades i Japan.

Det finns fyra tillverkare som tillverkar NAND-flashenheter:

  • Samsung <- marknadsledare
  • Toshiba
  • IM Flash Technologies (samriskföretag mellan Micron Technology och Intel)
  • Hynix i samarbete med Numonyx

Toshiba och Samsung tillverkar majoriteten av alla chip.

SanDisk (rekommenderas)

SanDisk och Toshiba har ett samriskföretag för flashtillverkning. År 2009 överförde dock SanDisk rättigheterna till fabrikerna till Toshiba för att bli ett tillverkare av fabless flashminne. De samarbetar fortfarande när det gäller minnesutveckling. SanDisk och Toshiba, tillsammans med Matshushita, är grundarna till SD-standarden, som introducerades 1999. SanDisk skapade även microSD-standarden.

Vi har förlitat oss på SanDisk-märket under lång tid och har haft mycket goda erfarenheter av det hittills.

Samsung (rekommenderas)

Vi rekommenderar också Samsung-minneskort. Som marknadsledare inom NAND-flashsektorn kan Samsung matcha alla komponenter i SD-kortet perfekt med varandra och har all nödvändig information för en solid produkt.

Kingston (rekommenderas ej)

Vi hade en dålig erfarenhet av tillförlitligheten hos 128 GB Kingston-kort i ett kritiskt projekt. Kingston har inga egna fabriker utan köper överkapacitet från andra flashtillverkare. Som ett resultat finns det ingen garanti för konsekvent prestanda.

Följande artikel av Bunny Huang är också intressant i detta sammanhang.

Toshiba

Toshiba, som är #2 på den globala DRAM-marknaden, säljer också sina egna minneskortprodukter. SanDisk och Toshiba är tillsammans med Matshushita grundarna av SD-standarden, som infördes 1999. Vi har ingen erfarenhet av Toshiba-kort hittills.

Transcend / Silicon Power

Vi har också använt Transcend- och Silicon Power-kort, särskilt i lågprissegmentet. Korten är i grunden bra, men vi har sett högre returer/fel med Transcend än med SanDisk. För kritiska projekt skulle jag därför hellre rekommendera SanDisk/Samsung.

Att välja ett bra minneskort

För att välja ett bra minneskort är det första du ska göra att välja tillverkare. Vi rekommenderar Samsung eller SanDisk, och eventuellt Toshiba, på den korta listan.

Därefter är minnesklassen viktig. Denna klass anger den snabbaste skrivhastigheten block för block. Det är inte skrivhastigheten för spridda random access-skrivningar, vilket är mer meningsfullt i verkliga tillämpningar.

En högre klass är dyrare, men rekommenderas på grund av den betydande prestandaförbättringen. Vi skickar vanligtvis kort i klass 10.

denna översikt på eLinux.orgkan du kontrollera om ett lämpligt minneskort är kompatibelt med din Raspberry Pi. Viktig anmärkning: De ändrar ständigt Raspberry Pi firmware för bättre kompatibilitet med minneskort och för att undvika datakorruption.

Du bör beställa från pålitliga källor - till exempel, vi får våra SanDisk microSD-kort direkt från Raspberry Pi Trading och välrenommerade, stora tyska distributörer. När det gäller Amazon, se till att du beställer direkt från Amazon, inte från en återförsäljare på en marknadsplats.

Viss information (cid, csd, datum, manfid, oemid, serial) på microSD-kortet kan läsas med Linux för att kontrollera att du har fått rätt tillverkare. Exempel med ett Transcend-kort:

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

Tillverknings-ID (manfid) tilldelas av SD-3C LLC, samt OEM-/program-ID (oemid). oemid identifierar kortets OEM och/eller kortets innehåll.

Produktnamnet (namn) är 5 tecken lång (ASCII). hwrev är hårdvarurevisionen, och fwrev revidering av den fasta programvaran. Tillsammans utgör de produktrevisionen (hwrev.fwrev).

The serienummer är microSD-kortets serienummer, det är ett 32-bitars fält som läses som ett osignerat heltal.

The mdt (Tillverkningsdatum) anger när kortet tillverkades - år och månad.

Du kan jämföra värdena med webbplatser för att upptäcka bedrägerier med falska microSD-kort. Jag rekommenderar att du läser Bunny's bloggartikel (en) och denna artikel (två).

Stabil man/oem kombinationer av ett varumärke tyder på en välkontrollerad och konsekvent leveranskedja. SanDisk har till exempel följande kombination för alla poster i eLinux.org Wiki: man:0x000003 oem:0x5344. Andra märken, som Transcend, varierar sina leverantörer, så jämn kvalitet är inte en självklarhet.

Undvik att data korrumperas under drift

microSD-kortet är Raspberry Pi-enhetens "hårddisk". Med en normal Linux-konfiguration fungerar det som en vanlig hårddisk - både läs- och skrivåtkomst förekommer. Linux loggar information till många loggfiler och uppdaterar bland annat filernas åtkomsttider. Data ändras alltså ofta. Detta är något som microSD-kort överhuvudtaget inte är konstruerade för.

Tips #1: Stäng av Raspberry Pi ordentligt och använd en bra strömförsörjning

Du skulle inte heller bara dra ur kontakten till en Windows-dator. Med Linux-datorer, och särskilt Raspberry Pis med stöd för microSD-kort, är det bara en tidsfråga. innan datakorruption uppstår vid strömavbrott..

Linux har skriv- och läscacher för att snabba upp filhanteringen. Om du bara kopplar bort strömmen från Pi:n kan du förlora den information i skrivcacherna som inte har nått fram till microSD-minnet.

Som tidigare nämnts flyttar microSD-styrenheten aktivt data vid körning vid körning för att minska slitage och undvika störningar vid läsning. Detta sker utan Linuxsystemets vetskap ("transparent"). Och beroende på tillverkaren mer eller mindre konservativt. Även här - särskilt under skrivoperationer! - kan dataskador och dataförluster uppstå.

Så du bör se till att Raspberry Pis ACT-LED slutar att blinka när du stänger av din Pi, och först därefter dra ur strömmen.

En dålig strömförsörjning kan också leda till problem på grund av strömavbrott (underspänning). I tveksamma fall ska du använda det nätaggregat som rekommenderas/levereras av Raspberry Pi Trading.

Tip #2 Läsbart system med överlagringar

Ett system med skrivskydd skyddar inte SD-kortet från lässtörningar och därmed från åldrande på grund av de nödvändiga raderingscyklerna. Detta sker dock mycket långsammare än vid aktiv skrivning.

Ett skrivskyddat filsystem har också andra fördelar, t.ex. färre kontroller av filsystemet vid start.

Särskilt inbyggda system - dvs. system som tjänar ett specifikt syfte i en applikation (t.ex. digital signage) - behöver inte nödvändigtvis ha möjlighet att ständigt installera ny programvara och att hålla exakta loggar på plats. Du kan skicka loggarna via nätverket till en central server (fördröjd vid behov), och för systemuppdateringar kan systemet sättas i underhållsläge för att tillämpa uppdateringarna.

Här är lite information från Debianprojektet som Raspbian är baserat på: https://wiki.debian.org/ReadonlyRoot.

Med hjälp av RAM-disköverlagringar (i tmpfs) kan ett system fortfarande skriva loggfiler eller göra ändringar i filer. Du kan synkronisera RAM-disköverläggen regelbundet med särskilt utsedda partitioner på SD-kortet. Du bör vara försiktig med RAM-disken så att den inte svämmar över (på grund av loggfilerna), och det finns naturligtvis mindre RAM-minne tillgängligt för normala aktiviteter.

Vi använder den här tekniken med vår produkt Anonymeboxdär man måste utgå från att användarna helt enkelt drar ur kontakten.

Letar du efter en partner som kan realisera en solid lösning för inbyggda Raspberry Pi-projekt? Vi (pi3g e.K.) erbjuder konsult- och utvecklingstjänster., för hårdvara och mjukvara.

Tips #3 Minskning av antalet skrivoperationer

Särskilt i äldre kärnor uppdaterar Linux åtkomsttiden för varje filåtkomst enligt POSIX-standarden. Detta innebär att varje läshändelse automatiskt resulterar i en skrivhändelse.. Det finns en möjlighet att uttryckligen ställa in noatime /etc/fstab om du inte redan har gjort det (Raspbian verkar göra det automatiskt).

Mer information om relatime och noatime

Inaktivera systemlogg med hjälp av mask:

systemctl mask systemd-journald.service
Skapade en symbolisk länk från /etc/systemd/system/systemd-journald.service till /dev/null.
sudo systemctl mask rsyslog.service
Skapade en symbolisk länk från /etc/systemd/system/rsyslog.service till /dev/null.

Andra loggar som skapas av andra program och konsekvenserna av att inaktivera dessa tjänster (t.ex. att vissa tjänster inte längre startar) bör naturligtvis undersökas i detalj.

Byt fil:

Om det inte finns tillräckligt med RAM-minne flyttar Linux enskilda RAM-områden till en SWAP-fil. (Tänk på att använda en Raspberry Pi 4 med tillräckligt med RAM-minne, t.ex. Pi 4 / 4 GB eller . Pi 4 / 8 GB för ditt användningsområde). Med följande kommando kan du kontrollera status för SWAP-filen:

sudo systemctl status dphys-swapfile
● dphys-swapfile.service - LSB: Automatisk generering och användning av en bytesfil
Laddad: laddad (/etc/init.d/dphys-swapfile)
Aktiv: aktiv (avslutades) sedan lör 2017-07-01 19:11:57 UTC; 8min sedan
Process: 498 ExecStart=/etc/init.d/dphys-swapfile start (code=exited, status=0/SUCCESS)

Du kan använda följande kommando för att inaktivera SWAP:

sudo systemctl disable dphys-swapfile

Slutsats

microSD-kort som används kontinuerligt sätter den långsiktiga tillförlitligheten hos Raspberry Pi-baserade system på hårda prov.

Genom att använda rätt strömförsörjning, read-only-system med overlays, konsekvent reducering av skrivoperationer och välja ett bra SD-kort från ett välkänt varumärke kan du öka stabiliteten på lång sikt.

Om du behöver professionell support för ditt Raspberry Pi-baserade projekt/produkt, vänligen kontakta oss för en kostnadsfri inledande konsultation..

Anteckningar

(*) Anmärkning: Raspberry Pi 3, 3B+ och 4 kan starta upp från USB-media eller via nätverk (Ethernet) utan microSD-kort.

Speciellt för start via nätverk rekommenderar vi att du installerar ett microSD-kort med en speciell firmware, eftersom ett timeoutfel i startkoden förhindrar en stabil start (Raspberry Pi 3B).

Förklaringarna ovan om flashminnets struktur gäller även för USB-minnen, eftersom de också bygger på flashminne.

(**) Anmärkning: ett alltmer använt alternativ till flytande grindar är flashminnen med laddningsfällor, men funktionsprincipen är densamma. Flash-cellen med laddningsspärr möjliggör högre minnestäthet.

Om du vill lära dig mer om SD-kort med din Raspberry Pi kan du kolla in våra många artiklar som behandlar ämnet här.

5 Kommentarer

  1. Pete den oktober 13, 2021 kl 8:27 e m

    Hej,
    Finns det något sätt att kontrollera kontrollanten på SD-kortet hur många dåliga plocks det finns?
    Genom att kontrollera detta med jämna mellanrum vill jag skapa ett trenddiagram.
    Tack för arbetet.
    Hälsningar,
    Peter

    • unintell den november 9, 2022 kl 3:55 e m

      Det skulle vara omöjligt för vanliga SD-kort av konsumentkvalitet om du inte har MP-verktyget för den specifika styrenheten som används, vilket aldrig är tillgängligt.
      Det skulle vara möjligt om kortet är av industriell kvalitet och har SMART-information tillgänglig (specificerat i respektive datablad), och då kan du skriva en kod för att läsa ut SMART-data.
      Men det här är bara början på det besvärliga arbetet. Det finns ingen industriell standard för hälsoövervakning av SD-kort, så varje tillverkare tillämpar protokollet på olika sätt och det offentliggörs inte alltid.
      Vissa tillverkares SMART-rapport ger dig bara en procentuell andel av kortets återstående livslängd, medan andra ger mer detaljerad information, t.ex. reserverade block, ursprungliga dåliga block, senare dåliga block, max/min/avg antal raderade filer, P/E-livstid osv.
      För närvarande har jag kunnat läsa hälsostatistik för kort från Lexar, ADATA, ATP, Sandisk, Apacer, Metorage, Delkindevices, SiliconePower, Swissbit och några till.
      Min motivation är att knäcka SMART-informationen från smutsiga billiga begagnade industriella kort som produceras av Foresee, för tillfället har jag lyckats knäcka kortet i MPS/M9M/M9H/D7D/X52/X53-serien och jag arbetar fortfarande på några fler modeller.

      Jag hoppas att det snart kommer en industriell standard för smart information från SD-kort. Jag tycker också att det är roligt att vissa SD-kort har högre TBW-livstid än många SSD-diskar lmao.

      • unintell den november 9, 2022 kl 4:03 e m

        Åh, jag glömde nämna att majoriteten (men inte alla, shit.) av korten ger SMART-information genom att skicka CMD56-kommandot till kortet med ett 32bit int-argument, du måste hitta det magiska numret från databladet och respektive dataformat för att läsa data. Om du har databladet är du i princip klar, kolla in sdmon tool på github för exempelkod.
        Om databladet inte finns tillgängligt eller om det magiska talet inte är publicerat måste du iterera hela int-området med 31 bitar (den lägsta biten är alltid 1) för att knäcka det med våld, och det kan ta mellan 12 timmar och en halv månad beroende på din tur. Jag hoppas att det inte finns någon ond tillverkare som börjar sitt magiska nummer med 0xF_______. För tillfället börjar alla magiska nummer som jag har lyckats knäcka/samla in med 0x1_______.

        Vissa kort kräver en mer komplex rutin för att läsa ut SMART-informationen, som Apacer, men det är bra att de tillhandahåller nödvändig information i databladet. Apacer tillverkar OEM-kort för vissa andra märken också, så samma rutin gäller.

  2. [...] SD-kortets hälsa (inkluderar bästa praxis för att ta hand om ditt SD-kort!) [...]

  3. [...] Allt om SD-kort / microSD-korthälsa på Raspberry Pi [...]

Lämna en kommentar