4.8. Data Journaling
Solitamente GFS2 scrive sul proprio journal solo i metadati. I contenuti del file vengono scritti successivamente sul disco dal processo periodico di sincronizzazione del kernel, il quale svuota i buffer del file system. Una chiamata
fsync()
su di un file, causerà la scrittura immediata dei dati del file sul disco. La chiamata ritorna quando il disco riporta il completamento della scrittura di tutti i dati.
Il data journaling può causare una riduzione del periodo di
fsync()
, in modo particolare per file più piccoli, poichè i dati del file vengono scritti sul journal in aggiunta ai metadati. Questo vantaggio si riduce velocemente con l'aumento della dimensione del file. La scrittura su file medio-grandi sarà più lento se il data journaling è stato abilitato.
Le applicazioni che si affidano al
fsync()
per eseguire la sincronizzazione dei dati del file possono avere migliori prestazioni attraverso il data journaling. Il data journaling può essere abilitato automaticamente per qualsiasi file GFS2 in una directory con opzione corretta (insieme a tutte le sottodirectory relative). I file esistenti con una lunghezza allo zero possono avere la funzione di journaling dei data abilitata o disabilitata.
Abilitando il data journaling su di una directory, quest'ultima verrà impostata su "inherit jdata", il quale indica che tutti i file e le directory successivamente create nella directory in questione verranno salvate all'interno dei journal. È possibile abilitare o disabilitare il data journaling su di un file con il comando
chattr
:
I seguenti comandi disabilitano il data journaling sul file
/mnt/gfs2/gfs2_dir/newfile
, e successivamente controllano l'impostazione corretta del flag.
[root@roth-01 ~]#chattr +j /mnt/gfs2/gfs2_dir/newfile
[root@roth-01 ~]#lsattr /mnt/gfs2/gfs2_dir
---------j--- /mnt/gfs2/gfs2_dir/newfile
I seguenti comandi disabilitano il data journaling sul file
/mnt/gfs2/gfs2_dir/newfile
, e successivamente controllano l'impostazione corretta del flag.
[root@roth-01 ~]#chattr -j /mnt/gfs2/gfs2_dir/newfile
[root@roth-01 ~]#lsattr /mnt/gfs2/gfs2_dir
------------- /mnt/gfs2/gfs2_dir/newfile
È possibile utilizzare
chattr
per impostare il flag j
su di una directory. Quando impostate il suddetto flag per una directory, tutti i file e le directory successivamente create nella directory in questione, verranno salvate nel journal. L'insieme di comandi imposta il flag j
sulla directory gfs2_dir
, e controlla se il flag è stato impostato correttamente. Altresì, i comandi creeranno un nuovo file chiamato newfile
nella directory /mnt/gfs2/gfs2_dir
, e successivamente controlleranno l'impostazione del flag j
per il file. Poichè il flag j
è stato impostato per la directory, anche il newfile
dovrebbe avere il journaling abilitato.
[root@roth-01 ~]#chattr -j /mnt/gfs2/gfs2_dir
[root@roth-01 ~]#lsattr /mnt/gfs2
---------j--- /mnt/gfs2/gfs2_dir [root@roth-01 ~]#touch /mnt/gfs2/gfs2_dir/newfile
[root@roth-01 ~]#lsattr /mnt/gfs2/gfs2_dir
---------j--- /mnt/gfs2/gfs2_dir/newfile