Tutto sulla salute della scheda SD su Raspberry Pi

Salute della scheda SD

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.

Innanzitutto, fornirò una panoramica approfondita sul funzionamento delle schede di memoria, in modo che possiate comprendere le possibilità e i limiti del controllo dello stato di salute della vostra scheda SD.

Poi spiegherò come proteggere la scheda microSD riducendo i problemi comuni degli utenti di Raspberry Pi. Inoltre, esamineremo le migliori marche di schede microSD per Raspberry Pi che raccomandiamo.

Se si vuole, si può anche scendere 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 le informazioni rimangono inalterate anche dopo l'interruzione dell'alimentazione di corrente.

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 programmare il gate flottante sono necessarie tensioni elettriche significativamente più elevate (ad esempio 10 V) rispetto al normale funzionamento in lettura (ad esempio 3,3 V). A tal fine, anche il gate di controllo (V1/V2/V3) svolge un ruolo fondamentale.

Per cancellare tutto, il gate di controllo spinge gli elettroni fuori dal gate flottante applicando una tensione negativa elevata.

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 eseguita in senso bit o almeno in senso byte/parola. La cancellazione (per uno "0" logico) può essere eseguita solo in senso orario. Se ci sono informazioni non modificate, devono essere programmate di nuovo.

Le memorie flash hanno una durata limitata a causa della programmazione e della cancellazione, che si calcola in cicli di cancellazione.

La ragione della durata limitata è il danneggiamento dello strato di ossido isolante, che protegge il gate flottante dalle perdite di carica, causato dalle alte tensioni. Non appena questo strato diventa conduttivo, la cella di memoria non può più contenere informazioni.

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 flottanti per transistor, le celle di memoria multilivello memorizzano diversi stati di carica e quindi diversi bit per transistor di memoria. Durante la lettura, il sistema valuta come la corrente applicata viene condotta in modo diverso dal transistor.

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 microcontrollore che il dispositivo flash e la scheda microSD finita possono provenire da produttori diversi: la scheda SD Panasonic nella foto di esempio è dotata di flash Samsung. Il controller è stato prodotto in Giappone.

Ci sono quattro produttori che producono dispositivi NAND flash:

  • 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 (consigliato)

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. Le due aziende collaborano tuttora per lo sviluppo delle memorie. SanDisk e Toshiba, insieme a Matshushita, sono i fondatori dello standard SD, introdotto nel 1999. SanDisk ha anche creato lo standard microSD.

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

Samsung (consigliato)

Consigliamo anche le schede di memoria Samsung. In qualità di leader di mercato nel settore NAND flash, Samsung è in grado di abbinare perfettamente tutti i componenti della scheda SD e dispone di tutte le informazioni necessarie per un prodotto solido.

Kingston (NON consigliato)

Abbiamo avuto una brutta esperienza con l'affidabilità delle schede Kingston da 128 GB in un progetto critico. Kingston non dispone di fabbriche proprie e acquista la capacità in eccesso da altri produttori di flash. Di conseguenza, non c'è garanzia di 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.

È poi importante la classe di memoria. Questa classe indica la velocità di scrittura più elevata, blocco per blocco. Non è la velocità di scrittura per le scritture ad accesso casuale sparse, che è più significativa nelle applicazioni reali.

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è possibile verificare la compatibilità di una scheda di memoria con il proprio Raspberry Pi. Nota importante: il firmware del Raspberry Pi viene costantemente modificato per migliorare la compatibilità con le schede di memoria ed 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)"
 man:0x000074 oem:0x4a60 name: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 a 32 bit che si legge come un numero intero senza segno.

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

È possibile confrontare i valori con quelli dei siti web per individuare le frodi delle schede microSD false. Vi consiglio 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. Altri marchi, come Transcend, variano i loro fornitori, quindi la qualità costante non è una certezza.

Evitare la corruzione dei dati durante il funzionamento

La scheda microSD è il "disco rigido" del Raspberry Pi. Con una normale configurazione Linux, funziona come un normale 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 cambiano quindi frequentemente. Questo è un aspetto 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 dispone di cache di lettura e scrittura per velocizzare le operazioni sui file. Quando si stacca l'alimentazione dal Pi, si possono perdere le informazioni contenute nelle cache di scrittura che non sono state trasferite 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è quelli che servono a uno scopo specifico in un'applicazione (ad esempio, la segnaletica digitale), non hanno necessariamente bisogno della possibilità di installare costantemente nuovo software e di tenere registri precisi in loco. È possibile inviare i registri attraverso la rete a un server centrale (se necessario in differita) e per gli aggiornamenti del sistema è possibile mettere il sistema in modalità di manutenzione per applicare gli aggiornamenti.

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

Utilizzando le sovrapposizioni del disco RAM (in tmpfs), un sistema può ancora scrivere file di registro o apportare modifiche ai file. È possibile sincronizzare periodicamente le sovrapposizioni del disco RAM con partizioni appositamente designate sulla scheda SD. È necessario prestare attenzione al disco RAM, in modo che non trabocchi (a causa dei file di log), e la memoria RAM disponibile per le normali attività è ovviamente inferiore.

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à stato impostato (Raspbian sembra impostarlo automaticamente).

Maggiori informazioni su relatime e noatime

Disabilita il registro di sistema usando la maschera:

systemctl mask 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 è possibile verificare 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)

È possibile utilizzare il seguente comando per disabilitare 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.

Utilizzando l'alimentazione giusta, sistemi di sola lettura con overlay, riduzione costante delle operazioni di scrittura e scegliendo una buona scheda SD di un marchio noto, è possibile aumentare la stabilità a lungo termine.

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.

Soprattutto per l'avvio tramite rete, si consiglia 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é anch'esse si basano sulla memoria flash.

(**) 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.

Se volete saperne di più sulle schede SD con il vostro Raspberry Pi, date un'occhiata a i nostri numerosi articoli sull'argomento qui.

5 commenti

  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

    • unintell in Novembre 9, 2022 il 3:55 pm

      sarebbe impossibile per una normale scheda SD di livello consumer, a meno che non si disponga dello strumento MP per lo specifico controller utilizzato, che non è mai disponibile.
      Sarebbe possibile se la scheda fosse di tipo industriale e avesse informazioni SMART disponibili (specificate nei rispettivi datasheet), e quindi si potrebbe scrivere del codice per leggere i dati SMART.
      Ma questo è solo l'inizio del problema. Non esiste uno standard industriale per il monitoraggio dello stato di salute delle schede SD, quindi ogni produttore implementa il protocollo in modo diverso e non sempre viene pubblicato.
      Il report SMART di alcuni produttori fornisce solo una percentuale del tempo di vita rimanente della scheda, mentre altri forniscono informazioni più dettagliate, tra cui blocchi riservati, blocchi danneggiati iniziali, blocchi danneggiati successivi, conteggio delle cancellazioni max/min/avg, tempo di vita P/E, ecc.
      Attualmente sono riuscito a leggere le statistiche di salute delle schede di Lexar, ADATA, ATP, Sandisk, Apacer, Metorage, Delkindevices, SiliconePower, Swissbit e altre ancora.
      La mia motivazione è quella di decifrare le informazioni SMART da schede industriali di seconda mano a basso costo prodotte da Foresee, per ora sono riuscito a decifrare le schede della serie MPS/M9M/M9H/D7D/X52/X53 e sto ancora lavorando su altri modelli.

      Spero che ci sia presto uno standard industriale per le informazioni intelligenti delle schede SD. Inoltre ho trovato divertente il fatto che alcune schede SD abbiano una durata del TBW superiore a quella di molti SSD lmao

      • unintell in Novembre 9, 2022 il 4:03 pm

        Oh, ho dimenticato di dire che la maggior parte delle schede (ma non tutte, merda) fornisce informazioni SMART inviando il comando CMD56 alla scheda con un argomento int a 32bit, dovrete trovare quel numero magico dal datasheet e il rispettivo formato dei dati per leggere i dati. Se avete il datasheet, allora avete praticamente finito, controllate lo strumento sdmon su github per un esempio di codice.
        Se il datasheet non è disponibile o il numero magico non è pubblicato, dovrete iterare l'intero spazio di 31 bit (il bit più basso è sempre 1) dell'int per decifrarlo con la forza, e potrebbe richiedere da 12 ore a mezzo mese a seconda della vostra fortuna. Spero che non ci siano produttori malvagi che iniziano il loro numero magico con 0xF_______. Per ora tutti i numeri magici che sono riuscito a craccare/raccogliere iniziano con 0x1_______.

        Alcune schede richiedono una routine più complessa per leggere le informazioni SMART, come Apacer, ma per fortuna hanno fornito le informazioni necessarie nella scheda tecnica. Apacer produce schede OEM anche per altre marche, per cui si applica la stessa procedura.

  2. [...] Salute della scheda SD (include le migliori pratiche per prendersi cura della propria scheda SD!) [...]

  3. [...] Tutto sulla salute della scheda SD / microSD su Raspberry Pi [...]

Lascia un commento