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クラスターを復旧してください。