Rendere la scheda SD a prova di corruzione


11

Il mio dispositivo Linux incorporato utilizza una scheda SD per il salvataggio di alcuni dati di diagnostica, troppo abbondante per il flash interno.

Il problema è se il dispositivo viene spento in modo imprevisto, il filesystem (FAT32) sulla scheda è danneggiato.

Non c'è modo di prevenire interruzioni di corrente impreviste o di spegnerlo in questo modo e il dispositivo dovrebbe essere relativamente esente da manutenzione. Peggio ancora, i dati vengono scritti continuamente, quindi le corruzioni sono molto frequenti e Linux, rilevando FS difettoso, lo rimonta in sola lettura silenziosamente.

Quali metodi suggeriresti per mitigarlo? Sarà sufficiente eseguire fsck.vfat automaticamente all'avvio?

Qualche informazione in più:

  • La scheda non deve essere considerata rimovibile dall'utente. Deve essere pensato come un disco interno. Tutti i dati memorizzati su di esso saranno accessibili per il download sulla rete o su un'unità USB e il sistema elimina automaticamente le voci più vecchie. Ciò significa che non deve essere leggibile sul tuo PC medio.
  • Il sistema attualmente supporta FAT, yaffs e jffs2. È possibile aggiungere altri filesystem al kernel, ma se esistono altri percorsi, li preferiremmo prima.
  • La scrittura può essere sospesa su richiesta anche per diversi minuti senza perdita di dati.
  • la perdita parziale di dati o la corruzione minore è accettabile. L'arresto completo della registrazione non lo è.
  • gli eventi di spegnimento sono completamente imprevedibili per la maggior parte del tempo.
  • il sistema funziona su ARM9, 200MHZ, 64 MB di RAM, 32 MB di memoria flash interna e utilizza la maggior parte della potenza della CPU per il suo ruolo principale. Prendi in considerazione ciò mentre pensi a fantasiose soluzioni ricche di risorse.

3
Probabilmente lo hai già considerato, ma vale la pena menzionarlo per gli altri che si aggirano su questa domanda: la maggior parte delle schede flash (SD, CF, ecc.) Hanno una tolleranza di scrittura di poche migliaia di cicli (nella migliore delle ipotesi). L'uso di schede normali per la registrazione dei dati o attività simili alla fine li ucciderà (e comunemente in meno tempo di quanto si pensi).
Chris S,

@ChrisS: essendo principalmente solo append, e sostituendo le voci più vecchie con quelle più recenti, ha una natura intrinseca di un ottimo bilanciamento del carico delle scritture, specialmente che sono mesi per riempire la carta. Il problema potrebbe essere con la voce FAT stessa ma confido che il controller abbia qualcosa di sensato al riguardo.
SF.

Qual è il costo se il dispositivo è spento e non scrive questi dati sulla scheda? Ad esempio, se i dati diagnostici non vengono scritti, perderai molto tempo o denaro o semplicemente non avrai alcuni file di registro?
Freiheit,

1
@Freiheit: manca una caratteristica piuttosto oscura ma non del tutto irrilevante commercializzata per i clienti, e inoltre nel caso in cui qualcun altro si rovini davvero e cerchi un capro espiatorio, perdiamo una delle strade della difesa in tribunale. La cosa è che i dati prima del probabile fallimento sono i più preziosi: una prova che il dispositivo ha funzionato correttamente fino all'ultimo momento, e non che il suo errore abbia portato gli eventi a degenerare nel disastro.
SF.

Notato. Stai chiaramente acquisendo dati per qualcosa di importante!
Freiheit,

Risposte:


8

È possibile utilizzare il block2mtddriver per utilizzare i filesystem transazionali jffs2 o yaffs (2) che sembrano utilizzare altrove per la scheda SD, il che risolverebbe il problema della perdita di dati o della corruzione del file system allo spegnimento.

Ciò potrebbe tuttavia comportare altri problemi. Poiché è probabile che la scheda SD disponga di meccanismi propri per livellare l'usura e rimappare il settore, questi potrebbero interferire con le implementazioni di jffs2 e yaffs per fare lo stesso, riducendo la durata o le prestazioni della scheda SD. Se questo non è un problema, vale la pena provare.


Con un mese o due per riempire una scheda SD da 2 GB, raggiungere il limite di usura anche con un bilanciamento del carico completamente randomizzato non dovrebbe essere un problema.
SF.

5

Controlla se il kernel che usi supporta flush e / o sync flag per vfat (sembra che alcune versioni lo ignorino, fai attenzione!).

Oppure elimina del tutto il filesystem se tutto può andare in un file (come nel caso di un flusso di log non elaborato!) O in alcuni file di dimensioni fisse (usa le partizioni;)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.