Estoy ejecutando un sistema integrado pequeño uClibc
y busybox
basado en un dispositivo x86. Estoy usando un initramfs pero también estoy montando un ext3
directorio personalizado en un dispositivo flash compacto en modo IDE que estoy usando para almacenar datos de registro de medición persistente creados por una aplicación personalizada de c ++ escrita. Elegí el ext3
sistema de archivos, ya que se recomienda para la seguridad contra la pérdida de energía cuando uso unidades CF en modo IDE en un par de libros que he leído ( Building Embedded Linux Systems de Karim Yaghmour y Embedded Linux Primer de Christopher Hallinan). Esto es particularmente importante y los datos son críticos.
Sin embargo, debido a algunos de los comentarios en mi pregunta anterior Confusión con la forma de restaurar archivos ext3 corruptos si se produce un corte de energía durante la escritura de un archivo , parecería que, de hecho, este sistema de archivos no ofrece la garantía de seguridad contra la corrupción de datos debido al poder pérdida. Entonces me gustaría saber si
- ¿Es
ext3
realmente la mejor opción para esta configuración? - ¿La pérdida de energía durante una operación de escritura de disco solo corrompe la porción de datos que adjunto al archivo periódicamente o puede corromper todo el archivo?
- ¿Los datos que no se escriben en el punto de pérdida de energía son completamente seguros? En particular, ¿existe algún riesgo de que mi
initramfs.cpio
archivo también se corrompa? - ¿Hay algún método que pueda utilizar en el código de mi aplicación para proteger los datos (es decir, crear una partición adicional y escribir mis datos en imágenes espejo para que siempre haya 2 copias)? son aceptables
He visto y leído las respuestas a esta pregunta relacionada: ¿Garantizan los sistemas de archivos de diario contra la corrupción después de un corte de energía? , pero no cubre algunas de las cosas que me confunden.
Me doy cuenta de que estoy haciendo muchas preguntas, pero parece que a pesar de leer mucho material, he tenido una falla fundamental para comprender los riesgos para mis datos en caso de pérdida de energía.
fuente
Me parece que lo que puede lograr una implementación del sistema de archivos en el caso de una pérdida repentina de energía es limitado; después de todo, en realidad está interactuando con el hardware, entonces, ¿qué sucede entre el momento en que envía datos / instrucciones al hardware y cuándo obtiene una respuesta está fuera de su control. Si hubiera un sistema de archivos que pudiera eludir este problema, habría oído hablar de él.
Debido a eso, una estrategia para proteger los datos críticos se beneficiará más de las decisiones tomadas a nivel de hardware , por ejemplo, mediante el uso de una fuente de alimentación ininterrumpida. Probablemente esto no sea tan factible en su situación.
Usted ha dicho que el rendimiento no es realmente un gran problema, así que haga un uso juicioso
fsync()
.He estado usando sistemas de archivos extN personalmente y en servidores de Internet de tráfico medio bajo durante años, y como Alexios, no he visto mucha corrupción debido a fallas de energía (aunque, para ser justos, los servidores tienen UPS y no puedo recordar uno de ellos en realidad baja por ese camino). Un problema mucho más grave es la corrupción por falla del hardware, que diferentes sistemas de archivos pueden (nuevamente) ser más y menos capaces de resolver el problema, pero (nuevamente) esto está fundamentalmente fuera de su control y no pueden evitarlo.
Ocasionalmente he visto archivos perdidos o truncados a tamaño cero. Supongo que hay una buena posibilidad de que estos sean recuperables de alguna manera; esto no era necesario para mí, ya que estaban respaldados. La mayoría de las veces, si hay algún problema,
fsck
parece solucionarlo.Creo que el riesgo es realmente muy bajo debido a una falla de energía, excepto el tipo de corrupción que el almacenamiento flash puede estar sujeto debido a la sobrecarga de energía que puede acompañar a fallas de energía, con lo que no tengo experiencia, pero espero que haya pensado e investigado esto.
Vale la pena repetir el punto sobre fsync () . Los objetos C ++ / iostream no tienen un método para esto (:: flush y :: sync no son fsync), pero todo lo que necesita es un descriptor de archivo.
fuente
sync
opción en el/etc/fstab
archivo, ya que entiendo que esto obliga a que la escritura se realice sincrónicamente. Supongo que esto significa que cuando mi código de escritura de archivo regresa, los datos se han escrito físicamente en el disco. Comprendí que montar consync
esencialmente hace lo mismo que llamarfsync(my_filedescriptor)
después de una escritura. ¿Es correcto entender esto?fsync()
a los puntos que creas que es apropiado no hará daño de todos modos, y hace que el sistema sea más robusto (por ejemplo, si el dispositivo está montado casualmente sin un conjunto de sincronización, etc.).ZFS es definitivamente un sistema de archivos protegido contra la corrupción por diseño y posiblemente el único. Sin embargo, no estoy seguro de la disponibilidad de implementaciones de ZFS (ya sea basadas en fusibles o nativas) para plataformas basadas en uClinux.
fuente
Hay al menos un sistema de archivos comercial que hace un trabajo tremendo asegurándose de que el sistema de archivos casi no se pueda corromper debido a fallas de energía y que los únicos datos que corres el riesgo de perder son los datos que se agregaron cuando se cortó la energía.
El lado negativo es que es muy costoso, en el lado positivo ofrecen un gran soporte. Debido al gasto, en realidad es solo una opción para productos de alto riesgo y / o de alto volumen. Al igual que los equipos incrustados críticos en, por ejemplo, la producción de petróleo y gas, que deben garantizar la integridad del sistema dentro de condiciones de funcionamiento "inciertas" (por ejemplo, apagones frecuentes, etc.).
Consulte DataLight (empresa) y / o producto " Reliance NITRO ". (Reliance es su solución heredada y segura pero no muy efectiva, reemplazada por Reliance NITRO ). Incluso si no tiene dinero para usar este sistema, tienen algunos artículos bastante buenos que discuten cómo funciona su sistema, por qué es más confiable que, por ejemplo, ext3 y ext4.
Mis disculpas si esto se lee como un anuncio, solo quería señalar las opciones.
fuente