web-dev-qa-db-ja.com

mount.cifs:IPの切り替え後の長いタイムアウトを回避する方法(有線<=> wifi)

有線イーサネット接続を使用してドッキングステーションからノートブックのドッキングを解除するとき ネットワークマネージャーに自動的にwifi無線をオンにさせます 。ドッキングステーションに入ると、有線接続が望ましいため、Wi-Fiをオフにします。

問題は、120秒ハングする前にマウントしたcifs共有上のファイルまたはフォルダーへのすべてのアクセスです。これにより、それらの共有にアクセスすると、アプリケーションがハングします(これらのディレクトリのシェルセッション、そこにタブが開いているファイルマネージャなど)。それらのプロセスは、 恐ろしい割り込み不可能な状態 でスタックします。

カーネルログには次のように表示されます。kernel:CIFS VFS:サーバーが120秒以内に応答しませんでした。再接続しています...

質問:すべてのアプリケーションがハングするので、ドッキングステーションに/から切り替えるたびにコーヒーに2分以上かかる必要がないように、どのようにタイムアウトを減らすことができますか?

詳細:

  • 両方のインターフェースは同じサブネット上で異なるIPを持ち、明らかにファイルサーバーに到達できます
  • / etc/fstab行のサンプル:

    // server/install/mnt/net/install cifs uid = bob、credentials =/etc/cifs-credentials、_netdev、user、soft 0 0

  • マウントからのサンプル出力| grep cifs:

    /// mnt/net/installタイプcifsにserver/install(rw、nosuid、nodev、noexec、relatime、vers = 1.0、cache = strict、username = bob、domain = bobsdom、uid = 1000、forceuid、gid = 0 、noforcegid、addr = [serverIP]、unix、posixpaths、serverino、acl、rsize = 1048576、wsize = 65536、actimeo = 1、_netdev、user)

私が試したもの:

  • 「ソフト」および「ハード」マウントオプション。 「ソフト」に関するmanページのテキストが示唆しているにもかかわらず、それらはその振る舞いを変えません
  • いずれのインターフェイスでもパケット損失がなく、待ち時間と帯域幅が優れていることを確認しました(GBitイーサネットおよび強力な信号を備えた802.11ac wifi)。これにより、IPの変更による実際のcifsタイムアウトであることを確認できます。
  • サーバー(samba 3.6)にはネットワークの問題もパケット損失もありません。
  • タイムアウトを15秒のような適切な値に減らすために、cifsのノブを探しました。のみ Windows用に見つかりました 。 HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters\SessTimeoutという名前で、exactlyが欲しいものです。興味深いことに、MSはWin 8.1のこのタイムアウトも20秒に短縮しました...
  • Wifiのオン/オフを切り替える代わりにルートメトリックを使用して、両方のルートを起動し、カーネルがイーサネットルートを優先するようにします。しかし、このアプローチには欠陥があります。それは、カーネルが有線インターフェースの無線出力を介して到着したパケットに応答を送信するためです。いくつかの「IPルール」マジックで解決できますが、Wi-Fiラジオを切り替えるだけでいいのです。
2
doublehelix

実用的なソリューションの1つは、両方のインターフェイスをsame静的IPアドレスに設定することです。これにより、cifsは同じサブネット上の異なるIPからの接続を再確立する必要がないため、タイムアウトしません。

これは、ワイヤード<=> wifi切り替え中に Moshのような派手なツール を必要とせずにSSH接続が維持されることも意味します。

欠点もあります:

2
doublehelix