3.7. Data Journaling

Ordinarily, GFS2 writes only metadata to its journal. File contents are subsequently written to disk by the kernel's periodic sync that flushes file system buffers. An fsync() call on a file causes the file's data to be written to disk immediately. The call returns when the disk reports that all data is safely written.
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 metadata. Verrà ritornato un fsync() appena i dati vengono scritti sul journal; questo processo può essere più veloce rispetto al tempo necessario per scrivere i dati del file sul file system principale.
Le applicazioni che si affidano al fsync() per eseguire la sincronizzazione dei dati del file possono avere migliori prestazioni attraverso il journaling dei dati. Il data journaling può essere abilitato automaticamente per qualsiasi file GFS2 in una directory flagged (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.
Enabling data journaling on a directory sets the directory to "inherit jdata", which indicates that all files and directories subsequently created in that directory are journaled. You can enable and disable data journaling on a file or a directory with either of the following methods:
  • Esecuzione del comando chattr +j o chattr -j sul file o directory
  • Impostazione o rimozione di jdata sulla directory o sul file tramite il comando gfs2_tool setflag o gfs2_tool clearflag
L'utilizzo del comando chattr è il modo preferito per abilitare o disabilitare il data journaling su di un file o una directory.

3.7.1. Come abilitare o disabilitare il data journaling con il comando chattr

È possibile abilitare e disabilitare il data journaling su di un file tramite il comando chattr. I seguenti comandi abilitano il journaling dei dati 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