前のページ 次のページ 目次

4. NFS クライアントの設定

まずカーネルに NFS ファイルシステムの機能を持たせる必要があります。 直に組み込むか、モジュールとして利用できるようにするかしておいて下さい。 これらはカーネルをコンパイルする前に指定します。まだ一度もカーネルのコ ンパイルをしたことのない人は kernel HOWTO などを読んでがんばって下さい。 また良くできた配布パッケージ(Red Hat など)を使っていて、これまでカー ネルやモジュールをいじっていない(つまり台無しにしていない :-) のなら、 おそらく NFS はすでに利用できるようになっているでしょう。

続いて root のプロンプトで適切な mount コマンドを実行すればファイル システムを利用できるようになります。前の章からの例を続けることにして、 eris/mn/eris/local をマウントする場合を考えます。こ の場合は以下のようなコマンドになります。


mount -o rsize=1024,wsize=1024 eris:/mn/eris/local /mnt

rsizewsize オプションについては後で説明します。この時点で /mnt 以下でファイルシステムが利用できるようになっているはずで す。 cdls したり、それぞれのファイルを見ることもできます。 このファイルシステムはローカルなものよりは遅いかもしれませんが、でも ftp よりはずっと便利でしょう?

もしマウントがうまく行かなくて、 mount: eris:/mn/eris/local failed, reason give by server: Permission denied というようなエラー メッセージが出る場合には、サーバの exports ファイルが間違っていないか、 修正後に exportfs の実行を行ったかを確認して下さい。また mount clntudp_create: RPC: Program not registered というエラーだった場 合は、サーバで mountd か nfsd が実行されていないのが原因です。

ファイルシステムを切り離すには以下のようにします。


umount /mnt

システムの起動時に NFS ファイルシステムをマウントさせるためには、 /etc/fstab ファイルを通常のように編集します。我々の例に従えば、 以下のような行が必要になります。


# device      mountpoint     fs-type     options              dump fsckorder
…
eris:/mn/eris/local  /mnt    nfs        rsize=1024,wsize=1024 0    0
…

これでほとんど終わりですが、この先も読んで下さいね。

4.1 NFS を最適化する

rsizewsize といったオプションがない場合、通常 NFS は 4096 か 8192 バイトを単位に読み書きを行います。しかし Linux のカーネルとネットワー クカードの組み合わせによっては、この設定では動かなかったり、あるいは遅 くなってしまったりする場合があります。ですからここでは実験を行って、最 速になるような rsizewsize を決定しするやり方を述べることに します。転送速度は簡単なコ マンドの組み合わせで調べることができます。先ほど示した mount コマンド で書き込み可能にしたディスクに、以下のようなコマンドを用いることでシー ケンシャルな書き込みの性能をテストすることができます。


time dd if=/dev/zero of=/mnt/testfile bs=16k count=4096

このコマンドによって中味がすべて 0 のバイト列で埋め尽くされた 64Mb のファイルができます。何度か(5〜10 回くらい)行って平均時間を求めて下さい。 この場合最も大事なのは `elapsed' あるいは `wall clock' で表示される時 間です。次にこのファイルを再読み込みすることで、読み込み性能のテストを 行います。


time dd if=/mnt/testfile of=/dev/null bs=16k

こちらも数回行って平均しましょう。その後 umount し、 rsizewsize に大きな値を入れて再び mount して下さい。 値は 1024 の倍数になるようにし、 16384 を越えないようにするとよいでしょ う。ブロックを大きくしすぎるとランダムアクセスの速度が落ちるからです。 mount したらそのファイルシステムに cd で入り、中味が正しく見 えるかをしばらく調べてみて下さい。 rsizewsize を大きくし すぎると、常にとは限りませんが妙な兆候が現われます。よくある例としては、 「"ls" の結果がエラーメッセージは出ないのに不完全にな る」や「ファイルの読み込みがエラーメッセージ無しで失敗する」場合などが あります。さて、与えた rsizewsize でシステムが正しく動作 していることがわかったらもう一度速度のテストをしてみましょう。サーバの OS が違うと最適なサイズも異なる場合が多いです。 SunOS や Solaris の場 合は 4096 が他に比べてずっと速かったりするそうです。

最近の Linux カーネル(1.3 のどれか以降)では rsize をマシンのペー ジサイズと同じかそれ以上にすると先読みが行われます。 Intel の CPU で はページのサイズは 4096 バイトです。先読みは NFS の読み込み速度をはっ きり体感できるほど高速化します。ですから Intel のマシンでは、可能ならば rsize を 4096 バイトにすると良いでしょう。

rsizewsize を反映させるためには /etc/fstab の編集が必 要になることをお忘れなく。

NFS の書き込み速度を上げる技として、サーバの同期書き込みを禁止する 方法があります。 NFS の仕様によると、データが不揮発性のメディア(普通 はディスク)に書き込まれるまで、NFS の書き込み要求は終了されたとは見な されません。この仕様のため書き込み性能に制限が生じます。また非同期 書き込みによって NFS の書き込み速度が上昇するのはこのためです。 これまで Linux の nfsd で同期書き込みが実装されたことはありません。な ぜなら Linux のファイルシステムの実装においては同期書き込みが重要視さ れていないからです。しかし Linux 以外のサーバでは exports ファイ ルに以下のような記述をすることによって性能を上げることが可能です。


/dir    -async,access=linuxbox

書式は異なるかもしれませんので、そのマシンの exports の man ペー ジを参照して下さい。

4.2 他のオプション

他にも一緒につけておくと良さそうなオプションがあります。 NFS サーバ がクラッシュしたときにクライアントでどうするかを指定するものです。サー バの障害に当たっては二つのモードがあります。

soft

NFS クライアントは NFS マウントされたファイルシステムにアクセスしてい るプロセスにエラーを通知します。このエラーを正しく扱えるプログラムはほ とんどありませんので、この設定はお勧めできません。

hard

NFS マウントされたファイルシステム上のファイルにアクセスしているプログ ラムはサーバがクラッシュすると宙ぶらりんになります。これらのプロセスは intr を一緒に指定していない場合は中断することも kill することもで きなくなります。 NFS サーバが復活すると、プログラムはそれぞれ何もなかっ たかのように再開します。おそらくこちらが望ましい場合が多いでしょう。私 は全ての NFS マウントに hard,intr を用いることをお勧めします。

以前の例をまた用いることにします。 4096 バイトが読み書きに最適なこ とがわかったとしますと、 fstab のエントリは以下のようになります。


# device      mountpoint     fs-type    options                  dump fsckorder
…
eris:/mn/eris/local  /mnt    nfs        rsize=4096,wsize=4096,hard,intr 0 0
…


前のページ 次のページ 目次