NFS:サーバーがオフラインの間、NFS共有を切断できません。

NFS:サーバーがオフラインの間、NFS共有を切断できません。

プライマリNFSサーバーがオフラインになると、共有をマウントするすべてのクライアントは次の影響を受けます。

1. `df` does not work (times out)
2. `lsof` does not work (times out)
3. I cannot unmount the share (umount times out)
4. I cannot restart the client PC, the shutdown process gets stuck 
   while trying to umount the dead NFS share: 
   `nfs server not responding still trying`
5. hard reboot (reset) works, but while booting the client PC gets 
   stuck while trying to mount the NFS share

これでこの問題を解決する方法がわかりました。 5.項目をfstabに変更できますnoauto。しかし、他の問題はどうですか?クライアントには、NFS死んだNFSサーバーへの待機を停止できるインテリジェンスはありませんか?なぜ無限待つのですか?何が起こってもx数秒後に彼が試みを放棄するようにどこかにタイムアウトを設定できますか?

答え1

はい、これはNFSの特性です。クライアントは、NFS リソースが返されるまで無期限に待機します。信じられないかもしれない、またはこのように動作するように設計されています!

自動マウント

autofsより良いアプローチは、NFS共有を無期限にマウントするのではなく、必要に応じて自動的にマウントするツールなどを使用することです。

NFSのみを使用

@Patrickがコメントで指摘したように、softNFS共有をマウントするときにこのオプションを使用すると、この動作を減らすことができます。

ソースの抜粋:http://www.tldp.org/HOWTO/NFS-HOWTO/client.html

柔らかい

ファイル要求が失敗すると、NFSクライアントはファイルアクセスを要求したクライアントコンピュータのプロセスにエラーを報告します。一部のプログラムはこの問題を穏やかに扱うことができますが、ほとんどはそうではありません。この設定はファイルの破損やデータの損失の原因となるため、使用しないことをお勧めします。メールを大切にしている場合は、特にメールディスクには使用しないでください。

硬い

サーバーがクラッシュすると、NFS マウント・ファイル・システム上のファイルにアクセスするプログラムが中断されます。 intrも指定しないと、プロセスを中断または終了することはできません(「肯定的な終了」を除く)。 NFSサーバーが再びオンラインになると、プログラムは中断することなく元の場所で実行され続けます。すべてのNFSマウントファイルシステムでは、hard、intrを使用することをお勧めします。

/etc/fstabあなたのファイルに

   # device             mountpoint  fs-type    options    dump fsckord
   ...
   master.foo.com:/home  /mnt/home   nfs      rw,soft  0     0
   ...

答え2

(古い文であることは分かるが…)

"lazy" マウントポイントをマウント解除します。

umount -l -f /マウント/ポイント

       -l, --lazy
          Lazy unmount.  Detach the filesystem from the filesystem hierarchy now, and cleanup all references to  the  filesystem  as
          soon as it is not busy anymore.  (Requires kernel 2.4.11 or later.)

これにより、古いNFSマウントポイントがアンマウントされ、古いNFSマウントがサーバーの操作を妨げることがなくなります。

NFS共有が再び表示されたら、手動でマウントする必要があります。

答え3

オフラインNFSサーバーからディレクトリをアンマウントしようとしている間に何かが見つかりました。私の最初の反応は、最下位のサブディレクトリを最初にアンマウントしてから、ディレクトリツリーの一番上に移動することでした。ただし、--forceサブディレクトリの使用とアンマウントはタイムアウト--lazy のため失敗します。ついに私に役立ったのは、私が--force次のようにトップレベルで使用したときでした。--lazy

umount --lazy --force /net/machine

たとえば、低いディレクトリを最初にアンマウントしないでください。

umount --lazy --force /net/machine/subdir

関連情報