4.10. Data Journaling
Ordinarily, GFS 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.
Data journaling can result in a reduced
fsync()
time, especially for small files, because the file data is written to the journal in addition to the metadata. An fsync()
returns as soon as the data is written to the journal, which can be substantially faster than the time it takes to write the file data to the main file system.
Applications that rely on
fsync()
to sync file data may see improved performance by using data journaling. Data journaling can be enabled automatically for any GFS files created in a flagged directory (and all its subdirectories). Existing files with zero length can also have data journaling turned on or off.
Using the
gfs_tool
command, data journaling is enabled on a directory (and all its subdirectories) or on a zero-length file by setting the inherit_jdata
or jdata
attribute flags to the directory or file, respectively. The directory and file attribute flags can also be cleared.
Usage
Setting and Clearing the
inherit_jdata
Flag
gfs_tool setflag inherit_jdataDirectory
gfs_tool clearflag inherit_jdataDirectory
Setting and Clearing the
jdata
Flag
gfs_tool setflag jdataFile
gfs_tool clearflag jdataFile
Directory
- Specifies the directory where the flag is set or cleared.
File
- Specifies the zero-length file where the flag is set or cleared.
Examples
This example shows setting the
inherit_jdata
flag on a directory. All files created in the directory or any of its subdirectories will have the jdata
flag assigned automatically. Any data written to the files will be journaled. This example also shows the gfs_tool stat
command you can use to verify what flags are set for a directory; the output has been elided to show only the relevant information.
[root@tng3-1]#gfs_tool setflag inherit_jdata /mnt/gfs/data
[root@tng3-1]#gfs_tool stat /mnt/gfs/data
... Flags: inherit_jdata
This example shows setting the
jdata
flag on a file. The file must have a size of zero when you set this flag. Any data written to the file will be journaled. This example also shows the gfs_tool stat
command you can use to verify what flags are set for a file; the output has been elided to show only the relevant information.
[root@tng3-1]#gfs_tool setflag jdata /mnt/gfs/datafile
[root@tng3-1]#gfs_tool stat /mnt/gfs/datafile
... Flags: jdata