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
디렉토리에 j 플래그를 설정하기 위해 chattr를 사용할 수 있습니다. 디렉토리에 이러한 플래그가 설정되어 있을 때, 결과적으로 디렉토리에 생성된 모든 파일 및 디렉토리는 저널링됩니다. 다음의 명령은 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