4.8. データジャーナリング
通常、GFS2 はそのジャーナルにメタデータのみを書き込みます。この後、ファイルの内容がファイルシステムバッファをフラッシュするカーネルの定期的な同期によってディスクに書き込まれます。任意のファイルで
fsync()
を呼び出すと、そのファイルのデータがディスクに即時に書き込まれます。ディスクにより全データが安全に書き込まれたことが報告されると、この呼び出しが返されます。
データのジャーナリングを行うとメタデータに加えて更にファイルデータがジャーナルに書き込まれるため、特に小さなファイルの場合は
fsync()
にかかる時間を短縮することができます。ファイルサイズが大きくなるとこの利点は急激に少なくなります。データジャーナリング機能をオンにすると、中型および大型ファイルへの書き込み速度がかなり遅くなります。
ファイルデータの同期を
fsync()
に依存してするアプリケーションの場合、データジャーナリングを使用するとパフォーマンスが向上する場合があります。フラグを付けたディレクトリー (および、その全サブディレクトリー) 内に作成される GFS2 ファイルはすべてデータジャーナリングが自動的に有効になります。また、長さゼロの既存ファイルについてもデータジャーナリングをオンまたはオフにすることができます。
任意のディレクトリー上でデータジャーナリングを有効にするとそのディレクトリーに「inherit jdata」がセットされます。このディレクトリー内に以後作成されるファイルやディレクトリーがすべてジャーナリングされるという意味です。
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