J'ai une machine virtuelle (Debian) exécutée sur un hôte de machine physique. La machine virtuelle agit comme un tampon pour les données qu'elle reçoit fréquemment sur le réseau local (la période pour ces données est de 0,5 s, donc un débit assez élevé). Toutes les données reçues sont stockées sur la machine virtuelle et transmises à plusieurs reprises à un serveur externe via UDP. Une fois que le serveur externe reconnaît (via UDP) qu'il a reçu un paquet de données, les données d'origine sont supprimées de la machine virtuelle et ne sont plus envoyées au serveur externe. La connexion Internet qui connecte la machine virtuelle et le serveur externe n'est pas fiable, ce qui signifie qu'elle peut être interrompue pendant plusieurs jours.
La machine physique qui héberge la machine virtuelle obtient sa coupure de courant plusieurs fois par jour au hasard. Il n'y a aucun moyen de savoir quand cela est sur le point de se produire et il n'est pas possible d'ajouter un onduleur, une batterie ou une solution similaire au système.
À l'origine, les données étaient stockées sur une base de données HSQLDB basée sur des fichiers sur la machine virtuelle. Cependant, les coupures de courant fréquentes finissent par endommager le fichier de script de base de données (pas au niveau du système de fichiers, c'est-à-dire qu'il est lisible, mais HSQLDB ne peut pas le comprendre), ce qui conduit à ma question:
Comment les données doivent-elles être stockées dans un environnement où les coupures de courant peuvent et se produisent fréquemment?
Une option à laquelle je peux penser est d'utiliser des fichiers plats, en enregistrant chaque paquet de données en tant que fichier sur le système de fichiers. De cette façon, si un fichier est corrompu en raison d'une perte d'alimentation, il peut être ignoré et le reste des données reste intact. Cela pose cependant quelques problèmes, principalement liés à la quantité de données susceptibles d'être stockées sur la machine virtuelle. À 0,5 s entre chaque donnée, 1 728 000 fichiers seront générés en 10 jours. Cela signifie au moins utiliser un système de fichiers avec un nombre accru d'inodes pour stocker ces données (la configuration actuelle du système de fichiers a manqué d'inodes à ~ 250 000 messages et 30% d'espace disque utilisé). De plus, c'est difficile (pas impossible) à gérer.
Il y a-t-il des alternatives? Existe-t-il des moteurs de base de données fonctionnant sur Debian qui ne seraient pas corrompus par des coupures de courant? De plus, quel système de fichiers doit être utilisé pour cela? ext3 est ce qui est utilisé actuellement.
Le logiciel qui s'exécute sur la machine virtuelle est écrit en utilisant Java 6, donc j'espère que la solution ne serait pas incompatible.