Stiamo lavorando su un piccolo sistema Linux incorporato (2.6.35-ish) con un dispositivo NAND interno piccolo per il sistema operativo e le applicazioni (250-500Meg) e una scheda SD con schede SD SDHC da 8 GB per i dati.
L'alimentazione dell'unità può essere interrotta in qualsiasi momento.
Il sistema deve archiviare i dati su schede SD. Questi dati sono piuttosto importanti ... è l'intero scopo del sistema. I sistemi sono di solito completamente disconnessi da qualsiasi rete in posizioni remote e i dati vengono recuperati tramite sneakernet ogni 4-8 settimane.
Attualmente, abbiamo semplicemente VFAT sulle schede SD. Ciò è avvenuto principalmente per consentire ai primi client di test di copiare facilmente i dati manualmente sui loro laptop Win7.
Tuttavia, ora sono preoccupato che sia solo questione di tempo fino a quando un'interruzione di corrente nel momento sbagliato provoca la perdita di dati.
Qual è il modo migliore per configurare un tale sistema per prevenire la perdita di dati? JFFS2 suona come quello che vorrei in termini di come scrive i dati (e le esigenze in termini di prestazioni non sono affatto elevate), ma sembra abbastanza faticoso usare block2mtd, ecc. Non sono anche sicuro di come interagirà il livellamento dell'usura della carta con esso.
Qual'è il miglior modo per farlo?
MODIFICARE
Sto pensando di lasciare il filesystem VFAT e allocare file di dimensioni giornaliere alla volta, pieni di 0xFF, che dovrebbero limitare notevolmente l'esposizione ai guasti del ciclo di alimentazione. Potrei quindi solo aggiungere record all'interno di quei blocchi precreati, e spero che le schede SD non siano così stupide da cancellare / indossare scritture di livello in regioni 0xFF.
Posso usare noatime, ma esiste un equivalente nomtime VFAT per impedire le scritture nel campo orario modificato? Avrei bisogno di un modo per impedire qualsiasi aggiornamento dei metadati fino a quando non viene creato il file di un nuovo giorno.
MODIFICA 2
Qualcuno sullo scambio di stack elettronici mi ha ricordato che ci sono anche dati ECC su NAND, quindi non c'è modo di impedire la necessità di una cancellazione.
Quindi, JFFS2 tramite block2mtd sarebbe appropriato in questa situazione?
MODIFICA 3
È peggio di quanto pensassi. Le schede SD che ho cancelleranno i blocchi di dati anche se scrivi esattamente gli stessi contenuti su disco. I blocchi di cancellazione sono 64 KB, ed è troppo grande per ritardare del tutto le scritture. Memorizzerò fino a 128 KB di dati nella memoria flash NAND (di cui posso controllare il comportamento in scrittura), in una specie di journal, quindi scriverò blocchi da 128 KB in un file allineato a 128 KB in una partizione VFAT sulla scheda SD (in caso altre schede SD hanno 128 KB di cancellazione).
sync
comando dopo ogni scrittura sulla scheda SD, scriverà i bit immediatamente dopo averli cambiati / creati senza memorizzarli nella RAM in modo che le tue modifiche siano almeno sulla scheda e non sarebbe andato dalla perdita di potenza.
sync
probabilmente peggiorerebbe le cose, poiché aumenta la frazione di tempo in cui i metadati sono a metà aggiornamento.