FreeBSD で NFS (5) 【NFSクライアントとマウントオプション】

NFS

前回「FreeBSD で NFS (4)」で NFS Client 側の説明に移りました.今回も同様にクライアント側の説明をつらつらと書いていきます.

以前 FreeBSD 5.0-RELEASE あたりで Pukiwiki の「FreeBSD で NFS(Network File System) サーバ & クライアント」に纏めていましたが,時代も変わってきてますので再まとめしています.

SPONSORED LINK

クライアント側設定

フォアグラウンドとバックグラウンド

NFS マウントを行う際,フォアグラウンドでのマウントは -o fg オプションでマウントします.バックグラウンドでのマウントは -o bg オプションでマウントします.オプションを付けない場合はフォアグラウンドでのマウントとなります.

たとえば,/etc/fstab に NFS マウントを行う行を記述している場合,フォアグラウンドマウントの場合は NFS マウントが成功するまでずっとマウントを再試行し,次の処理へ移りません.その為,サーバ起動時に延々とマウント待ちが発生します.
一方,バックグラウンドマウントの場合は NFS マウントが失敗したらその後はバックグラウンドでマウントを再試行させてフォアグラウンドプロセスは次の処理へ移ります.ですので,マウントが失敗した場合でもサーバ起動の次の処理に移り,ログインプロンプトの表示まで処理を進めることが出来ます.

どちらが良いか.は NFS マウントする用途によります.ホームディレクトリや Web コンテンツをマウントするような環境の場合,それが無いと NFS クライアント側の機械の意味をなさない.という場合はフォアグラウンドで実行すべきです.
一方,あっても無くても大丈夫な物,たとえば独自ビルドしたパッケージ置き場等はマウントされていないと不便かもしれませんが,通常のワークに問題はない.という形です.

ですので次のように覚えましょう.

  • マウント出来ていないとヤバイものはフォアグラウンド (fg)
  • 無くても困らないものはバックグラウンド (bg)

ハードとソフト

NFS マウントを行う際,ハードマウントの場合は -o hard オプションでマウントします.ソフトマウントの場合は -o soft オプションとなります.これらのオプションの指定が無い場合はハードマウントとなります.

ハードマウントの場合,NFS アクセス時に NFS サーバから応答が無く,タイムアウトとなった場合,ファイル操作を無期限に再試行します.また,シェル上でファイル操作を行った場合は “nfs server not responding” のメッセージがコンソールに延々と表示され,一切の中断操作を受け付けません.
ソフトマウントの場合はタイムアウトとなった場合ファイル操作を呼び出したプログラムに “I/O Error” を返します.

これだけを見るとソフトマウントの方が良いと思いがちですが,ファイル操作をするアプリケーション次第となります.
NAS 等の冗長化された NFS サーバ環境の場合は NFS サーバに障害が発生しても数分でフェイルオーバーされ再度利用出来るという環境が多いでしょう.そのような環境の場合は,ハードマウントだと切り替わり後は何事も無かったように処理を継続出来ます.ソフトマウントの場合はエラーが返り,そのプログラムはエラーで終了となっているでしょう.

Seichan の個人的見解では,クライアント用途や小規模の 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 ですね.ここから 3276865536 と進んでいけるのですが,あまり大きな値を指定しても無意味ですし,逆にパフォーマンスダウンとなってしまいます.

いずれの場合も十分に試験を行ってから本番利用する必要があります.
Seichan のおすすめは 32768 で,殆どの環境で良好なパフォーマンスを出しており,基準値として利用しています.
# 遅くなっても自己責任でお願いします

NFS マウントオプションのまとめ

ここまでで通常利用する NFS マウントオプションについては解説出来たと思います.これらオプションを纏めるとおすすめのマウントオプションは次のようなオプション群になります.このオプションを基準に挙動やパフォーマンスを確認して行くのが良いと思います.

-o nfsv3,tcp,fg,hard,intr,rsize=32768,wsize=32768

以上で,FreeBSD で NFS の NFSv3 を通常利用する分は記載出来たと思います.今後はどこかのタイミングで NFSv4 や他のオプション等の解説を行いたいと思います.

コメント

タイトルとURLをコピーしました