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).
fuente
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.Respuestas:
Bueno, la forma de solucionar esto es solucionar el problema de "se puede cortar la energía en cualquier momento". ¿Es imposible agregar incluso un minuto de batería?
Alternativamente, tal vez podría usar dos tarjetas SD. Escriba los datos en una tarjeta, sincronice, escriba en la otra. Cada bloque de sus datos necesitaría una suma de verificación y un número de bloque, pero incluso con algunas fallas de energía bastante desafortunadas, una de las tarjetas debería estar en lo cierto.
Su problema básico será la nivelación del desgaste en las tarjetas SD, que AFAIK depende del proveedor de la tarjeta (y tal vez incluso del lote, pueden cambiarlo siempre que sea necesario). Probablemente no maneja el corte de energía correctamente. Y dependiendo de lo que haga, eso no solo significa corromper el bloque en el que está escribiendo.
Por supuesto, "actualizar la tabla de mapeo" no siempre es trivial. Y el orden de 5–10 podría ser diferente (si todos se completan, no importa, bueno, los borrados tienen que venir antes de los escritos, por supuesto). Pero ocurre una falla de energía, podría terminar no solo con A dañado (como es de esperar) sino también con B. O, si ocurre una falla de energía durante una actualización de mapeo, quién sabe qué tipo de corrupción causará.
fuente
Algo similar se discutió en electronics.stackexchange.com: ¿Cómo protejo la tarjeta SD contra fallas inesperadas de energía?
Una respuesta lateral que funciona en conjunto con las soluciones de software es mirar el hardware (hubo una pregunta en ESE sobre esto también, pero no puedo encontrarlo ahora; no se trataba estrictamente de tarjetas SD, solo de dispositivos que pierden energía) y cómo detectar esto y actuar en consecuencia).
La historia corta es: puede que no tenga energía de la batería, pero su fuente de alimentación tiene algunos condensadores bastante grandes para suavizar el suministro. Básicamente, el poder no solo se apaga. El voltaje disminuye gradualmente. Probablemente exista un circuito / circuito de protección de baja tensión que establezca la señal RESET en su sistema integrado cuando el voltaje caiga por debajo de cierto punto. Las placas base de PC también las tienen, y responden a la señal 'POWEROK' de la fuente de alimentación. Lo que esto significa es que, cuando se corta la energía, la computadora se detendrá por la fuerza unos pocos milisegundos antes de que el voltaje caiga por debajo de los niveles seguros. Durante este tiempo, los periféricos como las tarjetas SD todavía están encendidos, pero no hay más transacciones provenientes de la computadora.
Es muy probable que una tarjeta SD tenga tiempo suficiente para completar cualquier transacción pendiente, incluida la nivelación de desgaste, antes de que se apague. Mejorar su fuente de alimentación con un condensador lo suficientemente grande o usar uno cerca de la tarjeta SD puede ayudar a garantizar esto, pero siempre puede experimentar con su plataforma tal como está. Es muy probable que conserve la energía durante el tiempo suficiente.
Si el aspecto de hardware del problema no es un problema, puede resolver los solo de software. Las ideas de derobert de usar dos tarjetas para redundancia no son malas, y usar un sistema de archivos estándar como VFAT corre menos riesgo de confundir los algoritmos de nivelación de desgaste de la tarjeta.
De todos modos, bien podría ser que no tendrás tanto problema. Asumiendo que un bloque en su tarjeta puede sobrevivir a 100 escrituras (conservador, ¡pero trate de obtener tarjetas de buena calidad!), Y usando tarjetas de 8GB, habrá escrito 800GB para cuando el primer bloque muera (estadísticamente hablando, por supuesto).
fuente
Tuvimos un problema con nuestra SD, el sistema de archivos raíz ext2 se corrompió en fallas inesperadas de energía. En primer lugar, hacemos que el sistema se ejecute con un montaje raíz de solo lectura. Como necesitábamos algo de almacenamiento grabable (pero no estábamos registrando datos), configuramos una segunda partición como grabable. Para minimizar el daño de FS en caso de falla de energía inesperada, hemos hecho de esta una partición ext3, aunque esto causará al menos el doble de escrituras físicas en la tarjeta. Esta combinación (pero admito que nuestras escrituras de segunda partición son poco frecuentes en comparación con un registrador de datos) parece ejecutarse sin problemas. Hasta aquí. (Sistemas instalados durante aproximadamente 30 meses en instalaciones profesionales)
fuente
Para la seguridad de datos en un entorno con la posibilidad de cortes de energía y seguridad de datos en general, debe considerar aún más puntos.
NO USE celdas MLC para almacenamiento, solo SLC tiene un tiempo de retención de datos que es suficiente. Entonces, esas tarjetas SLC pueden tener un firmware inteligente, algunas no pueden en ningún estado ser corrompidas por la pérdida de energía. Reconocen el corte de energía midiendo y aseguran que el último bloque está escrito completamente.
Esas tarjetas son más caras y un poco más lentas que las células MLC. Ver proveedores como swissbit para tarjetas.
fuente