Linux:CIFS / Sambaマウントが数分間ハングする


26

GentooボックスとWindowsボックスがある小さなローカルネットワークがあります。次のようなコマンドを使用して、Windowsボックスで発生した共有をGentooボックスにマウントします。

mount -t cifs -o username=WindowsUsername,password=thepassword,uid=pistos //192.168.0.103/Users /mnt/windowsbox

ほとんどの場合、すべてが正常に機能し、問題なく読み書きできます。ただし、数週間ごとに、接続またはマウントポイントが停止またはハングしているように見えるため、マウントポイントにアクセスしようとするプロセスはすべてD状態のままになります(ディスクまたはI / O待機)。これらのプロセスはTERMおよびKILLシグナルの影響を受けません。Windowsボックスをネットワークから切断して再接続しても効果はありません。凍結状態は5分以上続きます。Save Asダイアログ、lsコマンドなどがフリーズするため、本当にイライラし、通常の作業の邪魔になります。umountマウントポイントでを発行すると、ハングするか、マウントポイントが使用中であると報告されます。最終的に、デッドステートは自動的に解決され、マウントポイントがアンマウントされるかumount、遅延なく可能になります。

私の推測では、接続/マウントがアイドル状態になったとき、またはWindowsマシンがアイドル状態になったときに発生します。よくわからない。

なぜこれが起こっているのですか、それを防ぐために何ができますか?または、これらのD-stateプロセスを自由に強制終了するにはどうすればよいですか?

おそらく関連:読み取り時にCIFSマウントがハングする


1
2台のマシン間で使用されているファイアウォールの種類はありますか?
シュルート14

@Schrute:Linux(iptables?)にデフォルトがあり、Windowsが実行されていると思います。ファイアウォールが接続をタイムアウトさせていると思いますか?私はそのようなことを聞​​いたことがありませんでした。
ピスト14

これはLinuxボックスの問題かもしれないと思います。cifsやWindowsではなく、マウントされたnfs共有でも同様の問題が発生しました。保存できませんでした-存在しないnfsサーバーにアクセスするときにプロセスがハングしたためだと思います。これは通常、サーバーがクラッシュしたときに起こりました。
cornelinux 14

1
私のアドバイスは、Linuxマシンでリングバッファネットワークキャプチャをセットアップすることです(つまり、tcpdump -i eth0 -C 5 -W 10 -s 0 -v -w /tmp/cifs.pcap host 192.168.0.103-私も実行します切断時にプロセスが終了するのを防ぐために画面の下に表示されます)。問題が発生したら、数秒後にトレースを停止します。少なくとも、パケットトレースを確認するときに問題の原因となっている側を特定できる必要があります(サーバーが応答を停止する、セッションが切断されるなど)。
GeekyDeaks

1
@Pistos-Wiresharkはあなたの友達です!トレースは分かりにくいように見えますが、wiresharkはフレームをデコードして助けます。あなたは(CIFS上sharkfestビデオが2013年にあったあなたは時間を持っている場合などを応答を停止する最初のサーバーのような他の人への進行、その後、サーバーまたはクライアントがセッション(FINパケット)をドロップするように、基本を排除したいyoutube.com/watch ?v = XbvFXSPig-w)しかし、それはかなり長いです:)
GeekyDeaks 14

回答:


11

なぜ問題が発生しているのかわかりませんが、回避策として、毎分cronを実行しtouch /mnt/windowsbox/keepalive.txtたりecho "I am still alive." >/mnt/windowsbox/keepalive.txt、cronを介して実行しようとしたりしましたか?そうすれば、接続はアクティブのままになります。


良いアイデア。これを適切な場所に配置し、何が起こるかを確認します。
ピスト14

2
これで問題は解決したようです。
ピスト14

それはよかったです!
ジャンヌピッカライネン14

1
*/5 * * * *
@Pat

今のところこれを使用しています。3日以内に、3台のUbuntu Server 16 LTSマシン(2台の物理マシン、1台のVM)が数時間の再起動後にSMB接続を切断しました。起動時に、SMB接続は問題なくマウントされますが、最終的に応答しなくなります。
user38537


0

別の潜在的な回答は、cronを介して定期的にマウント上のファイルに書き込むことを示唆しています。代わりにsmbclientプログラムを使用して共有に接続し、切断することをお勧めします。

これを実現するために、次のようなbashスクリプトを作成しました。

#!/bin/bash

su usernamehere -c "smbclient \\\\\\\\\\\\\\\\servernamehere\\\\\\\\sharenamehere passwordhere -c exit" >/dev/null 2>&1

このコマンドは共有への新しい接続を作成してからexitコマンドを実行し、コマンドラインで確立したばかりの接続を即座にシャットダウンします。バックスラッシュはエスケープする必要があり、二重引用符で囲まれた文字列内ではエスケープをエスケープする必要があるため、サーバー名の前に8個、共有名の前に4個のスラッシュが必要です。おそらくもっと賢い方法がありますが、これはうまくいくようです。

接続を一度に数分間開いたままにすることで、これをさらに信頼性の高いものにする方法があるかもしれませんが、それは私のリーグから少し外れています。


興味深い提案。他のソリューションでまだ成功していない場合は、試してみました。
ピスト

これがどのように役立つかわかりませんか?Janneの解決策は、cifsクライアントによって確立された接続を維持することですが、これにより、smbclientとの無関係な新しい接続が作成されます。
フルンゴ

1
参考までに、smbclientはバックスラッシュの代わりにスラッシュを使用したい場合、スラッシュをサポートします。そのため、//servername/sharname大量のエスケープが必要な場所では簡単です。
スティーブ・フリードル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.