Eu tenho uma máquina virtual (Debian) rodando em um host de máquina física. A máquina virtual atua como um buffer para dados que recebe frequentemente na rede local (o período para esses dados é de 0,5s, portanto, um throughput razoavelmente alto). Qualquer dado recebido é armazenado na máquina virtual e repetidamente encaminhado para um servidor externo por UDP. Quando o servidor externo reconhece (por UDP) que recebeu um pacote de dados, os dados originais são excluídos da máquina virtual e não são enviados ao servidor externo novamente. A conexão à Internet que conecta a VM e o servidor externo não é confiável, o que significa que pode estar inativo por dias a fio.
A máquina física que hospeda a VM recebe seu corte de energia várias vezes ao dia aleatoriamente. Não há como saber quando isso está prestes a acontecer e não é possível adicionar um no-break, uma bateria ou uma solução semelhante ao sistema.
Originalmente, os dados eram armazenados em um banco de dados HSQLDB baseado em arquivo na máquina virtual. No entanto, os freqüentes cortes de energia fazem com que o arquivo de script do banco de dados seja corrompido (não no nível do sistema de arquivos, ou seja, é legível, mas o HSQLDB não faz sentido), o que leva à minha pergunta:
Como os dados devem ser armazenados em um ambiente onde cortes de energia podem acontecer com frequência?
Uma opção que posso imaginar é usar arquivos simples, salvando cada pacote de dados como um arquivo no sistema de arquivos. Dessa forma, se um arquivo estiver corrompido devido à perda de energia, ele poderá ser ignorado e o restante dos dados permanecerá intacto. Isso coloca alguns problemas, no entanto, principalmente relacionados à quantidade de dados que provavelmente estão sendo armazenados na máquina virtual. Em 0,5s entre cada dado, 1.728.000 arquivos serão gerados em 10 dias. Isso significa, pelo menos, usar um sistema de arquivos com um número maior de inodes para armazenar esses dados (a configuração atual do sistema de arquivos ficou sem inodes com ~ 250.000 mensagens e 30% de espaço em disco usado). Além disso, é difícil (não impossível) gerenciar.
Existem outras opções? Existem mecanismos de banco de dados executados no Debian que não seriam corrompidos por cortes de energia? Além disso, qual sistema de arquivos deve ser usado para isso? ext3 é o que é usado no momento.
O software que é executado na máquina virtual é escrito usando o Java 6, portanto, esperamos que a solução não seja incompatível.