Ho una macchina virtuale (Debian) in esecuzione su un host di macchine fisiche. La macchina virtuale funge da buffer per i dati che riceve frequentemente sulla rete locale (il periodo per questi dati è 0,5 s, quindi un throughput abbastanza elevato). Tutti i dati ricevuti vengono archiviati sulla macchina virtuale e inoltrati ripetutamente a un server esterno su UDP. Una volta che il server esterno riconosce (su UDP) di aver ricevuto un pacchetto di dati, i dati originali vengono eliminati dalla macchina virtuale e non vengono nuovamente inviati al server esterno. La connessione Internet che collega la VM e il server esterno non è affidabile, il che significa che potrebbe essere inattiva per giorni alla volta.
La macchina fisica che ospita la macchina virtuale viene interrotta più volte al giorno a caso. Non c'è modo di sapere quando sta per accadere e non è possibile aggiungere un sistema UPS, una batteria o una soluzione simile al sistema.
Inizialmente, i dati erano archiviati su un database HSQLDB basato su file sulla macchina virtuale. Tuttavia, le frequenti interruzioni di corrente alla fine causano il danneggiamento del file di script del database (non a livello di file system, cioè è leggibile, ma HSQLDB non può avere senso), il che porta alla mia domanda:
Come devono essere archiviati i dati in un ambiente in cui le interruzioni di corrente possono e si verificano frequentemente?
Un'opzione che mi viene in mente è l'utilizzo di file flat, salvando ogni pacchetto di dati come file sul file system. In questo modo se un file viene danneggiato a causa della perdita di potenza, può essere ignorato e il resto dei dati rimane intatto. Ciò pone tuttavia alcuni problemi, principalmente legati alla quantità di dati che probabilmente verranno archiviati nella macchina virtuale. A 0,5 secondi tra ogni dato, verranno generati 1.728.000 file in 10 giorni. Ciò significa almeno utilizzare un file system con un numero maggiore di inode per archiviare questi dati (l'attuale configurazione del file system ha esaurito gli inode con ~ 250.000 messaggi e il 30% di spazio su disco utilizzato). Inoltre, è difficile (non impossibile) da gestire.
Ci sono altre opzioni? Esistono motori di database in esecuzione su Debian che non verrebbero danneggiati dalle interruzioni di corrente? Inoltre, quale file system dovrebbe essere usato per questo? ext3 è ciò che viene utilizzato al momento.
Il software che gira sulla macchina virtuale è scritto usando Java 6, quindi spero che la soluzione non sia incompatibile.