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, создаваемых в каталоге с установленным флагом и всех его подкаталогах.
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 для заданного файла или каталога.
  • Установка или снятие флага jdata для каталога с помощью команды gfs2_tool setflag или gfs2_tool clearflag.
Использование команды 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
Флаг j для каталога можно установить с помощью команды chattr. В этом случае журналирование будет включено для всех создаваемых в нем файлов и каталогов. Приведенный набор команд установит флаг j для каталога gfs2_dir, затем будет создан новый файл newfile в каталоге /mnt/gfs2/gfs2_dir и проверено состояние флага 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