
プライマリ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がコメントで指摘したように、soft
NFS共有をマウントするときにこのオプションを使用すると、この動作を減らすことができます。
ソースの抜粋: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