6.6. 启用数据日志

通常 GFS2 只将元数据写入其日志中。文件内容会随后由内核定期进行的同步(同步会清除文件系统缓冲)写入磁盘。对一个文件的 fsync() 调用会导致将文件数据立即写入磁盘。当磁盘报告所有数据被安全写入时,调用会返回。

对于非常小的文件,数据日志可缩短 fsync() 时间,因为除元数据外,文件数据也会写入日志。随着文件的增大,这个优势会明显降低。在启用数据日志的情况下,对中等和较大文件的写操作会较慢。

对于依赖于 fsync() 同步文件数据的应用程序,启用数据日志会提高性能。在标记的目录及其所有子目录中创建的 GFS2 文件可自动启用数据日志。现有的长度为零的文件也可以打开或者关闭数据日志。

在一个目录上启动数据日志会把目录设定为 "inherit jdata",这代表以后所有在这个目录中生成的文件和目录都会进行日志。您可以使用 chattr 命令在文件中启用和禁用数据日志。

以下命令在 /mnt/gfs2/gfs2_dir/newfile 文件中启用数据日志,然后检查是否正确设定了标志。

# chattr +j /mnt/gfs2/gfs2_dir/newfile
# lsattr /mnt/gfs2/gfs2_dir
---------j--- /mnt/gfs2/gfs2_dir/newfile

以下命令在 /mnt/gfs2/gfs2_dir/newfile 文件中禁用数据日志,然后检查是否正确设定了标志。

# chattr -j /mnt/gfs2/gfs2_dir/newfile
# lsattr /mnt/gfs2/gfs2_dir
------------- /mnt/gfs2/gfs2_dir/newfile

您还可以使用 chattr 命令在目录中设置 j 标志。当您为某个目录设定此标记时,以后在那个目录中生成的所有文件和目录都会进行日志操作。以下命令在 gfs2_dir 目录上设置 j 标志,然后检查是否正确设定了标志。之后,命令会在 /mnt/gfs2/gfs2_dir 目录中创建一个名为 newfile 的新文件,然后检查是否为该文件设置了 j 标志。因为为该目录设置了 j 标志,因此 newfile 也应启用日志功能。

# chattr -j /mnt/gfs2/gfs2_dir
# lsattr /mnt/gfs2
---------j--- /mnt/gfs2/gfs2_dir
# touch /mnt/gfs2/gfs2_dir/newfile
# lsattr /mnt/gfs2/gfs2_dir
---------j--- /mnt/gfs2/gfs2_dir/newfile