UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - CentOS ext4ファイルシステム




●ext4 ファイルシステム


データベースサーバなどDisk IOが激しくかかるサーバにとってディスクの読み書きがボトルネックとなることがあります。SAS/SATAディスクを使用しているならSSDに変えれば解決することと思いますが、Linux側でext4のジャーナリングモードの変更で高速化を行うことが可能です。


ext4は「ジャーナル」という変更ログ ( ファイルのどこにどのようなデータを書き込むのか示す情報 ) を事前に記録することでファイル更新の安全性を確保するジャーナリングファイルシステムです。初期設定 ( journal ) ではファイルシステムの管理データ ( メタデータ )更新時にジャーナルを使用した保護を実現できます。

ext4のジャーナリングモードには以下の3つがあります。初期設定では安全性とパフォーマンスのバランスがとれた「data=ordered」です。


data=journal メタデータもデータもジャーナルで保護するモード。全てのデータがストレージに2回書き込まれることになるので入出力速度は最も遅い
data=ordered デフォルトの設定。ファイルデータの変更が完了してからメタデータを変更するという処理順序を保証することでメタデータが不正なデータを指し示すことがないようにする。但し、データはジャーナルで保護されていないので処理中断により破損がありえる。
data=writeback データの順番は保存されない。メタデータがジャーナルに記録されたあとでデータがメインファイルシステムに書き込まれる。これはスループットを高くするオプションらしい。このオプションは内部ファイルシステムの完全性を保証する。しかし、クラッシュしたあとのジャーナルによる回復で昔のデータに戻ることも許されている。


上記のうち、data=writebackにすることで書き込みパフォーマンスの改善が期待できます。ただし、太字で書いていますように停電などによる突然の電源断などが起きますとデータが失われる可能性が出てきますので、必ずUPSと接続し自動連携して安全にシャットダウンできることが使用する前提条件となります。


●noatimeオプション


読み込パフォーマンスの早くする手法として/etc/fstabにnoatimeオプションを追記することで改善が期待できます。
Linuxのファイルシステムでは,標準設定でファイルの読み込み時にアクセスタイムも同時記録されます。もしも,アクセス情報を必要とする「tmpwatch」などを使用していないのであれば,に「noatime」オプションを付加するとアクセス度合いを軽減させる効果的です。


●設定変更


こちらの検証環境はCentOS5.6(2.6.18-308.4.1.el5)でパーティションはrootとswapのみなのでrootに設定致します。まずカーネルの起動オプションとして以下のものを追記します。


# vi /boot/grub/menu.lst

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,0)
#          kernel /boot/vmlinuz-version ro root=/dev/hda1
#          initrd /boot/initrd-version.img
#boot=/dev/hda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-308.4.1.el5)
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.18-308.4.1.el5 ro root=LABEL=/ rootflags=data=writeback
        initrd /boot/initrd-2.6.18-308.4.1.el5.img


次に/etc/fstabを編集します。


# vi /etc/fstab

LABEL=/                 /                       ext3    defaults,noatime,data=writeback  1 1
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
LABEL=SWAP-hda2         swap                    swap    defaults        0 0


rootパーティションのジャーナリングシステムを以下のコマンドで変更します。


# tune2fs -o journal_data_writeback /dev/hda1


この後、再起動します。


# reboot


再起動後、mountコマンドで変更が有効になっているか確認します。


# mount

/dev/hda1 on / type ext3 (rw,noatime,data=writeback)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)


以上で完了です。




 

 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.