Hallon-logotyp

Raspberry Pi gör en mer motståndskraftig File System

Raspberry Pi-Göra en mer motståndskraftigFile-System-produkt

Dokumentets omfattning

Detta dokument gäller för följande Raspberry Pi-produkter:

Pi 0 Pi 1 Pi 2 Pi 3 Pi 4 Pi 400 CM1 CM3 CM4 CM 5 Pico
0 W H A B A B B Alla Alla Alla Alla Alla Alla Alla
* * * * * * * * * * * * * *  

 

Introduktion

Raspberry Pi Ltd-enheter används ofta som datalagrings- och övervakningsenheter, ofta på platser där plötsliga strömavbrott kan inträffa. Som med alla datorenheter kan strömavbrott orsaka lagringsskador. Denna vitbok ger några alternativ för hur man kan förhindra dataskador under dessa och andra omständigheter genom att välja lämpliga alternativ. file system och inställningar för att säkerställa dataintegritet. Denna rapport förutsätter att Raspberry Pi kör operativsystemet Raspberry Pi (Linux) och är helt uppdaterad med den senaste firmware och kärnorna.

Vad är datakorruption och varför uppstår det?
Datakorruption avser oavsiktliga ändringar i datordata som sker under skrivning, läsning, lagring, överföring eller bearbetning. I det här dokumentet hänvisar vi endast till lagring, snarare än överföring eller bearbetning. Korruption kan uppstå när en skrivprocess avbryts innan den är klar, på ett sätt som förhindrar att skrivningen slutförs, till exempelampvid strömavbrott. Det är värt att ge en snabb introduktion till hur Linux OS (och i förlängningen även Raspberry Pi OS) skriver data till lagring. Linux använder vanligtvis skrivcacher för att lagra data som ska skrivas till lagring. Dessa cachar (lagrar tillfälligt) data i RAM-minne (random access memory) tills en viss fördefinierad gräns uppnås, varvid alla utestående skrivningar till lagringsmediet görs i en transaktion. Dessa fördefinierade gränser kan vara tids- och/eller storleksrelaterade. Till exempelampDvs. data kan cacha och endast skrivas till lagring var femte sekund, eller endast skrivas ut när en viss mängd data har ackumulerats. Dessa scheman används för att förbättra prestanda: att skriva en stor mängd data på en gång är snabbare än att skriva många små bitar data.

Om strömmen däremot går förlorad mellan att data lagras i cachen och att de skrivs ut, så går den datan förlorad. Andra möjliga problem uppstår längre fram i skrivprocessen, under den fysiska skrivningen av data till lagringsmediet. När en hårdvara (till exempelampDvs., Secure Digital (SD)-kortgränssnittet) får instruktioner att skriva data, tar det fortfarande en begränsad tid för dessa data att lagras fysiskt. Återigen, om strömavbrott inträffar under den extremt korta perioden är det möjligt att de data som skrivs blir korrupta. När man stänger av ett datorsystem, inklusive Raspberry Pi, är det bäst att använda avstängningsalternativet. Detta säkerställer att all cachad data skrivs ut och att hårdvaran har haft tid att faktiskt skriva data till lagringsmediet. SD-korten som används av majoriteten av Raspberry Pi-serien av enheter är utmärkta som billiga hårddiskersättningar, men är känsliga för fel över tid, beroende på hur de används. Flashminnet som används i SD-kort har en begränsad skrivcykellivslängd, och när korten närmar sig den gränsen kan de bli opålitliga. De flesta SD-kort använder en procedur som kallas slitageutjämning för att säkerställa att de håller så länge som möjligt, men i slutändan kan de gå sönder. Detta kan vara från månader till år, beroende på hur mycket data som har skrivits till, eller (ännu viktigare) raderats från, kortet. Denna livslängd kan variera dramatiskt mellan kort. SD-kortfel indikeras vanligtvis av slumpmässiga file korruptioner eftersom delar av SD-kortet blir oanvändbara.

Det finns andra sätt för data att bli skadade, inklusive, men inte begränsat till, defekta lagringsmedier, buggar i programvaran för lagringsskrivning (drivrutiner) eller buggar i själva applikationerna. I detta whitepaper definieras alla processer genom vilka dataförlust kan inträffa som en korruptionshändelse.

Vad kan orsaka en skrivoperation?
De flesta applikationer skriver till lagring på något sätt, till exempelampkonfigurationsinformation, databasuppdateringar och liknande. Några av dessa files kan till och med vara tillfälliga, dvs. endast användas medan programmet körs, och behöver inte underhållas under en strömcykel; de resulterar dock fortfarande i skrivningar till lagringsmediet. Även om din applikation inte skriver några data, kommer Linux i bakgrunden ständigt att göra skrivningar till lagringsmediet, främst genom att skriva logginformation.

Hårdvarulösningar

Även om det inte helt omfattas av denna vitbok, är det värt att nämna att förhindrande av oväntade strömavbrott är en vanligt förekommande och välförstådd åtgärd mot dataförlust. Enheter som avbrottsfria strömförsörjningar (UPS) säkerställer att strömförsörjningen förblir stabil och, om strömmen går förlorad till UPS-enheten, kan de, medan de drivs av batteridrift, meddela datorsystemet att strömavbrott är nära förestående så att avstängningen kan ske smidigt innan reservströmförsörjningen tar slut. Eftersom SD-kort har en begränsad livslängd kan det vara bra att ha ett utbytesschema som säkerställer att SD-kort byts ut innan de når slutet av sin livslängd.

Robust file system

Det finns olika sätt att skydda en Raspberry Pi-enhet mot korruption. Dessa varierar i sin förmåga att förhindra korruption, där varje åtgärd minskar risken för att det inträffar.

  • Minska skrivningar
    Att helt enkelt minska mängden skrivning som dina applikationer och Linux-operativsystemet gör kan ha en gynnsam effekt. Om du loggar mycket ökar risken för skrivningar under en korruptionshändelse. Att minska loggning i din applikation beror på slutanvändaren, men loggning i Linux kan också minskas. Detta är särskilt relevant om du använder flashbaserad lagring (t.ex. eMMC, SD-kort) på grund av deras begränsade skrivlivscykel.
  • Ändra commit-tider
    Åtgärdstiden för en file Systemet är den tid som det cachar data innan det kopierar allt till lagring. Att öka denna tid förbättrar prestandan genom att batcha upp många skrivningar, men kan leda till dataförlust om det sker en korruptionshändelse innan data skrivs. Att minska commit-tiden innebär mindre risk för att en korruptionshändelse leder till dataförlust, även om det inte förhindrar det helt.
    För att ändra commit-tiden för huvud-EXT4 file system på Raspberry Pi OS, måste du redigera \etc\fstab file som definierar hur file systemen monteras vid uppstart.
  • $sudo nano /etc/fstab

Lägg till följande i EXT4-posten för roten file system:

  • begå=

Så, fstab kan se ut ungefär så här, där commit-tiden har ställts in på tre sekunder. Commit-tiden kommer som standard att vara fem sekunder om den inte specifikt anges.

Raspberry Pi-Göra en mer motståndskraftigFile-System-

 

Tillfällig file system

Om en ansökan kräver tillfällig file lagring, dvs. data som endast används medan applikationen körs och inte behöver sparas vid en avstängning, är ett bra alternativ för att förhindra fysiska skrivningar till lagring att använda en tillfällig file system, tmpfs. Eftersom dessa file System är RAM-baserade (faktiskt i virtuellt minne), all data som skrivs till en tmpfs skrivs aldrig till fysisk lagring och påverkar därför inte flashminnets livslängd och kan inte skadas vid en korruptionshändelse.
Att skapa en eller flera tmpfs-platser kräver att du redigerar /etc/fstab file, som kontrollerar alla file system under Raspberry Pi OS. Följande exempelample ersätter de lagringsbaserade platserna /tmp och /var/log med temporary file systemplatser. Det andra exempletample, som ersätter standardloggmappen, begränsar den totala storleken på file systemet till 16 MB.

  • tmpfs /tmp tmpfs standardvärden, ingen tid 0 0
  • tmpfs /var/log tmpfs standardvärden,ingen tid,storlek=16m 0 0

Det finns också ett tredjepartsskript som hjälper till att konfigurera loggning till RAM, vilket finns på GitHub. Detta har den extra funktionen att dumpa RAM-baserade loggarna till disk med ett fördefinierat intervall.

Skrivskyddad rot file system

Roten file systemet (rootfs) är file system på diskpartitionen där rotkatalogen finns, och det är file system på vilket alla andra file System monteras när systemet startas upp. På Raspberry Pi är det /, och som standard finns det på SD-kortet som en EXT4-partition med fullständig läs-/skrivfunktion. Det finns också en startmapp, som är monterad som /boot och är en FAT-partition med läs-/skrivfunktion. Att göra rootfs-filen ENDAST läsbar förhindrar alla typer av skrivåtkomst till den, vilket gör den mycket mer robust mot korruptionshändelser. Men om inte andra åtgärder vidtas betyder det att ingenting kan skriva till den. file systemet alls, så det är inaktiverat att spara data av något slag från ditt program till rootf-filen. Om du behöver lagra data från ditt program men vill ha en skrivskyddad rootf-fil är en vanlig teknik att lägga till ett USB-minne eller liknande som bara är till för att lagra användardata.

NOTERA
Om du använder en växel file när man använder en skrivskyddad file systemet, måste du flytta växeln file till en läs-/skrivpartition.

Täcka över file system

Ett överlägg file system (overlays) kombinerar två file system, en övre file system och ett lägre file systemet. När ett namn finns i båda file system, objektet i den övre delen file systemet är synligt medan objektet i den nedre file systemet är antingen dolt eller, när det gäller kataloger, sammanfogat med det övre objektet. Raspberry Pi erbjuder ett alternativ i raspi-config för att aktivera en overlayfs. Detta gör rootfs (nedre) skrivskyddad och skapar en RAM-baserad övre file system. Detta ger ett mycket liknande resultat som skrivskyddat file systemet, där alla användarändringar går förlorade vid omstart. Du kan aktivera en overlayfs antingen med hjälp av kommandoraden raspi-config eller med hjälp av skrivbordets Raspberry Pi-konfigurationsapplikation på Inställningar-menyn.

Det finns också andra implementeringar av overlayfs som kan synkronisera nödvändiga ändringar från den övre till den nedre file systemet enligt ett förutbestämt schema. Till exempelample, du kan kopiera innehållet i en användares hemmapp från övre till nedre mappen var tolfte timme. Detta begränsar skrivprocessen till en mycket kort tidsperiod, vilket innebär att korruption är mycket mindre sannolik, men det betyder att om strömmen går före synkroniseringen förloras all data som genererats sedan den senaste. pSLC på beräkningsmoduler eMMC-minnet som används på Raspberry Pi Compute Module-enheter är MLC (Multi-Level Cell), där varje minnescell representerar 2 bitar. pSLC, eller pseudo-Single Level Cell, är en typ av NAND-flashminnesteknik som kan aktiveras i kompatibla MLC-lagringsenheter, där varje cell endast representerar 1 bit. Den är utformad för att ge en balans mellan prestanda och uthållighet hos SLC-flash och kostnadseffektiviteten och den högre kapaciteten hos MLC-flash. pSLC har en högre skrivuthållighet än MLC eftersom det minskar slitage att skriva data till celler mer sällan. Medan MLC kan erbjuda cirka 3,000 10,000 till XNUMX XNUMX skrivcykler, kan pSLC uppnå betydligt högre siffror och närma sig uthållighetsnivåerna för SLC. Denna ökade uthållighet innebär en längre livslängd för enheter som använder pSLC-teknik jämfört med de som använder standard MLC.

MLC är mer kostnadseffektivt än SLC-minne, men även om pSLC erbjuder bättre prestanda och uthållighet än ren MLC, gör det det på bekostnad av kapaciteten. En MLC-enhet konfigurerad för pSLC kommer att ha hälften så stor kapacitet (eller mindre) som en vanlig MLC-enhet eftersom varje cell bara lagrar en bit istället för två eller fler.

Genomförande detaljer

pSLC implementeras på eMMC som ett Enhanced User Area (även känt som Enhanced Storage). Den faktiska implementeringen av det Enhanced User Area definieras inte i MMC-standarden men är vanligtvis pSLC.

  • Enhanced User Area är ett koncept, medan pSLC är en implementering.
  • pSLC är ett sätt att implementera Enhanced User Area.
  • I skrivande stund implementerar eMMC:n som används på Raspberry Pi Compute Modules det förbättrade användarområdet med hjälp av pSLC.
  • Det finns inget behov av att konfigurera hela eMMC-användarområdet som ett utökat användarområde.
  • Att programmera en minnesregion till ett utökat användarområde är en engångsåtgärd. Det betyder att det inte kan ångras.

Slår på den
Linux tillhandahåller en uppsättning kommandon för att manipulera eMMC-partitionerna i mmc-utils-paketet. Installera ett standard Linux-operativsystem på CM-enheten och installera verktygen enligt följande:

  • sudo apt installera mmc-utils

För att få information om eMMC (detta kommando tar mindre tid eftersom det finns en hel del information att visa):

  • sudo mmc extcsd läs /dev/mmcblk0 | mindre

 VARNING
Följande åtgärder är engångsåtgärder – du kan köra dem en gång och de kan inte ångras. Du bör också köra dem innan Compute Module har använts, eftersom de kommer att radera all data. Kapaciteten hos eMMC kommer att reduceras till hälften av det tidigare värdet.

Kommandot som används för att aktivera pSLC är mmc enh_area_set, vilket kräver flera parametrar som anger hur mycket minnesarea pSLC ska vara aktiverat. Följande exempelample använder hela området. Se mmc-kommandohjälpen (man mmc) för mer information om hur man använder en delmängd av eMMC.

Raspberry Pi-Göra en mer motståndskraftigFile-System-

Efter att enheten har startats om måste du installera om operativsystemet, eftersom aktivering av pSLC raderar innehållet i eMMC:n.

Raspberry Pi CM Provisioner-programvaran har ett alternativ för att ställa in pSLC under provisioneringsprocessen. Detta finns på GitHub på https://github.com/raspberrypi/cmprovision.

  • Utanför enheten file system-/nätverksstart
    Raspberry Pi kan starta via en nätverksanslutning, till exempelampmed hjälp av nätverket File System (NFS). Detta innebär att när enheten har slutfört sin förstatage boot, istället för att ladda dess kärna och rot file systemet från SD-kortet, det laddas från en nätverksserver. När det körs, alla file Åtgärderna sker på servern och inte på det lokala SD-kortet, som inte spelar någon ytterligare roll i processen.
  • Molnlösningar
    Numera sker många kontorsuppgifter i webbläsaren, där all data lagras online i molnet. Att hålla datalagringen borta från SD-kortet kan uppenbarligen förbättra tillförlitligheten, på bekostnad av behovet av en ständig internetanslutning, samt eventuella avgifter från molnleverantörer. Användaren kan antingen använda en fullfjädrad Raspberry Pi OS-installation, med den Raspberry Pi-optimerade webbläsaren, för att komma åt molntjänster från leverantörer som Google, Microsoft, Amazon etc. Ett alternativ är en av tunnklientleverantörerna, som ersätter Raspberry Pi OS med ett operativsystem/applikation som körs från resurser lagrade på en central server istället för SD-kortet. Tunna klienter fungerar genom att fjärransluta till en serverbaserad datormiljö där de flesta applikationer, känsliga data och minne lagras.

Slutsatser

När korrekta avstängningsprocedurer följs är SD-kortlagringen i Raspberry Pi extremt tillförlitlig. Detta fungerar bra i hem- eller kontorsmiljöer där avstängning kan kontrolleras, men när Raspberry Pi-enheter används i industriella fall, eller i områden med en opålitlig strömförsörjning, kan extra försiktighetsåtgärder förbättra tillförlitligheten.

Kortfattat kan alternativen för att förbättra tillförlitligheten listas enligt följande:

  • Använd ett välkänt och pålitligt SD-kort.
  • Minska skrivningar med längre commit-tider, med hjälp av temporära file system, med hjälp av ett overlayfs eller liknande.
  • Använd lagring utanför enheten, till exempel nätverksstart eller molnlagring.
  • Implementera ett system för att byta ut SD-kort innan de når slutet av livslängden.
  • Använd en UPS.

Raspberry Pi är ett varumärke som tillhör Raspberry Pi Ltd
Raspberry Pi Ltd

Kolofon
© 2020-2023 Raspberry Pi Ltd (tidigare Raspberry Pi (Trading) Ltd.)
Denna dokumentation är licensierad under en Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND).

  • byggdatum: 2024-06-25
  • byggversion: githash: 3e4dad9-clean

Juridisk friskrivningsklausul
TEKNISK OCH PÅLITLIGHETSDATA FÖR RASPBERRY PI-PRODUKTER (INKLUSIVE DATABLAD) SOM ÄNDRADE FRÅN TID TILL TID ("RESURSER") TILLHANDAHÅLLS AV RASPBERRY PI LTD ("RPL") "I BEFINTLIGT SKICK" OCH EVENTUELLA UTTRYCKLIGA ELLER UNDERFÖRSTÅDDA, UNDERFÖRSTÅDDA, UNDERFÖRSTÅDDA TILL FRÅSES UNDERFÖRSTÅDDA GARANTIER OM SÄLJBARHET OCH LÄMPLIGHET FÖR ETT SÄRSKILT SYFTE. I DEN MAXIMALA UTSTRÄCKNING SOM TILLÅTS AV TILLÄMPLIG LAG SKALL RPL UNDER INGEN OMSTÄNDIGHET VARA ANSVARIGT FÖR NÅGON DIREKTA, INDIREKTA, OAVSIKTLIGA, SPECIELLA, EXEMPELSKADOR ELLER FÖLJDSKADOR (INKLUSIVE, MEN INTE BEGRÄNSADE TILL ANVÄNDNING AV VAROR, UPPHANDLING AV ANVÄNDARE; , DATA , Eller vinster, eller affärsavbrott) orsakade emellertid och på någon teori om ansvar, vare sig det är i kontrakt, strikt ansvar eller skadestånd (inklusive vårdslöshet eller på annat sätt) som uppstår på något sätt ut ur användningen av resurserna, även om det är råd om möjligheten AV SÅDAN SKADA.

RPL förbehåller sig rätten att när som helst och utan vidare meddelande göra förbättringar, korrigeringar eller andra modifieringar av RESURSERNA eller några produkter som beskrivs i dem. RESURSERNA är avsedda för skickliga användare med lämpliga nivåer av designkunskap. Användare är ensamt ansvariga för sitt val och användning av RESURSERNA och all tillämpning av de produkter som beskrivs i dem. Användaren samtycker till att hålla RPL skadeslöst för allt ansvar, alla kostnader, skador eller andra förluster som uppstår till följd av deras användning av RESURSERNA. RPL ger användare tillstånd att använda RESURSERNA enbart i samband med Raspberry Pi-produkterna. All annan användning av RESURSERNA är förbjuden. Ingen licens beviljas till någon annan RPL- eller annan tredje parts immateriella rättigheter.

HÖGRISKAKTIVITETER. Raspberry Pi-produkter är inte konstruerade, tillverkade eller avsedda för användning i farliga miljöer som kräver felsäker prestanda, såsom vid drift av kärnkraftsanläggningar, flygnavigations- eller kommunikationssystem, flygtrafikledning, vapensystem eller säkerhetskritiska tillämpningar (inklusive livsuppehållande system och andra medicintekniska produkter), där fel på produkterna kan leda direkt till dödsfall, personskada eller allvarlig fysisk eller miljömässig skada ("Högriskaktiviteter"). RPL frånsäger sig uttryckligen alla uttryckliga eller underförstådda garantier för lämplighet för högriskaktiviteter och tar inget ansvar för användning eller inkludering av Raspberry Pi-produkter i högriskaktiviteter. Raspberry Pi-produkter tillhandahålls i enlighet med RPL:s standardvillkor. RPL:s tillhandahållande av RESURSER utökar eller ändrar inte på annat sätt RPL:s standardvillkor, inklusive men inte begränsat till de friskrivningar och garantier som uttrycks i dem.

Vanliga frågor

  • F: Vilka Raspberry Pi-produkter stöds av detta dokument?
    A: Detta dokument gäller för olika Raspberry Pi-produkter, inklusive Pi 0 W, Pi 1 A/B, Pi 2 A/B, Pi 3, Pi 4, Pi 400, CM1, CM3, CM4, CM5 och Pico.
  • F: Hur kan jag minska risken för datakorruption på min Raspberry Pi-enhet?
    A: Du kan minska datakorruption genom att minimera skrivåtgärder, särskilt loggningsaktiviteter, och justera commit-tider för file systemet som beskrivs i detta dokument.

Dokument/resurser

Raspberry Pi gör en mer motståndskraftig File System [pdf] Användarhandbok
Pi 0, Pi 1, Att göra en mer motståndskraftig File System, mer motståndskraftigt File System, motståndskraftigt File System, File System

Referenser

Lämna en kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade *