Allt om SD-kort / microSD-kort hälsa på Raspberry Pi
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 ger jag 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 kan skydda 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å Linuxkommandon för att kontrollera det aktuella tillståndet för microSD-kortet.Grunderna: Inuti microSD-kortet

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.. Detta innebär att informationen bevaras även när strömmen är avstängd.
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 grinden används betydligt högre elektriska spänningar (t.ex. 10 V) än för normal läsning (t.ex. 3,3 V). För detta ändamål används dessutom styrporten (V1/V2/V3).
Vid radering drivs elektronerna ut ur den flytande grinden igen genom att en hög negativ spänning läggs på via styrgrinden.
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. Information som inte har ändrats måste ändå programmeras in igen.
Flash-minnen har en begränsad livslängd på grund av programmering och radering, som anges i raderingscykler.
Orsaken till den begränsade livslängden är skador på det isolerande oxidskiktet, som skyddar den flytande grinden från laddningsläckage, som orsakas av de höga spänningarna. Så snart detta skikt blir ledande kan inte mer information lagras i minnescellen.
I övrigt: Multi-level cell minnesceller
Från början fanns det bara två laddningstillstånd (1 bit information) per minnescell. Tack vare flera flytande grindar per transistor kan minnesceller med flera nivåer lagra olika laddningstillstånd och därmed flera bitar per minnestransistor. Transistorn leder då den applicerade strömmen på olika sätt, vilket utvärderas vid utläsning.
Å 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, flash-enhet och det färdiga microSD-kortet kan komma från olika tillverkare - Panasonic SD-kortet i exempelbilden har Samsung flash-enhet och kontrollern är tillverkad i Japan.
NAND-flash-enheter tillverkas av fyra tillverkare:
- 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
TL;DR 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. Minnesutvecklingen sker fortfarande tillsammans. SanDisk och Toshiba, tillsammans med Matshushita, är grundarna av SD-standarden, som infördes 1999. Även microSD-standarden skapades av SanDisk.
Vi har förlitat oss på SanDisk-märket under lång tid och har haft mycket goda erfarenheter av det hittills.
Samsung
TL;DR rekommenderas
Samsung minneskort rekommenderas också ofta. Som marknadsledare inom NAND flash-sektorn kan Samsung matcha alla komponenter i SD-kortet perfekt med varandra och har all nödvändig information för en solid produkt.
Kingston
TL;DR INTE rekommenderas
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 överskottskapacitet från andra flashtillverkare. Därför kan man inte garantera en jämn 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 bör minnesklassen beaktas. Denna klass anger den snabbaste skrivhastigheten block för block. Det är inte skrivhastigheten för utspridda skrivningar med slumpmässig åtkomst, vilket är mer betydelsefullt 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.
På denna översikt på eLinux.org Ett lämpligt minneskort kan sedan kontrolleras så att det är kompatibelt med Raspberry Pi. Viktigt att notera: Raspberry Pis fasta programvara har ändrats flera gånger för att förbättra kompatibiliteten med minneskort och 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 ska läsas som ett heltal utan förtecken.
The mdt (Tillverkningsdatum) anger när kortet tillverkades - år och månad.
Värdena kan jämföras med värdena på 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, t.ex. Transcend, varierar sina leverantörer, så en jämn kvalitet kan inte längre garanteras.
Undvik att data korrumperas under drift
MicroSD-kortet är Raspberry Pis "hårddisk". Med en normal Linuxkonfiguration behandlas det på exakt samma sätt som en hårddisk - det sker både läs- och skrivåtkomst. Linux loggar information till många loggfiler och uppdaterar bland annat filåtkomsttiderna. Data ändras och skrivs alltså ofta över. Detta är något som microSD-kort aldrig var konstruerade för från början.
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 läs- och skrivcacher för att snabba upp filoperationer. När du bara kopplar bort strömmen från Pi kan du förlora informationen i skrivcachen som ännu inte har skrivits till microSD-kortet.
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 inbäddade system - dvs. system som har utvecklats för ett specifikt ändamål och som sedan installeras i en tillämpning (t.ex. digital skyltning) - behöver inte nödvändigtvis ha möjlighet att ständigt installera ny programvara och föra exakta loggar på plats. Loggarna kan skickas via nätverket till en central server (vid behov med fördröjning), och vid 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. RAM-disköverlagringarna kan periodiskt synkroniseras med särskilt utsedda partitioner på SD-kortet. Man måste 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 normal verksamhet.
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 på /etc/fstab om den inte redan är inställd (Raspbian verkar ställa in den 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 SWAP-filens status kontrolleras:
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)
Följande kommando kan användas 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, skrivskyddade system med overlays, konsekvent minska antalet skrivoperationer och välja ett bra SD-kort av ett välkänt märke kan stabiliteten ökas på lång sikt.
Anteckningar
(*) Anmärkning: Raspberry Pi 3, 3B+ och 4 kan starta upp från USB-media eller via nätverk (Ethernet) utan microSD-kort.
Särskilt vid uppstart via nätverk rekommenderas det fortfarande att installera ett microSD-kort med en speciell firmware, eftersom en timeout-bugg i uppstartskoden förhindrar en stabil uppstart (Raspberry Pi 3B).
Förklaringarna ovan om flashminnets uppbyggnad gäller även för USB-minnen, eftersom flashminnet också är installerat i dem.
(**) 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.
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
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.
Å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.