Nous travaillons sur un petit système Linux embarqué (2.6.35-ish) avec un petit périphérique NAND interne pour le système d'exploitation et les applications (250-500Meg) et une carte SD avec des cartes SD SDHC 8 Go pour les données.
L'alimentation de l'unité peut être coupée à tout moment.
Le système doit stocker des données sur des cartes SD. Ces données sont assez importantes ... c'est tout le but du système. Les systèmes sont généralement entièrement déconnectés de tout réseau dans des emplacements distants et les données sont récupérées via sneakernet toutes les 4 à 8 semaines.
Actuellement, nous avons simplement VFAT sur les cartes SD. C'était principalement pour que les premiers clients de test puissent facilement copier les données manuellement sur leurs ordinateurs portables Win7.
Cependant, je crains maintenant que ce ne soit qu'une question de temps jusqu'à ce qu'une panne de courant au mauvais moment entraîne une perte de données.
Quelle est la meilleure façon de configurer un tel système pour éviter la perte de données? JFFS2 ressemble à ce que je voudrais en termes d'écriture de données (et les besoins de performances ne sont pas du tout élevés), mais cela semble assez délicat d'utiliser block2mtd, etc. Je ne sais pas non plus comment le nivellement d'usure de la carte interagira avec ça.
Quelle est la meilleure façon de procéder?
ÉDITER
Je pense maintenant à quitter le système de fichiers VFAT et à allouer des fichiers de taille journalière à la fois, remplis de 0xFF, ce qui devrait limiter considérablement l'exposition aux pannes de cycle d'alimentation. Je ne pouvais alors ajouter que des enregistrements dans ces blocs précréés, et j'espère que les cartes SD ne sont pas si stupides qu'elles effaceraient / porteraient des écritures de niveau dans les régions 0xFF.
Je peux utiliser noatime, mais existe-t-il un équivalent VFAT nomtime pour empêcher les écritures dans le champ d'heure modifié? J'aurais besoin d'un moyen pour empêcher toute mise à jour des métadonnées jusqu'à ce qu'un fichier d'un nouveau jour soit créé.
EDIT 2
Quelqu'un sur l'échange de pile électronique m'a rappelé qu'il y avait aussi des données ECC sur NAND, donc il n'y a aucun moyen d'empêcher la nécessité d'un effacement.
Alors, JFFS2 via block2mtd serait-il approprié dans cette situation?
EDIT 3
C'est pire que ce que je pensais. Les cartes SD que je possède effaceront les blocs de données même si vous écrivez exactement le même contenu sur le disque. Les blocs d'effacement font 64 Ko, et c'est trop grand pour retarder entièrement les écritures. Je vais stocker jusqu'à 128 Ko de données en flash NAND (dont je peux contrôler le comportement d'écriture), dans une sorte de journal, puis écrire des blocs de 128 Ko dans un fichier aligné à 128 Ko dans une partition VFAT sur la carte SD (dans cas où les autres cartes SD ont 128KB effaçables).
sync
commande après chaque écriture sur la carte SD, elle écrirait les bits immédiatement après les avoir modifiés / créés sans les stocker dans la RAM afin que vos modifications soient au moins sur la carte et ne serait pas allé par la perte de puissance.
sync
aggraverait probablement les choses, car cela augmente la fraction de temps pendant laquelle les métadonnées sont en cours de mise à jour.