NFS の管理

NFS の障害追跡手順

NFS サービスがエラーになった場所を判断するには、いくつかの手順を踏まなければなりません。以下の項目をチェックしてください。

上記の項目をチェックする過程で、ネームサービスやネットワークのハードウェアなど、ネットワークの他の部分が機能していないことが判明する場合があります。NIS+ ネームサービスのデバッグ手順については、『Solaris ネーミングの管理』を参照してください。問題がクライアント側のものではないことが判明することもあります (たとえば作業領域の各サブネットから、最低 1 つのトラブルコールがある場合など)。このような場合は、問題がサーバかサーバ周辺のネットワークハードウェアで発生しているとみなし、クライアントではなく、サーバでデバッグを開始するほうがよいでしょう。

NFS クライアントの接続性のチェック

  1. クライアントと NFS サーバが、ソフトウェア的に接続されていることを確認します。以下のコマンドをクライアントで入力してください。


    % /usr/sbin/ping bee
    bee is alive

    コマンドを入力した結果、サーバが動作していることがわかったら、NFS サーバをリモートでチェックしてください (「NFS サーバをリモートでチェックする方法」 参照)。

  2. クライアントとサーバがソフトウェア的に接続されていない場合は、ローカルネームサービスが動作していることを確認してください。NIS+ クライアントでは、以下を入力します。


    % /usr/lib/nis/nisping -u
    Last updates for directory eng.acme.com. :
    Master server is eng-master.acme.com.
            Last update occurred at Mon Jun  5 11:16:10 1995
     
    Replica server is eng1-replica-58.acme.com.
            Last Update seen was Mon Jun  5 11:16:10 1995
  3. ネームサービスが実行されている場合は、クライアントが正しいホスト情報を受け取るために次のように入力します。


    % /usr/bin/getent hosts bee
    129.144.83.117  bee.eng.acme.com
  4. ホスト情報に誤りがなく、クライアントからサーバに接続できない場合は、別のクライアントから ping コマンドを実行します。

    ping コマンドが失敗したら、「サーバで NFS サービスを確認する方法」 を参照してください。

  5. 別のクライアントとサーバがソフトウェア的に接続されている場合は、ping コマンドを使用して元のクライアントとローカルネット上の他のシステムとの接続性をチェックしてください。

    エラーになる場合は、そのクライアントのネットワークソフトウェアの構成をチェックします (/etc/netmasks/etc/nsswitch.conf など)。

  6. ソフトウェアに問題がない場合は、ネットワークハードウェアをチェックしてください。

    クライアントをネットワークの別の場所へ移動してチェックしてください。

NFS サーバをリモートでチェックする方法

  1. NFS サーバで NFS サービスが実行されていることを、次のコマンドを入力することによって確認します。


    % rpcinfo -s bee|egrep 'nfs|mountd'
    100003  3,2     tcp,udp                          nfs      superuser
    100005  3,2,1   ticots,ticotsord,tcp,ticlts,udp  mountd   superuser

    デーモンが起動していなければ、「NFS サービスの再起動」 を参照してください。

  2. サーバで nfsd プロセスが応答することをチェックしてください。クライアントで以下のコマンドを入力します。


    % /usr/bin/rpcinfo -u bee nfs
    program 100003 version 2 ready and waiting
    program 100003 version 3 ready and waiting

    サーバが動作している場合、プログラムとバージョン番号が表示されます。-t オプションを使用すると、TCP 接続を検査できます。-t オプションでエラーが発生する場合は、「サーバで NFS サービスを確認する方法」 に進んでください。

  3. サーバで mountd が応答することをチェックしてください。以下のコマンドを入力します。


    % /usr/bin/rpcinfo -u bee mountd
    program 100005 version 1 ready and waiting
    program 100005 version 2 ready and waiting
    program 100005 version 3 ready and waiting

    -t オプションを使用すると、TCP 接続を検査できます。エラーになる場合は、「サーバで NFS サービスを確認する方法」 に進んでください。

  4. ローカル autofs サービスを使用していた場合は、それをチェックしてください。


    % cd /net/wasp
    

    /net/home マウントポイントのうち、適切に動作する方をチェックします。動作しない場合は、以下のコマンドをルートとしてクライアントから入力し、autofs サービスを再起動してください。


    # /etc/init.d/autofs stop
    # /etc/init.d/autofs start
    
  5. サーバのファイルシステムの共有が正常に行えることを確認します。


    % /usr/sbin/showmount -e bee
    /usr/src										eng
    /export/share/man						(everyone)

    サーバの項目とローカルマウントエントリにエラーがないことをチェックします。名前空間もチェックしてください。この例で最初のクライアントが eng ネットグループの中にない場合、/usr/src ファイルシステムはマウントできません。

    すべてのローカルファイルを調べて、マウント情報を含むエントリをすべて検査します。リストには、/etc/vfstab とすべての /etc/auto_* ファイルが含まれています。

サーバで NFS サービスを確認する方法

  1. サーバに root としてログインします。

  2. サーバとクライアントがソフトウェア的に接続されていることを確認します。


    # ping lilac
    lilac is alive
  3. サーバとクライアントがソフトウェア的に接続されていない場合は、ローカルネームサービスが動作していることを確認します。NIS+ クライアントで以下のコマンドを入力してください。


    % /usr/lib/nis/nisping -u
    Last updates for directory eng.acme.com. :
    Master server is eng-master.acme.com.
            Last update occurred at Mon Jun  5 11:16:10 1995
     
    Replica server is eng1-replica-58.acme.com.
            Last Update seen was Mon Jun  5 11:16:10 1995
  4. ネームサービスが動作している場合は、サーバにあるネットワークソフトウェアの構成をチェックしてください (/etc/netmasks/etc/nsswitch.conf など)。

  5. 以下のコマンドを入力し、nfsd デーモンが動作していることをチェックします。


    # rpcinfo -u localhost nfs
    program 100003 version 2 ready and waiting
    program 100003 version 3 ready and waiting
    # ps -ef | grep nfsd
    root    232      1  0  Apr 07     ?     0:01 /usr/lib/nfs/nfsd -a 16 root   3127
    2462  1  09:32:57  pts/3  0:00 grep nfsd

    rpcinfo-t オプションを使用し、TCP 接続を確認してください。エラーになる場合は、NFS サービスを再起動してください (「NFS サービスの再起動」 参照)。

  6. 以下のコマンドを入力し、mountd デーモンが動作していることを確認します。


    # /usr/bin/rpcinfo -u localhost mountd
    program 100005 version 1 ready and waiting
    program 100005 version 2 ready and waiting
    program 100005 version 3 ready and waiting
    # ps -ef | grep mountd
    root	   145		  1	0	Apr 07 ?			21:57 /usr/lib/autofs/automountd
    root	   234		  1	0	Apr 07 ?			 0:04 /usr/lib/nfs/mountd
    root	  3084 	  2462	1 09:30:20 pts/3  0:00 grep mountd

    rpcinfo-t オプションを指定し、TCP 接続もチェックしてください。エラーになる場合は、NFS サービスを再起動します (「NFS サービスの再起動」 参照)。

  7. 以下のコマンドを入力し、rpcbind デーモンが動作していることを確認します。


    # /usr/bin/rpcinfo -u localhost rpcbind
    program 100000 version 1 ready and waiting
    program 100000 version 2 ready and waiting
    program 100000 version 3 ready and waiting

    rpcbind がハングしている場合は、サーバをリブートするか、rpcbind のワームスタート」 に示す作業を行ってください。

NFS サービスの再起動

    リブートせずにデーモンを動作させるには、スーパーユーザになって以下のコマンドを入力します。


# /etc/init.d/nfs.server stop
# /etc/init.d/nfs.server start

/etc/dfs/dfstab に項目がある場合、デーモンは停止してから再起動します。

rpcbind のワームスタート

何らかのプログラムが動作しているために NFS サーバをリブートできない場合は、以下のようにワームスタートすることで、RPC を使用するすべてのサービスを再起動せずに rpcbind を再起動できます。

  1. root としてサーバにログインし、rpcbindno の PID を調べます。

    ps を実行すると、PID の値が第 2 カラムに表示されます。


    # ps -ef |grep rpcbind
        root   115     1  0   May 31 ?        0:14 /usr/sbin/rpcbind
        root 13000  6944  0 11:11:15 pts/3    0:00 grep rpcbind
  2. SIGTERM シグナルを rpcbind プロセスに送ります。

    以下の例では、送信するシグナルは term で、プログラムの PID は 115 です (kill(1) のマニュアルページ参照)。これにより、rpcbind/tmp/portmap.file/tmp/rpcbind.file に現在登録されているサービスのリストを作成します。


    # kill -s term 115
    

    注 -

    -s term オプションを使って rpcbind プロセスを終了させないと、rpcbind のワームスタートを完了できません。その場合は、サーバを再起動することによってサービスを再開する必要があります。


  3. rpcbind を再起動します。

    rpcbind のワームスタートを実行すると、kill コマンドの実行で作成されたファイルが参照されるので、すべてのRPCサービスを再起動せずにプロセスを再起動できます (rpcbind(1M) のマニュアルページ参照)。


    # /usr/sbin/rpcbind -w
    

NFS ファイルサービスを提供しているホストを識別する方法

    -m オプションを指定して nfsstat コマンドを実行し、最新の NFS 情報を取得します。

現在のサーバの名前は、 "currserver=" の後に表示されます。


% nfsstat -m
/usr/local from bee,wasp:/export/share/local
 Flags: vers=3,proto=tcp,sec=sys,hard,intr,llock,link,synlink,
		acl,rsize=32768,wsize=32678,retrans=5
 Failover: noresponse=0, failover=0, remap=0, currserver=bee

mount コマンドに使用されたオプションを確認する方法

Solaris 2.6 およびそれ以降に出たパッチに置き換えられた mount コマンドでは、無効なオプションを指定しても警告されません。コマンド行に入力したオプション、または /etc/vfstab から指定したオプションが有効であるかどうかを判断するには、以下の手順を実行します。

たとえば、次のコマンドが実行されたとします。


# mount -F nfs -o ro,vers=2 bee:/export/share/local /mnt
  1. nfsstat コマンドを実行してカーネルを確認します。


    # nfsstat -m
    /mnt from bee:/export/share/local
    Flags:  vers=2,proto=tcp,sec=sys,hard,intr,dynamic,acl,rsize=8192,wsize=8192,
            retrans=5
     

    ここで、bee からマウントされたファイルシステムは、プロトコルのバージョンが 2 に設定されています。nfsstat コマンドを使用しても、一部のオプションの情報は表示されませんが、オプションを確認するにはこれが最も正確な方法です。

  2. /etc/mnttab でエントリを確認します。

    mount コマンドでは、無効なオプションはマウントテーブルに追加されません。したがって、実行したコマンド行のオプションと /etc/mnttab にある当該オプションを比較すれば、nfsstat コマンドによってレポートされないオプションがわかります。


    # grep bee /etc/mnttab
    bee:/export/share/local /mnt nfs        ro,vers=2,dev=2b0005e 859934818