Hacer que la tarjeta SD sea a prueba de corrupción

11

Mi dispositivo Linux incorporado utiliza una tarjeta SD para guardar ciertos datos de diagnóstico, demasiado copiosos para flash interno.

El problema es que si el dispositivo se apaga inesperadamente, el sistema de archivos (FAT32) en la tarjeta está dañado.

No hay forma de evitar cortes de energía inesperados o que el usuario lo apague así, y el dispositivo debería estar relativamente libre de mantenimiento. Peor aún, los datos se escriben continuamente, por lo que las corrupciones son muy frecuentes, y Linux al detectar FS defectuoso los vuelve a montar en modo de solo lectura en silencio.

¿Qué métodos sugerirías para mitigar esto? ¿Será suficiente ejecutar fsck.vfat automáticamente en el inicio?

Alguna información más:

  • La tarjeta no debe considerarse extraíble por el usuario. Debe considerarse como un disco interno. Todos los datos almacenados en él serán accesibles para su descarga a través de la red o en una unidad usb, y el sistema purgará automáticamente las entradas más antiguas. Eso significa que no necesita ser legible en su PC promedio.
  • El sistema actualmente admite FAT, yaffs y jffs2. Es posible agregar otros sistemas de archivos al núcleo, pero si existen otras vías, las preferiríamos primero.
  • La escritura puede suspenderse bajo demanda incluso durante varios minutos sin pérdida de datos.
  • pérdida de datos parcial o corrupción menor es aceptable. La detención completa del registro no lo es.
  • Los eventos de apagado son completamente impredecibles la mayor parte del tiempo.
  • el sistema funciona con ARM9, 200MHZ, 64MB de RAM, 32MB de memoria flash interna y utiliza la mayor parte de la potencia de la CPU para su función principal. Tenga esto en cuenta al pensar en soluciones sofisticadas con muchos recursos.
SF.
fuente
3
Probablemente ya lo haya considerado, pero vale la pena mencionarlo para otros que vagan por esta pregunta: la mayoría de las tarjetas flash (SD, CF, etc.) solo tienen una tolerancia de escritura de unos pocos miles de ciclos (en el mejor de los casos). El uso de tarjetas normales para el registro de datos o tareas similares las matará eventualmente (y comúnmente en menos tiempo de lo que la gente piensa).
Chris S
@ChrisS: en su mayor parte solo para agregar, y reemplazar las entradas más antiguas por las más nuevas, tiene la naturaleza inherente de un muy buen equilibrio de carga de escrituras, especialmente que son meses para llenar la tarjeta. El problema puede estar en la entrada FAT en sí, pero confío en que el controlador haga algo razonable al respecto.
SF.
¿Cuál es el costo si su dispositivo está apagado y no escribe estos datos en la tarjeta? Por ejemplo, si los datos de diagnóstico no están escritos, ¿perderá mucho tiempo o dinero o simplemente no tendrá algunos archivos de registro?
Freiheit
1
@Freiheit: falta una característica bastante oscura, aunque no del todo importante, comercializada para los clientes, y además, en caso de que alguien más se equivoque y busque chivo expiatorio, perdemos una de las vías de defensa en los tribunales. Lo más importante es que los datos previos a una posible falla son una prueba: una prueba de que el dispositivo funcionó correctamente hasta el último momento, y no que su propia falla haya hecho que los eventos se intensifiquen en el desastre.
SF.
Célebre. ¡Claramente estás capturando datos para algo importante!
Freiheit

Respuestas:

8

Puede usar el block2mtdcontrolador para usar los sistemas de archivos transaccionales jffs2 o yaffs (2) que parece estar empleando en otro lugar para su tarjeta SD, lo que resolvería su problema de pérdida de datos o corrupción del sistema de archivos al apagar.

Sin embargo, hacerlo podría generar otros problemas. Como es probable que la tarjeta SD tenga mecanismos propios para nivelar el desgaste y reasignar el sector, estos podrían interferir con las implementaciones de jffs2 y yaffs para hacer lo mismo, disminuyendo la vida útil o el rendimiento de su tarjeta SD. Si esto no es un problema, vale la pena intentarlo.

el wabbit
fuente
Con un mes o dos para llenar una tarjeta SD de 2GB, alcanzar el límite de desgaste incluso con un equilibrio de carga completamente aleatorio, esto no debería ser un problema.
SF.
5

Compruebe si el kernel que usa admite el vaciado y / o el indicador de sincronización para vfat (parece que algunas versiones lo ignoran, ¡tenga cuidado!).

O simplemente elimine el sistema de archivos por completo si todo puede ir en un archivo (¡como sería el caso con una secuencia de registro sin formato!) O en algunos archivos de tamaño fijo (use particiones;)

rackandboneman
fuente