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

8. FAQ

FAQ セクションです。この節の一部は Alan Cox によって書かれた 昔の NFS FAQ をもとにしています。

ファイルシステムのマウントの際に問題が生じたら、 その問題が マウントのチェックリスト の節に記述されていないか見てください。

  1. Linux を nfs サーバにすると ``stale nfs handle'' というエラーが頻発します。

    これは古い版の nfsd にあるバグが原因です。 nfs-server2.2beta16 以降 では修正されています。

  2. ファイルシステムをマウントしようとすると、以下のようなメッセージ が出てしまいます。
      can't register with portmap: system error on send
      
    

    Caldera のシステムをお使いではありませんか?このシステムには rc スクリプトにバグがあります。 Caldera に連絡して修正版を手に入れて下さ い。

  3. NFS サーバにコピーしたプログラムが実行できないのはなぜ?

    効率上の理由で、 nfsd が open ファイルハンドラをキャッシュするから です (nfsd がユーザ領域で実行されていることを思い出して下さい)。 nfsd がファイルをオープンしている間 (つまりそのファイルに書き込みを行った後) には、カーネルはそのファイルに実行許可を与えません。 95 年の春以降の nfsd では、このファイルハンドラのリリースは数秒で終了しますが、古いも のでは数日もキャッシュしたままのこともあります。

  4. NFS ファイルが全部リードオンリーなのですが。

    Linux の NFS サーバはデフォルトではリードオンリーです。 この HOWTO の mountd と nfsd および ファイルシステムをエクスポートする の節を読んでください。 exports と nfsd の man ページを参照してください。 /etc/exports を修正する必要があるでしょう。

  5. Linux の NFS サーバからマウントすると、 ls が 動作している間にファイルの読み書きができなくなります。

    古いバージョンでは rsize=1024,wsize=1024 をつけてマウントする 必要があります。

  6. ブロックサイズを 3500 から 4000 の間にしてマウントすると、 Linux ホストがクラッシュすることがあります。

    基本的には、その範囲以外のブロックサイズを使って下さい。 これは 2.0 と 2.2 カーネルでは起こらないはずです。 私が覚えている限りでは、 1.2 でも起こりませんでした。

  7. Linux では TCP を用いた NFS は可能ですか?

    今のところできません。

  8. Linux マシンから NFS マウントをしようとすると不思議なエラーが続 けざまに表示されます。

    NFS を使うユーザの所属するグループが 8 つ以内に収まっていることを確 認して下さい。古いサーバではこの条件が必要なことがあります。

  9. クライアントマシンをリブートするとき、ハングした NFS サーバを umount するとクライアントがハングしてしまうことがあります。

    リブートや停止するときには NFS サーバを umount せず、単に無視して下 さい。 umount しなければ何も問題を起こすことはありません。コマンドは umount -avt nonfs となります。

  10. Linux の NFS クライアントから Sun や BSD のシステムに書き込むと 非常に遅いのですが。

    NFS の書き込みは通常同期的に行われます (もしデータを失う危険性を気 にしなければこれを無効にすることもできます)。悪いことに、BSD から由来 したカーネルにおいては、小さなブロックにおいてこれがうまく機能しない場 合があるのです。例えば Linux から 4K のデータを 1K のパケットに分けて 書き込もうとすると、 BSD は以下のような動作を行います。

            read 4K page
            alter 1K
            write 4K back to physical disk
            read 4K page
            alter 1K
            write 4K page back to physical disk
            etc..
      
    

  11. たくさんのクライアントを Linux の NFS サーバに接続すると、 突然性能が落ちてしまいます。

    NFS プロトコルはフラグメント化された UDP パケットを用います。 カーネルには、不完全なパケットのフラグメントを、送出前にいくつ まで持てるかという制限値があります。 2.2 では、これは /proc ファイルシステムの /proc/sys/net/ipv4/ipfrag_high_threshipfrag_low_thresh を通して実行時に変更可能です。 2.0 では、これらはコンパイル時の定数で、 .../linux/net/ipv4/ip_fragment.c で定義されている IPFRAG_HIGH_THRESHIPFRAG_LOW_THRESH が該当します。これらの値の意味は、一緒にされる前の UDP フラグメントによるメモリ消費が ``ipfrag_high_thresh'' バイトに達したら (2.2.3 と 2.0.36 でのデフォルトは 256K)、 一度 ``ipfrag_low_tresh'' の大きさに切り捨ててしまう、と いうことなのです。これがフラグメントを投げる前に行われます。 これはほとんどパケットロスと同じように見え、したがって 高いほうの閾値に達すると、サーバの性能が非常に落ちるのです。

    30 クライアントまでなら 256K で充分でしょう。 60 クライアントなら二倍にしましょう。低いほうの閾値も二倍にしましょう。

  12. 私は Linux 2.2 (以降) で knfsd を使っているんですが、 私の AIX, IRIX, Solaris, DEC-Unix, ... マシンからマウントできません。

    knfsd は、自分が NFS version 3 を実装しているとアナウンスします。 が、実際にはしていません。このアナウンスを止めるオプションがあるので、 これを用いてください。あるいはクライアントのマウントオプションリストに "vers=2" を追加してもいいでしょう。

  13. AIX 4 マシンが Linux NFS サーバからマウントできません。 代わりに以下のようなメッセージが出ます。
            mount: 1831-011 access denied for server:/dir
            mount: 1831-008 giving up on:
            server:/dir
            The file access permissions do not allow the specified action.
      
    

    AIX 4.2 は NFS に特権ポート (<1024) を使います。 AIX 4.2.1 と 4.3 はこれ以外のポートでも使えます。また AIX 4.2.1 と 4.3 ではまず NFS3 でマウントしようとし、続いて NFS/TCP で、そして最後に NFS/UDP を試します。

    rc.tcpip の最後に


    nfso -o nfs_use_reserved_ports=1
    

    を追加すれば、特権ポートを使うように強制できます。 (この技は Braian Gorka より寄せられました)


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