2つのマシンがあります。 (a) は NFS サーバー、(b) は NFS クライアントです。
コンピュータ(a)が再起動したら、再起動せずにコンピュータ(b)からNFSクライアントを回復する方法はありますか?
答え1
その言葉がどういう意味なのかは分かりませんが、そのrecover
意味ならremount
簡単ですsudo mount -a
。
答え2
あなたは試すことができますumount -f mountpoint
Windows NFSサーバーに接続されているRHEL 7システムでこの現象が頻繁に発生します。 umount コマンドは失敗しますが、クライアントの実行を妨げるすべてのエントリを解放します。
答え3
少なくとも3つの可能な問題点があります。
rpc.statd
および対応するポート割り当て- NFSプロトコルで内部的に使用されるホスト名
fsid
サーバー側の非永続的に割り当てられたファイルシステムID
rpc.statd
NFS共有がハードマウントされている場合、共有にアクセスするすべてのプロセスはNFSサーバーの再起動中に中断されますが、NFSサーバーが完全に起動して再実行されると自動的に再開されます。もしそうならないなら、何か間違っています。
NFSバージョン4のすべてのリカバリ機能は同じネットワークポート(通常は2049 / TCP)を使用しますが、以前のバージョンのプロトコルには通常と呼ばれる別のサービスとしてネットワークヘルスモニタサブプロトコルがありますrpc.statd
。このプロセスはクライアントで実行する必要があります。そしてrpc.statd
NFSクライアントとサーバーの両方が互いにネットワークに接続できる必要があります。そうしないと、2 つのシステムのいずれかを再起動した後に NFS 接続が正しく回復しないことがあります。 (望むよりman sm-notify
詳細が必要な場合。NSM OPERATION IN DETAIL
;はsm-notify
、再起動通知を事前に送信するコンポーネントですrpc.statd
。という段落を見つけてください。 )
歴史的にrpc.statd
動的に割り当てられたポート番号がある場合は、まずportmapper
/rpcbind
サービス(常にポート111、UDP、およびTCP)に現在使用されているポート番号を照会する必要がありますrpc.statd
。
このように動的に割り当てられたポートは、最新のファイアウォールネットワークでは望ましくありません。ベストプラクティスは、必要最小限のポート数でのみトラフィックを許可するためです。したがって、NFSv2 / v3サーバーとそのクライアントの間にファイアウォールがある場合は、rpc.statd
NFSv2 / v3サブプロトコルと他のNFSv2 / v3サブプロトコルに固定ポート番号を使用させることは、NFSの信頼性を向上させる重要なステップです。
正確なプロセスは、オペレーティングシステムとそのバージョンによって異なります。結局のところ、プロセスにオプションとポート番号を追加するという問題で終わりますが、rpc.statd
多くのオペレーティングシステムとLinuxディストリビューションにはいくつかの機能が含まれているため、コメントを外すことができます。起動設定ファイルの設定またはスクリプトのシェル変数rpc.statd
。
NFSv3サーバーでは、および/rpc.mountd
のポート番号も固定値でロックする必要があります。クライアントは気にします(NFSでファイルロックを使用することもできます)。lockd
nlockmgr
rpc.statd
lockd
RHEL 7以下では、最後に次の行を追加することでこれを達成できます/etc/sysconfig/network
。
LOCKD_TCPPORT=4045
LOCKD_UDPPORT=4045
STATD_PORT=4046
MOUNTD_PORT=4047
# PCNFSD_PORT=4048
RQUOTAD_PORT=4049
RHEL 8以降には、.txtファイルにコメントされた行の例があります/etc/nfs.conf
。行をコメントアウトして編集して、次のように生成します。
[lockd]
port=4045
udp-port=4045
[mountd]
port=4047
[statd]
port=4046
Debianと関連ディストリビューションで必要な設定は他のファイルにあります。
STATDOPTS="-p 4046"
存在する/etc/default/nfs-common
RPCMOUNTDOPTS="-p 4047"
存在する/etc/default/nfs-kernel-server
options lockd nlm_udpport=4045 nlm_tcpport=4045
in/etc/modprobe.d/nfs-options.conf
(存在しない場合は作成)。
これらの設定を追加して適切なNFSサービスを再起動(または再起動)した後、rpcinfo -p
NFSv3サブプロトコルが固定ポート番号を取得することを確認できます。
(上記のポート番号図NetApp NASデバイス用のNFSv3サービスデフォルトでは使用されますが、NetApp はrpc.mountd
ポート 635 に配置されます。 )
CPU名
プロトコルはrpc.statd
IP アドレスではなくホスト名を使用します。クライアントとサーバーの両方がIPアドレスに標準のホスト名を見つけることができる必要があります。これが不可能な場合、sm-notify
有効な再起動通知をNFS接続の反対側に送信できず、再起動後に回復が失敗する可能性があります。
NFSプロトコルには非対称性があります。 NFSサーバーはクライアントのホスト名(caller_name
NFSプロトコルではsと呼ばれます)を自動的に学習してサーバーに提供しますrpc.statd
が、クライアントにサーバーのホスト名を知らせる同等の対話はありません。したがってmount
、IPアドレッシングコマンドを使用し、クライアントがそのIPアドレスをホスト名にリバースマップできない場合、クライアントはNFSサーバーに再起動通知を送信したときにNFSサーバーが自分で呼び出す名前を知ることはできません。顧客rpc.statd
。
mount
これは、成功したサーバーの再起動からNFSマウントを自動的に回復したい場合は、コマンドにIPアドレスを使用するのが悪いことを意味します。また、クライアントmount
コマンドで使用されている名前がNFSサーバーで実際に使用されている名前と一致することを確認する必要があります。
非fsid
継続的
最新のLinux NFSサーバーは、可能であれば自動的にNFS用のファイルシステムUUIDを使用しますfsid
。基本的に、これらfsid
は永続的でなければなりません。
ただし、以前のUnixおよびその他のNFS実装では、まだ古いスタイルの小さな整数を使用できfsid
、一部は他に設定しない限り、非永続的な方法でランダムに割り当てることができます。その場合、NFSサーバーが再起動した後、クライアントは、共有がアンマウントstale file handle
されてから再マウントされるまで、マウントされたNFS共有にアクセスしようとするとエラーメッセージを生成します。この問題に対する解決策は、fsid
これらのエントリがNFSサーバーに継続的に割り当てられるようにすることです。
(フォールトトレラントNFSサーバーとして機能するフェールオーバークラスター(HP ServiceGuard)として実行されている3つのHP-UXシステムでこれが発生していることがわかりました。これらがfsid
NFSエクスポート/共有構成で明示的に定義されていない場合、クライアントはフェールオーバークラスタリングの目的を無効にする一方のノードから別のノードへのNFSサービスのため、フェイルオーバーはfsid
期待どおりに機能し始めました。