再起動せずにNFSクライアントを再初期化する

再起動せずにNFSクライアントを再初期化する

私はNFSを使用してディレクトリをエクスポートしたサーバーで作業しています。もちろん、ワークステーションのファイルシステム(ブートマウントから)を週に数回エクスポートすることを忘れたか、サーバーが再起動されましたumount/etc/fstabその間、後で再インストールできましたumount(私はいいえ使用autofs):

umount -fl /data0
mount /data0

しかし、これはもう機能しません。

できないサーバーからエクスポートされたディレクトリを別のディレクトリにマウントしましたが(マウントを中止)できるnfsは、マイワークステーションで実行されている仮想マシンにエクスポートされたディレクトリをマウントします。

私が試したことは(rmmodnfsnfsv3モジュールを削除することでした(これはうまくいきませんでした:)Resource temporarily unavailablelsof歩く。mountマウントされた項目は表示されませんnfs。これは "umount -l"を何度も使用した結果ですが、最初の2回は問題なく動作しました。

同時にサーバーを再起動しましたが、インストールできず、何の効果もありませんでした。私もそれを使用しましたservice nfs-kernel-server restart。クライアントワークステーションを再起動すると、すべてが正常に戻ると考えられます。

再起動せずにこの問題を修復し、ワークステーションでnfsクライアントを再初期化する方法はありますか?
再起動しないと解決できませんが、使い始めてもこの現象は発生しませんかautofs

lsof -b最後の数行が中断されます。

lsof: avoiding readlink(/run/user/1001/gvfs): -b was specified.
lsof: avoiding stat(/run/user/1001/gvfs): -b was specified.
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1001/gvfs
      Output information may be incomplete.

この前の行には/data0

アイテム/etc/fstab

192.168.0.2:/data0 /data0  nfs  defaults,auto,nolock,user 0 2

答え1

@PaperMonkeyがコメントで提案したように永久に再試行することを含むデフォルトのインストールオプションを使用したため、問題が発生する可能性があります。

intr破損したNFSマウントなどの場合、I / Oをより簡単に中断する方法がありましたが、今は機能しません。 SIGKILLNFSで停止しているプロセスを中断することは依然として可能であるため、これをnfs(5)要求します。インストールオプションについては、このマニュアルページを参照してください。

NFS が再試行しないようにするには、softデフォルト値の代わりに使用します。hard

サイレントインストーラを使用することをお勧めします。必要に応じて、どこかに/net/host/foo/barへのシンボリックリンクを作成できます。

一般的に再起動する方が簡単ですが、理論的にはどのプロセスでもNFSで停止kill -9できるはずです。kill -KILLこれでumount -fが機能するようになります。タブの完了により、NFSマウントでより多くのプロセスが中断されないように注意してください。

答え2

以下は、RPMベースのディストリビューションでこの問題を解決するために実行する必要があるコマンドのリストです。

service rpcbind stop
service nfslock stop
rm -rf /var/lib/nfs/statd/sm/*
rm -rf /var/lib/nfs/statd/sm.bak/*

以来:

umount -f /share

答え3

私はこのパーティーに本当に遅れていることを知っていますが、私も同じ問題を抱えていて、上記の答えとコメントのいくつかが役に立ったので要約する必要があると思いました。私の場合はを使用していましたが、autofsNFSマウントの1つが中断され、機能せずにumount -f中断されlsofました。私のNFSマウントでは、このhardオプションなどを使用しています。

このコマンドを使用して、I / Oを待っているすべてのプロセスのステータス、pid、およびコマンドを表示できます。

ps -e -os、pid、cmd | ps -e -os、pid、cmd |

この場合、^ Dは、制御Dシーケンスではなくキャレット(6に移動)の後に大文字Dが続くことです。その後、これらのプロセスを確認して、中断されたファイルシステムに関連する可能性があるプロセスを終了できます。すべての関連プロセスが終了したら、次のコマンドを使用してファイルシステムをアンマウントできます。

削除-fFS

どこFS後で再マウントできる一時停止ファイルシステム。このプロセスは、使用していないときにも役立ちますautofs。私はこれらすべてをFedora 30でテストしました。

答え4

lsof コマンドの結果を使用して、クライアントから古いファイルシステムへの参照を保持するプロセスを見つけ、そのプロセスを終了します。

マウント解除 -f /data0

サーバーをpingできることを確認してから、ドライブを再マウントしてください。必要なプロセスを再起動します。

群れ

クラスタ化されたサーバー設定を実行すると、サーバーがフェイルオーバーを実行するたびに古いnfsファイルハンドルが生成されます。このような状況を回避するには、fsidオプションを使用してファイルシステムをエクスポートする必要があります。両方のサーバー上の各ファイルシステムのfsid番号は同じでなければなりません。ファイルがコピーされたことを確認するのはユーザーの役割です。以下のマニュアルページのスニペットをご覧ください。

fsid=num|root|uuid NFSはエクスポートするすべてのファイルシステムを識別できる必要があります。通常、ファイルシステムのUUID(ファイルシステムにそのようなものがある場合)またはファイルシステムを保持するデバイスのデバイス番号(ファイルシステムがデバイスに保存されている場合)を使用します。すべてのファイルシステムがデバイスに保存されるわけではなく、すべてのファイルシステムにUUIDがあるわけではないため、NFSにファイルシステムを識別する方法を明示的に知らせる必要があります。これはfsid =オプションを使用して行われます。

NFSv4の場合、エクスポートされたすべてのファイルシステムのルートである独自のファイルシステムがあります。これはfsid = rootまたはfsid = 0として指定され、これはまったく同じ意味を持ちます。

他のファイルシステムは、小さな整数または32個の16進数と句読点を含むUUIDで識別できます。

Linuxカーネルバージョン2.6.20以前ではUUID設定が認識されないため、カーネルにfsidオプションを設定する必要がある場合は、小さな整数を使用する必要があります。古いカーネルと新しいカーネルで同じ設定を使用できるように、より小さい数値とUUID設定をサポートします。

関連情報