Tengo una máquina virtual (Debian) ejecutándose en un host de máquina física. La máquina virtual actúa como un búfer para los datos que recibe con frecuencia a través de la red local (el período para estos datos es 0.5s, por lo que un rendimiento bastante alto). Todos los datos recibidos se almacenan en la máquina virtual y se envían repetidamente a un servidor externo a través de UDP. Una vez que el servidor externo reconoce (a través de UDP) que ha recibido un paquete de datos, los datos originales se eliminan de la máquina virtual y no se envían nuevamente al servidor externo. La conexión a Internet que conecta la VM y el servidor externo no es confiable, lo que significa que podría estar inactiva durante días a la vez.
La máquina física que aloja la VM obtiene su corte de energía varias veces al día al azar. No hay forma de saber cuándo va a suceder esto y no es posible agregar un UPS, una batería o una solución similar al sistema.
Originalmente, los datos se almacenaban en una base de datos HSQLDB basada en archivos en la máquina virtual. Sin embargo, los frecuentes cortes de energía eventualmente causan que el archivo de script de la base de datos se corrompa (no a nivel del sistema de archivos, es decir, es legible, pero HSQLDB no puede tener sentido), lo que lleva a mi pregunta:
¿Cómo deben almacenarse los datos en un entorno donde los cortes de energía pueden y ocurren con frecuencia?
Una opción que se me ocurre es usar archivos planos, guardar cada paquete de datos como un archivo en el sistema de archivos. De esta manera, si un archivo está dañado debido a la pérdida de energía, puede ignorarse y el resto de los datos permanece intacto. Sin embargo, esto plantea algunos problemas, principalmente relacionados con la cantidad de datos que probablemente se almacenan en la máquina virtual. A 0.5s entre cada pieza de datos, se generarán 1,728,000 archivos en 10 días. Esto al menos significa usar un sistema de archivos con un mayor número de inodos para almacenar estos datos (la configuración actual del sistema de archivos se quedó sin inodos a ~ 250,000 mensajes y se utilizó el 30% de espacio en disco). Además, es difícil (no imposible) de administrar.
¿Hay más opciones? ¿Existen motores de base de datos que se ejecutan en Debian que no se corrompan por cortes de energía? Además, ¿qué sistema de archivos se debe utilizar para esto? ext3 es lo que se usa en este momento.
El software que se ejecuta en la máquina virtual está escrito con Java 6, por lo que esperamos que la solución no sea incompatible.