Tutto sulla salute della scheda SD / microSD sul Raspberry Pi

La scheda SD è - accanto all'alimentazione - un componente aggiuntivo critico del Raspberry Pi. Monitorare il suo stato di salute è davvero importante per garantire un funzionamento regolare del sistema operativo Raspberry Pi e una buona esperienza utente. Questo articolo vi mostrerà diversi modi per controllare e monitorare la salute della vostra scheda microSD.

Per prima cosa, darò una panoramica approfondita su come funzionano le schede di memoria, in modo da poter capire le possibilità e i limiti del controllo dello stato di salute della vostra scheda SD. Poi spiegherò come proteggere la vostra scheda microSD riducendo i problemi comuni che gli utenti Raspberry Pi sperimentano. Approfondiremo anche le migliori marche di schede microSD per Raspberry Pi che raccomandiamo. Se vuoi, puoi anche saltare più in basso, per ottenere solo i comandi Linux per controllare lo stato attuale della scheda microSD.

Nozioni di base: Dentro la scheda microSD

Inneres einer microSD Karte
Immagine: Illustrazione dell'interno di una scheda SD. La scheda microSD ha una struttura simile. Fonte dell'immagine: CC-BY-SA Korpsvart, Wikimedia Commons

La scheda microSD contiene un chip di memoria flash (a sinistra dell'immagine), e un micro-controller (a destra dell'immagine, di solito basato su ARM).

Flash

La memoria flash immagazzina informazioni "intrappolare" gli elettroniche vengono "iniettati" con alta tensione attraverso un non-conduttore in un cosiddetto cancello galleggiante(**). Gli elettroni fanno quindi parte di un transistor che può permettere o meno il flusso di una corrente collegata, a seconda della carica del gate fluttuante. Teoricamente, non possono scorrere via, perché il gate flottante è elettricamente isolato. Ciò significa che l'informazione viene conservata anche dopo che l'alimentazione di corrente viene interrotta.

L'informazione è sempre letta tra la sorgente (S) e il drenaggio (D). Gli elettroni introdotti nel gate fluttuante aumentano per esempio la tensione di soglia del transistor, a partire dalla quale scorrerebbe la corrente. Il transistor si blocca quindi ad una tensione di lettura normale (non conduce).

Per la programmazione del floating gate, vengono utilizzate tensioni elettriche significativamente più alte (ad es. 10 V) rispetto al normale funzionamento di lettura (ad es. 3,3 V). A questo scopo viene utilizzato anche il gate di controllo (V1/V2/V3).

Per la cancellazione, gli elettroni sono spinti fuori dal gate flottante di nuovo applicando un'alta tensione negativa attraverso il gate di controllo.

I componenti NAND flash usati nelle schede microSD raggruppano i singoli transistor di memoria in pagine, e diverse pagine in blocchi. Una pagina ha tra 512 e 8192 byte, un blocco può contenere fino a 256 pagine (quindi un totale di 2048 kB con 8kB di pagina).

La scrittura (per un "1" logico) può essere fatta in bitwise o almeno in byte/parola. La cancellazione (per uno "0" logico) può essere fatta solo in senso orario. Le informazioni che non sono state modificate devono comunque essere programmate di nuovo.

Le memorie flash hanno una durata limitata a causa della programmazione e della cancellazione, che è data in cicli di cancellazione

La ragione della durata limitata è il danneggiamento dello strato di ossido isolante, che protegge il gate flottante dalla perdita di carica, causato dalle alte tensioni. Non appena questo strato diventa conduttivo, non è più possibile conservare informazioni nella cella di memoria.

Accanto: Celle di memoria a più livelli

Inizialmente, c'erano solo due stati di carica (1 bit di informazione) per cella di memoria. Ora, grazie a diverse porte fluttuanti per transistor, le celle di memoria a più livelli memorizzano diversi stati di carica e quindi diversi bit per transistor di memoria. Il transistor conduce quindi in modo diverso la corrente applicata, che viene valutata durante la lettura.

Da un lato, questo permette di aumentare significativamente la densità delle celle di memoria, ma dall'altro, la lettura è più lenta e le celle di memoria reagiscono molto più sensibilmente con errori di bit alle perdite di carica. Con le celle a singolo livello, sono possibili da 100.000 a 1.000.000 di cicli di cancellazione in scrittura, con le TLC (celle a triplo livello con tre bit per cella di memoria) circa 1000 cicli di cancellazione in scrittura.

Questa è la ragione per cui le schede SD industriali hanno di solito densità di memoria più basse e usano SLC (celle a livello singolo), per una migliore integrità dei dati..

Il controllore

Il compito del controllore è di gestire il flash, e in particolare di eseguire livellamento dell'usura e correzione degli errori di lettura. Le prestazioni e la longevità della scheda microSD dipendono in modo decisivo dagli algoritmi utilizzati nel controller.

La memoria flash non può essere riscritta con la frequenza necessaria a causa del danneggiamento dello strato di ossido isolante delle porte fluttuanti come descritto sopra. Per evitare il danneggiamento di singole aree che vengono utilizzate con particolare frequenza, il controller varia l'allocazione fisica ai blocchi che possono essere indirizzati logicamente dal file system (= wear leveling).

Questa variazione dell'allocazione fisica è anche la ragione per cui il test di scrittura della scheda SD (scrivendo e leggendo con strumenti per blocchi danneggiati, ecc.) in realtà non identificherà i veri blocchi danneggiati e vi permetterà di evitarli a livello di sistema operativo / file system! Solo il controller della memoria flash all'interno della scheda microSD sa a quale blocco viene scritto/letto in un dato momento, e come discusso questo può cambiare nel tempo.

I blocchi difettosi (bad blocks) sono già presenti nella memoria flash nuova di zecca. Questi blocchi difettosi sono marcati in un'area speciale della memoria flash.

Le informazioni di correzione degli errori per i singoli blocchi sono anche gestite in modo che gli errori di lettura possano essere corretti dai checksum. Il controller aggiunge i blocchi con errori di lettura raggruppati alla lista dei blocchi difettosi, e sposta l'effettiva allocazione fisica del blocco logico.

La scheda microSD ha tipicamente - a seconda del produttore - circa 10% di capacità di riserva per scambiare i blocchi cattivi con dei buoni "blocchi di riserva".

Piccoli segreti sporchi: Problemi di memoria flash

La cancellazione è solo in senso orario

I dati possono essere cancellati solo blocco per blocco. La cancellazione stressa le celle di memoria e accorcia la loro vita - vengono creati nuovi blocchi cattivi.

Blocchi difettosi dalla fabbrica

Le memorie flash vengono già spedite con blocchi difettosi. Nel corso del funzionamento, si aggiungono altri blocchi difettosi (bad blocks). Il controller cerca quindi di scrivere/cancellare i blocchi nel modo più uniforme possibile tramite il wear-leveling.

MLC e TLC particolarmente sensibili

Le celle di memoria a celle multilivello (MLC) riducono il numero di cicli di cancellazione e quindi l'affidabilità a lungo termine.

Leggere Disturbare

Un fenomeno non ancora menzionato da me, ma particolarmente perfido, è Leggere Disturbare. Anche quando si legge solo dalla scheda, può - solo leggendo - far sì che le celle di memoria vicine nello stesso blocco cambino la loro programmazione. La probabilità che questo accada aumenta bruscamente dopo alcune 100.000 letture.

Per evitare Read Disturb, il controllore registra quindi il numero di accessi a un blocco per copiarlo tutto intero in una nuova posizione quando viene superata una soglia, e per cancellare il blocco originale. Dopo di che, il blocco può essere riutilizzato di nuovo.

Tutte queste sono cose che un controller deve compensare per poter fingere di essere una "scheda di memoria perfetta" all'esterno, mentre sembra tutt'altro che perfetta all'interno!

Ultimo ma non meno importante, i bit scritti dai raggi X potrebbero essere cancellati involontariamente. Qui, solo un design a prova di raggi X della scheda può garantire che i dati rimangano intatti.

Produttore e selezione di una buona carta

Sia il micro-controller che il dispositivo flash e la scheda microSD finita possono provenire da diversi produttori - la scheda SD Panasonic nella foto di esempio ha il flash Samsung, e il controller è stato fatto in Giappone.

I dispositivi NAND flash sono prodotti da quattro produttori:

  • Samsung <- leader del mercato
  • Toshiba
  • IM Flash Technologies (joint venture tra Micron Technology e Intel)
  • Hynix in collaborazione con Numonyx

Toshiba e Samsung producono la maggior parte dei chip.

SanDisk

TL;DR raccomandato

SanDisk e Toshiba hanno una joint venture per la produzione di flash. Tuttavia, nel 2009, SanDisk ha trasferito i diritti sulle fabbriche a Toshiba per diventare una produttore di memorie flash fabless. Lo sviluppo della memoria è ancora fatto insieme. SanDisk e Toshiba, insieme a Matshushita, sono i fondatori dello standard SD, introdotto nel 1999. Anche lo standard microSD è stato creato da SanDisk.

Ci siamo affidati al marchio SanDisk per molto tempo, e abbiamo avuto esperienze molto buone finora.

Samsung

TL;DR raccomandato

Anche le schede di memoria Samsung sono spesso raccomandate. Come leader del mercato nel settore NAND flash, Samsung può abbinare perfettamente tutti i componenti della scheda SD tra loro, e ha tutte le informazioni necessarie per un prodotto solido.

Kingston

TL;DR NON raccomandato

Abbiamo avuto una brutta esperienza con l'affidabilità delle schede Kingston da 128 GB in un progetto critico. Kingston non ha le proprie fabbriche e compra la capacità in eccesso da altri produttori di flash. Di conseguenza, non è possibile garantire prestazioni costanti.

Il seguente articolo di Bunny Huang è anche interessante in questo contesto.

Toshiba

Toshiba, come #2 nel mercato mondiale della DRAM, vende anche i suoi prodotti di schede di memoria. SanDisk e Toshiba, insieme a Matshushita, sono i fondatori dello standard SD, introdotto nel 1999. Finora non abbiamo esperienza con le schede Toshiba.

Transcend / Silicon Power

Abbiamo anche usato schede Transcend e Silicon Power, specialmente nella gamma a basso costo. Le schede sono fondamentalmente buone, ma abbiamo visto maggiori ritorni / difetti con Transcend che con SanDisk. Per progetti critici, consiglierei quindi piuttosto SanDisk / Samsung.

Scegliere una buona scheda di memoria

Per selezionare una buona scheda di memoria, la prima cosa da fare è scegliere il produttore. Noi raccomandiamo Samsung o SanDisk, e forse Toshiba, per la shortlist.

Successivamente, si dovrebbe considerare la classe di memoria. Questa classe indica la velocità di scrittura più veloce blocco per blocco. Non è la velocità di scrittura per scritture sparse ad accesso casuale, che è più significativa nelle applicazioni del mondo reale.

Una classe superiore è più costosa, ma raccomandata a causa del significativo aumento delle prestazioni. Di solito spediamo schede di classe 10.

In questa panoramica su eLinux.org una scheda di memoria adatta può quindi essere controllata per la compatibilità con il Raspberry Pi. Nota importante: il firmware del Raspberry Pi è stato modificato più volte per una migliore compatibilità con le schede di memoria e per evitare la corruzione dei dati.

Dovresti ordinare da fonti affidabili - per esempio, riceviamo le nostre schede microSD SanDisk direttamente da Raspberry Pi Trading, e da rispettabili e grandi distributori tedeschi. Su Amazon, assicuratevi di ordinare direttamente da Amazon, non da un rivenditore Marketplace.

Alcune informazioni (cid, csd, data, manfid, oemid, serial) della scheda microSD può essere letta con Linux per controllare di aver ricevuto il produttore corretto. Esempi con una scheda Transcend:

cd /sys/class/mmc_host/mmc?/mmc?:*
echo "man:$(cat manfid) oem:$(cat oemid) name:$(cat name) hwrev:$(cat hwrev) fwrev:$(cat fwrev)"
 uomo:0x000074 oem:0x4a60 nome:USD hwrev:0x1 fwrev:0x0
echo "serial:$(cat serial) mdt:$(cat date)"
seriale:0x401e39f2 mdt:03/2017

L'ID del produttore (manfid) è assegnato da SD-3C LLC, così come l'OEM / ID dell'applicazione (oemid). Il oemid identifica l'OEM della carta e/o il contenuto della carta.

Il nome del prodotto (nome) è di 5 caratteri (ASCII). hwrev è la revisione dell'hardware, e fwrev la revisione del firmware. Insieme sono la revisione del prodotto (hwrev.fwrev).

Il seriale è il numero di serie della scheda microSD, è un campo di 32bit che dovrebbe essere letto come intero senza segno.

Il mdt (Manufacturing Date) indica quando la scheda è stata prodotta - anno e mese.

I valori possono essere confrontati con i valori sui siti web per rilevare la frode di schede microSD false. Raccomando di leggere Articolo del blog di Bunny (uno) e questo articolo (due).

Stabile uomo/oem combinazioni di un marchio indicano una catena di approvvigionamento ben controllata e coerente. Per esempio, SanDisk ha la seguente combinazione per tutte le voci nella Wiki di eLinux.org: uomo:0x000003 oem:0x5344. Altre marche, come Transcend, variano i loro fornitori, quindi la qualità costante non può più essere garantita.

Evitare la corruzione dei dati durante il funzionamento

La scheda microSD è il "disco rigido" del Raspberry Pi. Con una normale configurazione di Linux, è trattata esattamente come un disco rigido - si verificano accessi sia in lettura che in scrittura. Linux registra le informazioni in molti file di log, e tra le altre cose, aggiorna i tempi di accesso ai file. I dati sono quindi frequentemente cambiati e sovrascritti. Questo è qualcosa per cui le schede microSD non sono mai state progettate.

Suggerimento #1: spegnere correttamente Raspberry Pi e usare un buon alimentatore

Non si staccherebbe mai un computer Windows. Con i computer Linux, e specialmente i Raspberry Pi supportati da schede microSD, è solo una questione di tempo prima che si verifichi la corruzione dei dati durante le interruzioni di corrente.

Linux ha cache di lettura-scrittura per accelerare le operazioni sui file. Quando si stacca l'alimentazione dal Pi, si possono perdere le informazioni nella cache di scrittura che non sono ancora state scritte sulla microSD.

Come menzionato in precedenza, il controller della microSD sta attivamente spostando i dati a runtime per il livellamento dell'usura, ed evitando disturbi di lettura. Questo avviene all'insaputa del sistema Linux ("trasparente"). E a seconda del produttore, in modo più o meno conservativo. Anche qui - soprattutto durante le operazioni di scrittura! - possono verificarsi danni e perdite di dati.

Quindi dovreste assicurarvi che, dopo aver spento il vostro Pi, l'ACT-LED del Raspberry Pi smetta di lampeggiare, e solo allora togliere l'alimentazione.

Una cattiva alimentazione può anche portare a problemi dovuti a brownout (sottotensione). In caso di dubbio, utilizzare l'alimentatore raccomandato / fornito da Raspberry Pi Trading.

Punta #2 Sistema di sola lettura con sovrapposizioni

Un sistema di sola lettura non protegge la scheda SD dai disturbi di lettura, e quindi dall'invecchiamento dovuto ai necessari cicli di cancellazione. Tuttavia, questo avviene molto più lentamente di quando si scrive attivamente.

Un file system di sola lettura ha anche altri vantaggi, per esempio meno controlli del file system all'avvio.

Soprattutto i sistemi embedded - cioè i sistemi che sono stati sviluppati per uno scopo specifico e sono poi installati in un'applicazione (per esempio il digital signage) non hanno necessariamente bisogno della possibilità di installare costantemente nuovo software e di tenere registri precisi in loco. I log possono essere inviati in rete a un server centrale (ritardati se necessario), e per gli aggiornamenti del sistema il sistema può essere messo in modalità manutenzione per applicare gli aggiornamenti.

Ecco alcune informazioni dal progetto Debian su cui è basata Raspbian: https://wiki.debian.org/ReadonlyRoot.

Usando le sovrapposizioni del disco RAM (in tmpfs), un sistema può ancora scrivere file di log, o fare modifiche ai file. Le sovrapposizioni del disco RAM potrebbero essere periodicamente sincronizzate con partizioni appositamente designate sulla scheda SD. Bisogna fare attenzione al disco RAM in modo che non trabocchi (a causa dei file di log), e c'è naturalmente meno memoria RAM disponibile per le normali attività.

Usiamo questa tecnica con il nostro prodotto Anonymeboxdove si deve supporre che gli utenti semplicemente lo stacchino dalla presa.

State cercando un partner per realizzare una solida soluzione di sola lettura per il vostro progetto embedded Raspberry Pi? Noi (come pi3g e.K.) offriamo servizi di consulenza e sviluppo, per hardware e software.

Suggerimento #3 Riduzione delle operazioni di scrittura

Specialmente con i kernel più vecchi, Linux aggiorna il tempo di accesso per ogni accesso al file, secondo lo standard POSIX. Questo significa che ogni operazione di lettura comporta automaticamente un'operazione di scrittura. C'è la possibilità di impostare esplicitamente noatime in /etc/fstab se non è già impostato (Raspbian sembra impostarlo automaticamente).

Maggiori informazioni su relatime e noatime

Disabilita il registro di sistema usando la maschera:

maschera systemctl systemd-journald.service
Creato collegamento simbolico da /etc/systemd/system/systemd-journald.service a /dev/null.
sudo systemctl mask rsyslog.service
Creato collegamento simbolico da /etc/systemd/system/rsyslog.service a /dev/null.

Altri log creati da altre applicazioni, e le conseguenze della disabilitazione di questi servizi (per esempio, alcuni servizi che non partono più) dovrebbero naturalmente essere esaminati in dettaglio.

Scambio di file:

Se non c'è abbastanza RAM, Linux sposta singole aree di RAM in un file SWAP. (Considerate di usare un Raspberry Pi 4 con abbastanza RAM, per esempio il Pi 4 / 4 GB o il Pi 4 / 8 GB per il vostro caso d'uso). Con il seguente comando si può controllare lo stato del file SWAP:

sudo systemctl status dphys-swapfile
dphys-swapfile.service - LSB: genera automaticamente e usa un file di swap
Caricato: caricato (/etc/init.d/dphys-swapfile)
Attivo: attivo (uscito) da Sat 2017-07-01 19:11:57 UTC; 8min fa
Process: 498 ExecStart=/etc/init.d/dphys-swapfile start (code=exited, status=0/SUCCESS)

Il seguente comando può essere usato per disabilitare lo SWAP:

sudo systemctl disable dphys-swapfile

Conclusione

Le schede microSD in uso continuo mettono a dura prova l'affidabilità a lungo termine dei sistemi basati su Raspberry Pi.

Usando la giusta alimentazione, sistemi di sola lettura con overlay, riduzione costante delle operazioni di scrittura, e selezionando una buona scheda SD di una marca conosciuta, la stabilità può essere aumentata nel lungo periodo.

Se hai bisogno di un supporto professionale per il tuo progetto/prodotto basato su Raspberry Pi, contattaci per una consultazione iniziale gratuita.

Note

(*) NotaIl Raspberry Pi 3, 3B+ e 4 possono avviarsi da supporti USB, o tramite rete (Ethernet), senza scheda microSD.

Specialmente per un avvio tramite rete, si raccomanda ancora di installare una scheda microSD con un firmware speciale, perché un bug di timeout nel codice di avvio impedisce un avvio stabile (Raspberry Pi 3B).

Le spiegazioni precedenti sulla struttura della memoria flash si applicano anche alle chiavette USB, poiché la memoria flash è anche installata in esse.

(**) NotaUn'alternativa sempre più utilizzata alle porte fluttuanti sono le memorie flash charge trapping, il principio funzionale rimane lo stesso. La cella flash charge trapping permette densità di memoria più elevate.

1 commento

  1. Pete in Ottobre 13, 2021 il 8:27 pm

    Ciao,
    c'è un modo per controllare il controller nella scheda SD quanti bad plocks sono presenti?
    Controllando questo periodicamente vorrei costruire un grafico di tendenza.
    Grazie per il lavoro.
    Saluti,
    Peter

Lascia un commento