FreeBSD の NFS について以前 Pukiwiki の「FreeBSD で NFS(Network File System) サーバ & クライアント」に纏めていましたが,当時 5.0 RELEASE の頃に纏めてましたのでだいぶ状況が変わってしまいました.
ですので今のバージョン 9.2-RELEASE をターゲットに改めて解説します.
前回「FreeBSD で NFS (NFSクライアントとマウントオプション①)」で NFS クライアント側の説明に移りました.今回も同様にクライアント側の説明行います.
- NFS に関する話題
クライアント側設定
フォアグラウンドとバックグラウンド
NFS マウントを行う際,フォアグラウンドでのマウントは -o fg オプションで実行します.一方,バックグラウンドでのマウントは -o bg オプションを使用します.オプションを付けない場合はデフォルトでフォアグラウンドでのマウントとなります.
たとえば,/etc/fstab に NFS マウントを記述している場合,フォアグラウンドマウントでは NFS マウントが成功するまで処理がブロックされ,次の処理に移行しません.そのため,サーバ起動時にマウント処理が完了するまで待機します.
一方,バックグラウンドマウントでは,NFS マウントが失敗しても後続の処理が進行し,再試行はバックグラウンドで行われます.これにより,マウント処理が失敗した場合でもサーバーの起動が進行し,ログインプロンプトの表示まで待機することができます.
どちらを選択するかは,NFS マウントの目的によります.ホームディレクトリーや Web コンテンツなどの重要なファイルをマウントする場合は,フォアグラウンドでのマウントが適しています.一方、独自ビルドしたパッケージのリポジトリーなど,通常の操作に影響を与えないファイルをマウントする場合は,バックグラウンドでのマウントを検討することができます.
したがって,次のように覚えるのが良いでしょう.
- マウントできていないと困る場合はフォアグラウンド (fg)
- 無くても困らない場合はバックグラウンド (bg)
ハードとソフト
NFS マウントを行う際,ハードマウントの場合は -o hard オプションを使用します.一方,ソフトマウントの場合は -o soft オプションを指定します.これらのオプションを省略した場合は,デフォルトでハードマウントが適用されます.
ハードマウントの場合,NFS サーバーからの応答がなくタイムアウトした場合,ファイル操作は無期限に再試行されます.また,シェル上でのファイル操作時には「nfs server not responding」というメッセージがコンソールに表示され,中断操作を受け付けません.
一方,ソフトマウントの場合,タイムアウト時にはファイル操作を呼び出したプログラムに「I/O Error」が返されます.
これらの違いから,ソフトマウントの方がより優れているように思われますが,実際にはアプリケーションの動作によって異なります.例えば,NAS などの冗長化された NFS サーバー環境では,NFS サーバーに障害が発生しても数分でフェイルオーバーされ,再び利用可能になることが多いです.このような場合,ハードマウントを使用すると切り替わり後に処理を継続できますが,ソフトマウントの場合はエラーが返り,関連するプログラムがエラーで終了する可能性があります.
個人的な見解として,クライアント用途や小規模の NFS サーバーが冗長化されていない環境では,ソフトマウントの方が扱いやすいと考えられます.一方,サーバー環境や大規模の NFS サーバーが冗長化されている場合は,ハードマウントの方が適していると考えられます.
ハードマウントと割り込み
ハードマウントの場合,NFS サーバからの応答がなくタイムアウトした場合,ファイル操作は無期限に再試行されます.また,シェル上でのファイル操作時には「nfs server not responding」というメッセージがコンソールに表示され,一切の中断操作を受け付けません.
これが都合の悪い場合,割り込みを受け付けるようにするオプション -o intr を使用します.このオプションを指定すると Ctrl+C (SIGINT) を発行してプロセスをエラーで終了させることができます.
したがって,ハードマウントする場合は割り込みも合わせて指定するようにしてください.つまり -o hard,intr です。
読み込みデータサイズと書き込みデータサイズ
読み込みと書き込み時に NFS が利用するバッファーサイズを調整することができます.通常,FreeBSD 9.2 では読み書きいずれも 8192 バイトがデフォルト値です.一般的にはこのサイズでも十分なパフォーマンスが得られますので,特に理由がなければデフォルトのままでも問題ありません.
ただし,最近のサーバ (PCでも同様です) の処理速度の向上や NIC 自体の性能向上により,バッファーサイズを上げることでパフォーマンスを向上させることができます.
読み取りバッファーサイズは -o rsize=バッファーサイズ,書き込みバッファサイズは -o wsize=バッファーサイズ を指定します.バッファーサイズは 1024 バイト以上で,2 のべき乗を指定する必要があります.たとえば、8192 の次に大きい値は 16384 です.それ以上の値を指定しても,無意味な場合や逆にパフォーマンスが低下する可能性があります.
いずれの場合も,本番環境で使用する前に十分な試験が必要です.個人的には 32768 がお勧めです.
ほとんどの環境で良好なパフォーマンスを提供し,基準値として利用しています.
なお,設定によってはパフォーマンスが低下する可能性があるため,ご利用の際は自己責任でお願いします.
NFS マウントオプションのまとめ
ここまでで通常利用する NFS マウントオプションについては解説出来たと思います.これらオプションを纏めるとおすすめのマウントオプションは次のようなオプション群になります.このオプションを基準に挙動やパフォーマンスを確認して行くのが良いと思います.
ここまでで,通常利用する NFS マウントオプションについては解説が完了しました.これらのオプションをまとめると,以下のようなおすすめのオプション群になります.これらのオプションを基準にして,挙動やパフォーマンスを確認していくことが重要です.
- -o bg: バックグラウンドでのマウントを行います.マウントが失敗した場合でも処理を続行します
- -o hard: ハードマウントを行います.再試行を延々と続け,中断操作を受け付けません
- -o intr: 割り込みを受け付けるように設定します.ハードマウントと併用することが推奨されます
- -o rsize=32768: 読み取りバッファサイズを 32768 バイトに設定します
- -o rsize=32768: 書き込みバッファサイズを 32768 バイトに設定します
コマンドオプションとして纏めるとこのようになります.
-o nfsv3,tcp,rw,fg,hard,intr,rsize=32768,wsize=32768
以上で FreeBSD での NFS の NFSv3 を通常利用する方法について詳しく説明しました.今後は,NFSv4 やその他のオプションについても解説していきたいと考えています.
コメント