NFSがハングしたときにプログラムを起動しようとしたときにbashがハングするのを止める方法

NFSがハングしたときにプログラムを起動しようとしたときにbashがハングするのを止める方法

私は現在経験していることです。Ubuntu 13.10のバグこれは、一時停止後にコンピュータを再起動すると、ネットワーク接続が再起動しないことを意味します。複数のNFSマウントがあり、静止しているため、コマンドラインから何かを実行しようとするたびに(このバグレポートの回避策など)、シェルはハングしますnmcli cli sleep false。 「停止」とは、どの信号(Ctrl-C、Ctrl-Z、killなど)にも応答しないという意味です。

絶対パス(たとえば/usr/bin/nmcli)を使用すると、期待どおりに機能します。ネットワーク接続を復元すると、停止したすべてのプロセスが再開され、実行が完了します。

なぜこのようなことが起こるのか混乱しています。現在疑われているのは、bashがNFSマウントディレクトリの1つで私が実行したいコマンドを検索しようとしていることです。ただし、鉱山にはPATHNFSマウントディレクトリは含まれていません。

だから私の質問は2つです。シェルがこのように停止するのはなぜですか。どうすれば停止できますか?

答え1

私の経験によると、LinuxのNFS実装はSolarisのNFS実装ほど強力ではありません。特に、Linux の NFS によってデバイスのプロセスが中断される可能性があるため、一部のプロセスが次の状態で表示されることがあります。

[pkearns@centos6 ~]$ ps -lp $$
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 D   500  2626  2307  0  80   0 -  1282 -      pts/1    00:00:00 bash
[pkearns@centos6 ~]$ 

2番目の列は、Dプロセスがデバイスで停止したことを示します。デバイスの停止は予測不可能な方法でシステム全体に伝播し、関連性がないように見えるプロセスを妨げる可能性があります。

この試み:

ps -elf | awk '$2=="D"'

これにより、デバイスに保留中のプロセスが表示されます。

答え2

デフォルトでは、NFSはハード無中断FS呼び出しを使用します。したがって、FS操作(読み取り、書き込み、統計など)を「Ctrl + C」または「Ctrl + Z」にすることはできません。

「Ctrl + C」を使用するには、「NFS共有マウント」オプションを使用できます。整数"システムコールを中断する機能。以下を使用してテストできます。 mount -o remount,intr /YOUR/MOUNTPOINT

次に、/ etc / fstabファイルを編集して永続性オプションを追加します。

「nolock」オプションは、単に複数のクライアントの同時書き込みを防ぐために使用される「ファイルロック」方法を無効にします。 I/O とは何の関係もありません。

「なぜ中断され、NFSの場所への参照がない」という質問の場合、bashcompletionに問題があるか、実際にNFSをテストするためにコマンドを使用するスクリプトがありますか?

アドリアン。

答え3

クライアント側で「-o nolock」オプションを使用すると、問題が解決する可能性があります。

答え4

一般的な原因は、プロセスがNFS共有を待っている間にタイムアウトしたためです(通常はまったく発生しません)。シェルの最も可能性の高い原因はPATHディレクトリの1つです。今後実際、実行可能ファイルを含むファイルはアクセスできないNFS共有にあります(わかるように実際にはそうです)。

関連情報