Title: Scrivere in modo sincrono su filesystem
Author: Sandro Tosi
Last modified: 2004-11-07
Ci sono due modi per scrivere le informazioni sul disco: la modalita`
sincrona (ogni scrittura viene subito effettuata realmente sul disco)
e la modalita` asincrona (le scritture vengono mantenute in un buffer
ed effettuate ``a blocchi'').
Linux effettua, solitamente, la scrittura su filesystem in modalita`
asincrona: cio` consente di incrementare le prestazioni in quanto il
kernel e` in grado di riordinare l'ordine delle letture e delle
scritture in modo da ridurre gli spostamenti delle testine.
Le opzioni di default per il montaggio di un filesystem, che si
chiamano appunto ``defaults'', contengono gia` il flag ``async''
attivato. Per fare in modo di utilizzare la scrittura sincrona,
occorre specificare il flag ``sync'' tra le opzioni di mount.
E` probabile attendersi, a questo punto, una diminuzione delle
prestazioni, favorendo pero` l'aggiornamento dei dati: infatti,
utilizzando la modalita` asincrona, in caso di riavvio improvviso, i
dati presenti nei buffer sarebbero persi; in modalita` sincrona, quei
dati potrebbero essere gia` stati scritti.
Purtroppo pero` si presenta un altro problema (generico per ogni tipo
di filesystem): e` necessario che l'operazione di scrittura sia
un'operazione atomica.
Per atomicita` di un'operazione, si intende renderla un evento non
interrompibile, a tempo di esecuzione praticamente nullo, in modo da
garantire di trovarsi solo in due configurazioni:
1. l'operazione e` stata eseguita _interamente_;
2. l'operazione e` stata interrotta e quindi _non_ eseguita;
In questa situazione, la consistenza e` garantita: si possono perdere
dati (ma se sono scritti lo sono per intero) pero` l'integrita` del
filesystem e` intatta.
Per ogni tipo di filesystem, l'operazione di scrittura genera una
serie di eventi, che vanno dalla scrittura vera e propria del dati,
all'allocazione degli inode, alla scrittura dei descrittori del file,
etc. Una interruzione del funzionamento tra la prima e l'ultima
operazione di questa sequenza, lasciera` il filesystem in uno stato
inconsistente.
L'utilizzo di filesystem journaling e della scrittura sincrona puo`
prevenite quasi tutti i problemi di consistenza dati di un filesystem
(sono esclusi i problemi hardware).
|