emFile Journaling
emFile Journaling è un componente aggiuntivo per il file system emFile che lo rende “fail-safe” (a prova di guasto). I file system privi di supporto al journaling (come FAT ed EFS) non sono fail-safe. Il journaling consiste nel registrare tutte le modifiche in un registro (journal) prima di applicarle al file system principale, garantendo così la coerenza dei dati.
Caratteristiche principali
- I file system non fail-safe diventano fail-safe.
- Piena compatibilità con le implementazioni standard dei file system (es. FAT).
- Può essere utilizzata qualsiasi soluzione di archiviazione. Non è richiesta alcuna riformattazione.
- I molteplici accessi in scrittura al supporto di memorizzazione possono essere combinati nell’applicazione utente.
Teoria del funzionamento
emFile viene tipicamente utilizzato con file system non fail-safe come FAT ed EFS. La perdita di dati può verificarsi sia a livello di driver che a livello di file system. Il livello driver è solitamente fail-safe, quindi l’unico punto critico per la perdita di dati è il livello del file system. Quest’ultimo può essere corrotto da un accesso in scrittura interrotto, ad esempio in caso di interruzione di corrente o crash del sistema. Ciò è intrinseco nel design del FAT e vale per tutte le implementazioni di qualsiasi fornitore. L’add-on emFile Journaling aggiunge il journaling a questo livello.
L’obiettivo di questo livello aggiuntivo è garantire che il file system si trovi sempre in uno stato coerente dopo un reset imprevisto. Le operazioni sul file system non sono quasi mai atomiche. Ad esempio, una singola chiamata a FS_FWrite() per scrivere dati in un nuovo file causa l’esecuzione delle seguenti tre operazioni a livello di memoria:
- Allocazione del cluster e aggiornamento della tabella di allocazione.
- Scrittura dei dati utente.
- Aggiornamento della voce di directory.
Un reset imprevisto durante questo processo può corrompere il file system. Per prevenire tali corruzioni, l’add-on Journaling memorizza ogni accesso in scrittura per mantenere uno stato sempre coerente. Tutte le modifiche vengono memorizzate in un file di journal. I dati presenti nel journal vengono copiati nel file system solo se l’operazione del livello file system è stata completata senza interruzioni.
Questa procedura garantisce la coerenza costante, poiché un’interruzione del processo di copia non porta alla perdita di dati: il processo di copia interrotto verrà riavviato automaticamente al riavvio del sistema.
Scenari di errore
| Momento dell’errore | Stato del file system | Stato dei dati |
| Journal vuoto | Coerente | — |
| Durante la scrittura nel journal | Coerente | Persi |
| Durante la finalizzazione del journal | Coerente | Persi |
| Dopo la finalizzazione | Coerente | Ottenuti |
| Durante la copia dal journal al file system | Coerente | Ottenuti |
| Dopo la copia, prima dell’invalidazione del journal | Coerente | Ottenuti |
| Durante l’invalidazione del journal | Coerente | Ottenuti |
Come utilizzare il journaling
L’utilizzo del journaling è molto semplice dal punto di vista dell’utente:
- Abilitare il journaling nella configurazione di emFile.
- Chiamare
FS_JOURNAL_Create()dopo la formattazione del volume.
Tutto qui. Ogni altra operazione è gestita automaticamente dall’estensione emFile Journaling.
Sicurezza del driver (Driver fail-safety)
I dati possono essere persi in caso di reset imprevisto sia nel livello del file system (FAT o EFS) che nel livello del driver del dispositivo. L’intero sistema è fail-safe solo se entrambi i livelli lo sono. L’add-on Journaling garantisce la sicurezza del livello file system. Per quanto riguarda la sicurezza dei singoli driver di dispositivo, si prega di fare riferimento alle pagine specifiche del driver interessato.
