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 コマンドをファイルかディレクトリで実行する
  • ファイル又はディレクトリにある 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
また、chattr を使用して、ディレクトリ上に j フラグをセットすることもできます。このフラグがディレクトリ用にセットされると、 このディレクトリに以後に作成される全てのファイルとディレクトリがジャーナル化されます。以下のコマンドのセットは 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