3.7. 数据日志
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.
数据日志可减小
fsync()
时间,特别是对于小文件,因为文件数据在写入元数据外还要写入日志。数据写入日志后 fsync()
就会返回,这样就比将文件数据写入主文件系统要迅速。
依赖
fsync()
同步文件数据的应用程序可能因使用数据日志而使性能有所提高。在被标记的目录及其所有子目录中生成的 GFS2 文件可自动启用数据日志。现有长度为 0 的文件也可以打开或者关闭其数据日志功能。
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:
- 在文件或者目录中执行
chattr +j
或者chattr -j
- 使用
gfs2_tool setflag
或者gfs2_tool clearflag
命令为文件或者目录设定或者清除jdata
标签
使用
chattr
命令是在某个文件或者目录中启用和禁用数据日志的首选方法。
3.7.1. 使用 chattr
命令启用和禁用数据日志
您可以使用
chattr
命令为某个文件启用或者禁用数据日志。以下命令为 /mnt/gfs2/gfs2_dir/newfile
文件启用了数据日志功能,并检查是否正确设定了标签。
[root@roth-01 ~]#chattr +j /mnt/gfs2/gfs2_dir/newfile
[root@roth-01 ~]#lsattr /mnt/gfs2/gfs2_dir
---------j--- /mnt/gfs2/gfs2_dir/newfile
以下命令禁用了
/mnt/gfs2/gfs2_dir/newfile
文件中的数据日志,并查看是否正确设定了标签。
[root@roth-01 ~]#chattr -j /mnt/gfs2/gfs2_dir/newfile
[root@roth-01 ~]#lsattr /mnt/gfs2/gfs2_dir
------------- /mnt/gfs2/gfs2_dir/newfile
您还可以使用
chattr
在目录中设定 jdata
标签。当您为某个目录设定此标签时,之后在那个目录中创建的所有文件和目录也都会进行日志操作。以下一组命令可在 gfs2_dir
目录中设定 j
标签,然后查看是否正确设定了该标签。此后,该命令会在 /mnt/gfs2/gfs2_dir
目录中创建一个名为 newfile
新文件,然后查看是否将为该文件设定了 j
标签。因为是为该目录设定的 j
标签,然后应该也为 newfile
启用日志操作。
[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