NFSリモートがディレクトリをエクスポートしているかどうかを確認するにはどうすればよいですか?


11

私のスクリプトでは、ステータスのいくつかのレイヤーがあります。

  1. リモートが利用可能です(ping)
  2. リモートNFSサービスがアクティブです
  3. リモートNFSが特定のディレクトリをエクスポートしています
  4. リモートNFSがマウントされている(マウント)

(2)と(3)についてrcpinfoは、最善の策だと思います。(2)については、サブシェルを開始せずにクエリをNFSサービスに絞り込む方法を理解できません(これはこのアプリケーションでは受け入れられません)。(3)の場合、この情報がリモートで利用できるかどうかはわかりません(sshもちろん、ログインする必要はありません)。

私はRHEL 6に取り組んでおり、標準ディストリビューションに含まれていないプログラムにアクセスできません。

回答:


16

3)の場合、おそらくshowmount -e remote_nfs_server、remote_nfs_serverが何かをエクスポートしたかどうかを示すwhich を使用する必要があります。

そして2)shubshel​​lを使用したくない場合で、リモートサーバーがNFSv3またはNFSv4を実行しているかどうか、およびTCPまたはUDPの場合は、具体的にはrpcinfoでクエリできます:
rpcinfo -u remote_nfs_server nfs 3 UDP経由のNFSv3および
rpcinfo -t remote_nfs_server nfs 4TCP経由のNFSv4

4)については、フォルダがマウントされたリモートファイルシステムであるかどうか確認することをお勧めします


さらに詳しい情報:


showmount -r remoteなら、私に教えてくれるremoteの輸出である何かを、しかし、もし私が決定するためにどのような方法がありremote:/mnt/dir、サブシェル(すなわちパイプライン)を起動せずに輸出されているが?
Sean Allred 2014

showmount -e remoteremote何かをエクスポートしたかどうかを教えてくれます。showmount -rそのオプションが存在しないため、エラーメッセージが表示されるだけです。showmount出力の正規表現に対して基本的にgrepを実行するために、シェルの部分文字列マッチングを使用してみることができます。たぶん、たとえば、stackoverflow.com
questions / 12619720 /…をご覧ください

あるいは、逆に言えば、特定のマウントについてリモートNFSサーバーに具体的にクエリできるスタンドアロンコマンドを知りませんし、存在しないと思います。他の2つの実行可能な方法のみが、sshを介してローカルでリモートサーバーにクエリを実行することです(ただし、NFSのステートレスな性質により、特定のディレクトリが現在エクスポートされているかどうかを判断する信頼できる方法はありません)。他のアプローチは、クライアントからNFSエクスポートをマウントして、終了コードをチェックしてから、ローカルマウントとその内容を確認することです。
doktor5000 2014

-rオプションと私の間違いの対-e-それは私が意味したものです:)「試みのアプローチ」は以前に提案されました。私は特に好きではありませんが、本当のオプションのように見えます。
Sean Allred

5

showmount -e <server>#3のいくつかの側面に使用できます。エクスポートが単純な場合、少なくともディレクトリ(またはおそらくそのようなディレクトリの親)をエクスポートすることをお勧めします。

# showmount -e server
/export                               (everyone)

#2の場合、何を探しているのかわかりません。NFSv3を使用している場合は、少なくともmountdとnfsを探します(場合によっては、ロックマネージャーの確認が必要になることもあります)。あなたが言うようにあなたはrpcinfoで明示的に何かをチェックすることができます。

# rpcinfo -t server mountd 3
program 100005 version 3 ready and waiting

showmount -r remoteなら、私に教えてくれるremoteの輸出である何かを、しかし、もし私が決定するためにどのような方法がありremote:/mnt/dir、サブシェル(すなわちパイプライン)を起動せずに輸出されているが?
Sean Allred 2014

それはあなたが自由に使える施設に依存します。スクリプトは何で書かれていますか?別の実行可能ファイル(showmount)を起動する方が、別のシェルを起動するよりも問題が少ないのはなぜですか?
BowlOfRed 2014

スクリプトをPython 2.6で記述し、subprocessモジュールを使用しています。それでパイプラインをセットアップすることはできますが、設計をそれほど複雑にしたくありません。スクリプトを正常に強制終了できるように、サブシェルを開始しないようにする必要があります。強制終了した場合、その子プロセスは強制終了されますが、子プロセスの子は強制終了されません。したがって、サブシェルは強制終了されますが、サブシェルが生成するプロセスは強制終了されません。私はまたrpcinfo、戻るのに最大3分かかる可能性があることを指摘しました。これは、サブシェルなしのものの元の基礎です。しかし、今それを変えるのは遅すぎます。
Sean Allred 2014

必要なことを実行する別のスクリプトを作成し(showmountを呼び出すが、ディレクトリの引数を取り、成功/失敗を返し、目的に適したタイムアウトを含める)、Pythonからそのスクリプトを呼び出します。
BowlOfRed 14

すぐに思いつくほど簡単ではないことをお約束します。ロックされていると、rpcinfoSIGKILL以外には反応しません(これは誤報です。OSは明らかにプロセスを強制終了するだけです)。とにかく、それでもシェルが起動し始めrpcinfoます。根本的な問題が残っています。
Sean Allred 2014

0

すべての疑似ルートNFS-V4エクスポートディレクトリを一覧表示します

ls /net/ip-addr-nfs-server

別のスレッドで私の答えを確認してください


以下のために/net仕事にマウントし、/etc/auto.netスクリプトは、サーバーが対応するエクスポートを持っていることを証明しなければなりません。これはshowmountコマンドを使用します。サーバーにNFSv4しかない場合、サーバーは機能しません(showmountが表示されRPC: Program not registered/net/serverレポートするだけですFile not found
Ale
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.