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.
Setting and Clearing the inherit_jdata Flag
gfs_tool setflag inherit_jdata Directory gfs_tool clearflag inherit_jdata Directory |
Setting and Clearing the jdata Flag
gfs_tool setflag jdata File gfs_tool clearflag jdata File |
Specifies the directory where the flag is set or cleared.
Specifies the zero-length file where the flag is set or cleared.
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.
gfs_tool setflag inherit_jdata /gfs1/data/ |
This example shows setting the jdata flag on a file. The file must be zero size. Any data written to the file will be journaled.
gfs_tool setflag jdata /gfs1/datafile |