Filesystemリソースのfsck問題とその回避法
はじめに

Pacemakerでファイルシステムを管理する際、予期せぬfsck(ファイルシステムチェック)がクラスタ起動の遅延を引き起こすことがあります。特にext3/ext4環境では要注意です。本記事では、Filesystemリソースエージェント(RA)の主要オプションと、fsck問題の回避方法について解説します。
Filesystemリソースエージェント
Pacemakerでは良く利用されているリソースエージェントで、以下の操作を自動化します。
• マウント/アンマウント
• ステータスチェック
Filesystemリソースエージェントの設定例を紹介します。
primitive res_fsmnt Filesystem \
params device="/dev/drbd0" directory="/var/lib/mysql" fstype=xfs options=noatime \
op start interval=0 timeout=60 \
op stop interval=0 timeout=60
主なオプションは以下の通りになります。
• device:マウント対象のデバイスのパス
• directory:マウントポイント
• fstype:ファイルシステムの種類(例:ext4, xfs)
• options:マウント時の追加オプション(例:noatime)
この例ではデバイス/dev/drbd0が/var/lib/mysqlにマウントされます。ファイルシステムの種類はxfsで、noatimeというオプションが追加されます。
ext3/ext4でのfsck自動実行問題
ext3/ext4ファイルシステムでは、以下の条件で自動的にfsckが実行されることがあります:
• マウント回数がデフォルトの30回に達したとき
• 最終チェックから6か月が経過したとき
• ジャーナルがクリーンでない場合
• 過去にファイルシステムエラーが発生した場合
このfsckの実行により、ノードの起動やクラスタ復旧が数分~数十分ブロックされることがあります。ext4ではextentsの導入によりfsckは高速化されていますが、遅延の時間を完全に無視できるわけではありません。
fsckの発動を防ぐ方法
PacemakerのFilesystemリソースにはrun_fsckオプションがあり、マウント前のfsck実行を制御できます。設定値は次の3つになります。
• auto(デフォルト):fstypeに応じて自動判断
• force:常にfsckを実行
• no:fsckを一切実行しない
クラスタ起動時のfsckの遅延を防ぐのを重視する場合、以下のようにrun_fsck=noを設定します。
primitive res_fsmnt Filesystem \
params device="/dev/drbd0" directory="/var/lib/mysql" fstype=xfs options=noatime run_fsck=no \
op start interval=0 timeout=60 \
op stop interval=0 timeout=60
この設定により、Pacemakerはマウント時にfsckを実行せず、起動ブロックを回避できます。ただし、ファイルシステムが破損していた場合はマウントが失敗するため、その場合はfsckを手動で実行して破損を修復します。
XFSファイルシステムでは?
XFSでは、マウント時にfsck相当のチェックは行われません。PacemakerのRAでfstype=xfsを指定した場合、run_fsck=autoでもfsckはスキップされます。
XFSは高性能で信頼性の高いファイルシステムですが、ジャーナルの破損などによりマウントに失敗した場合は、手動でxfs_repairを使った修復が必要になります。Filesystemリソースはマウントエラーで停止するので、エラーが発生したノードでxfs_repairコマンドを実行して修復してください。ただし、マウントを解除する必要があり、その間サービスは停止する必要があります。
xfs_repair /dev/drbd0
まとめ
fsckによるクラスタ起動の遅延は、Pacemaker環境では致命的です。run_fsck=noを活用し、想定外のチェックを防ぎましょう。ext3/ext4ではtune2fsによるfsck間隔の調整も併用することもおすすめします。XFSは故障しにくく定期的なfsckの実行が不要という利点はありますが、まれに修復の実行が必要になる事があります。いずれのファイルシステムもマウントに失敗した場合は、慌てずに修復コマンドを実行してHAクラスターを復旧してください。