Estamos trabajando en un pequeño sistema Linux incorporado (2.6.35-ish) con un dispositivo NAND interno más pequeño para el sistema operativo y las aplicaciones (250-500Meg) y una tarjeta SD con tarjetas SD SDHC de 8 Gb para datos.
El poder de la unidad se puede cortar en cualquier momento.
El sistema debe almacenar datos en tarjetas SD. Estos datos son bastante importantes ... es todo el propósito del sistema. Los sistemas suelen estar completamente desconectados de cualquier red en ubicaciones remotas y los datos se recuperan a través de sneakernet cada 4-8 semanas.
Actualmente, simplemente tenemos VFAT en las tarjetas SD. Eso fue principalmente para que los primeros clientes de prueba pudieran copiar fácilmente los datos manualmente en sus computadoras portátiles Win7.
Sin embargo, ahora me preocupa que solo sea cuestión de tiempo hasta que un corte de energía en el momento incorrecto provoque la pérdida de datos.
¿Cuál es la mejor manera de configurar dicho sistema para evitar la pérdida de datos? JFFS2 suena como lo que quisiera en términos de cómo escribe los datos (y las necesidades de rendimiento no son altas en absoluto), pero suena bastante difícil de usar block2mtd, etc. Tampoco estoy seguro de cómo interactuará el nivel de desgaste de la tarjeta con eso.
¿Cuál es la mejor manera de hacer esto?
EDITAR
Ahora estoy pensando en dejar el sistema de archivos VFAT y asignar archivos de tamaño diario a la vez, llenos de 0xFF, que deberían limitar en gran medida la exposición a fallas del ciclo de energía. Entonces solo pude agregar registros dentro de esos bloques creados previamente, y espero que las tarjetas SD no sean tan estúpidas que borrarían / desgastarían las escrituras de nivel en las regiones 0xFF.
Puedo usar noatime, pero ¿existe un VFAT nomtime equivalente para evitar escrituras en el campo de tiempo modificado? Necesitaría alguna forma de evitar cualquier actualización de metadatos hasta que se cree un nuevo archivo del día.
EDITAR 2
Alguien en el intercambio de pila electrónica me recordó que también hay datos de ECC en NAND, por lo que no hay forma de evitar la necesidad de un borrado.
Entonces, ¿sería apropiado JFFS2 a través de block2mtd en esta situación?
EDITAR 3
Es peor de lo que pensaba. Las tarjetas SD que tengo borrarán los bloques de datos incluso si escribe exactamente el mismo contenido en el disco. Los bloques de borrado son de 64 KB, y eso es demasiado grande para retrasar por completo las escrituras. Almacenaré hasta 128 KB de datos en flash NAND (que puedo controlar el comportamiento de escritura), en una especie de diario, y luego escribiré bloques de 128 KB en un archivo alineado a 128 KB en una partición VFAT en la tarjeta SD (en caso de que otras tarjetas SD tengan bloques de borrado de 128 KB).
sync
comando después de cada escritura en la tarjeta SD, escribiría los bits inmediatamente después de haberlos cambiado / creado sin almacenarlos en la RAM para que sus cambios estén al menos en la tarjeta y no se habría ido por la pérdida de poder.
sync
probablemente empeoraría las cosas, ya que aumenta la fracción de tiempo que los metadatos están a mitad de actualización.