最近SLES9.3から10.2にアップグレードされたボックスで、次の問題が発生しています。
アップグレード前は、NFSマウント(yastを介して定義されていました。つまり、_/etc/fstab
_に表示されていました)は正しく機能していました。ただし、アップグレード後は失敗します。ネットワークトレースは、TCP(ポートマッパーRPCの場合)を介してNFSサーバーに初期接続を行っていることを示していますが、その後のMOUNT呼び出しではUDPに切り替わります。NFSサーバーはそうではないためです。 UDPを許可しない(nfs(5)
のように、データの破損に関する問題が発生する可能性があるため、正当な理由があります)、接続は通過しません。
TCPオプション(fstab内、またはコマンドラインなど)を追加しても効果はありません。
これをトラブルシューティングする過程で、/ var/adm/messagesが起動中に発生したものとして次のことを報告していることがわかりました。
_Failed services in runlevel 3: network
_
(このエラーメッセージにもかかわらず、ボックスにはSSH経由でアクセスできるため、少なくとも一部のネットワークサービスが開始されているようです。)
私の質問、それでは:
以下の回答に関連する情報を追加するための編集。
インターフェイスの1つ(このボックスには2つあります)がDHCPを使用しているため、ネットワークサービスが起動時に失敗していることが判明しましたが、現時点ではまだ利用できません。そのため、今のところ無効にし、ネットワークサービスとNFSクライアントサービスを停止/再起動しましたが、それでも同じ結果が得られます。
クライアント側にはファイアウォールはありません。また、クライアント側のiptables -Lは、すべてが受け入れられることを示します。 /etc/hosts.allowまたは/etc/hosts.denyにはエントリがありません。
NFSサーバー側では、何も変更されていません。リモートnfsserverは確かに、すべてのNFSサービスに対してTCPとUDPの両方を許可することを宣伝しています(ただし、UDPをブロックするiptablesルールがあります)。
/ etc/fstabエントリは非常に基本的です-yastで設定すると何が得られますか?
_x.x.x.x:/volume /localdir nfs defaults 0 0
_
クライアントボックスのrpcinfo-pは、実行中のportmapper v2のみを表示し、TCPとUDPの両方をアドバタイズします。サーバーの場合、通常のサービスをすべて表示します。
_ program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 4047 status
100024 1 tcp 4047 status
100011 1 udp 4049 rquotad
100021 1 udp 4045 nlockmgr
100021 3 udp 4045 nlockmgr
100021 4 udp 4045 nlockmgr
100021 1 tcp 4045 nlockmgr
100021 3 tcp 4045 nlockmgr
100021 4 tcp 4045 nlockmgr
100005 1 udp 4046 mountd
100005 1 tcp 4046 mountd
100005 2 udp 4046 mountd
100005 2 tcp 4046 mountd
100005 3 udp 4046 mountd
100005 3 tcp 4046 mountd
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
_
上記の/ etc/fstabエントリを使用したmount呼び出しは、単純に次のとおりです。
_mount /localdir
_
tcp、v3などのさまざまなオプションでも試してみましたが。
/ etc/fstabエントリ(したがってマウント)とrpcinfo -p呼び出しの両方がIPアドレスを使用しているため、DNS解決の問題は発生しません。
参考までに、他の誰かがこの質問に出くわし、答えを求めている場合:
私はついにこれについてNovellでチケットを開きました。これはSLES10.2の既知のバグであることが判明し(491140:マウントは「nfs」の「proto =」を無視します)、パッチがあります(util-linux-2.12r-35.35.2.x86_64.rpm) 。これをインストールすると、マウントは期待どおりに機能し、すべての要求はTCPを介して行われます。 (Novellのサポートから、これがSLES 10.3に統合されたことが通知されました。)
いくつかのこと。まず、最初にsince the NFS server doesn't allow UDP
、そしてあなたの編集の中でThe remote nfsserver is indeed advertising that it allows both TCP and UDP for all of the NFS services
。これは少し奇妙に思えます。サーバーが許可しないものをアドバタイズするのはなぜですか?
次に、NFSバージョン2またはバージョン3を使用しようとしていますか?バージョン2はUDPのみをサポートしますが、TCPにはバージョン3が必要です。おそらく、マウントオプションでバージョン3を手動で指定すると役立ちますか? (vers = 3)デフォルトが2の場合、TCP)を指定しても何の役にも立ちません。
また、サーバーがバージョン4を完全にサポートしていなかったときに、バージョン4を使用しようとする新しいクライアントで問題が発生しました。 SLESをアップグレードすると、デフォルトバージョンが異なる可能性があります。それを明示的に指定する理由はなおさらです。
/ etc/fstabにもエントリを投稿してみませんか?
同様の理由で、/etc/hosts.deny
にmountd
のエントリが含まれていないことを確認し、hosts.allow
を確認します。価値があるものとして、私は通常hosts.deny
をクリアし、iptables
を使用してアクセスを制御します。
rpcinfo -p nfsserver
を使用して、mountd
が実際にアドバタイズしていることを確認しますTCP —TCPリスニングを無効にするオプション-n
があります。これは(SuSEのIIRC)おそらく/etc/sysconfig/nfs
かそこらに設定されます。
私はあなたの質問を理解しているので、あなたは以下を行うことができます:
rpcinfo
との「接続」ただし、nfsクライアントのnfsサーバーからファイルシステムをマウントすることはできず、エラーメッセージも表示されません。
rpcinfo
とmount
の呼び出しの違いは何ですか?一方でIPアドレスを使用し、もう一方でfqdnを使用しますか?出力とリターンコードの両方のコマンドを投稿していただけますか?
service network restart
を使用して手動でサービスを開始し、どのようなメッセージが表示されるかを確認してください。そこにいくつかの情報があるはずです。物事を明示的に設定してみて、それがどこに到達するかを確認してください。たとえば、/ etc/fstabでは次のようになります。
x.x.x.x:/vol /local nfs proto=tcp,port=2049,mountport=4046,nfsvers=3 0 0
これは、少なくともポートマッパーをバイパスし、上記のTCPポート)に明示的に接続して、デバッグ中に各チャネルをtcpdumpでトレースしやすくする必要があります。