私は [〜#〜] sshfs [〜#〜] ラップトップから中央サーバーへのマウントを使用しています。
明らかに、SSHFSマウントは、長い切断(たとえば、サスペンド中)の後で壊れて、基礎となるSSH接続がタイムアウトする原因になります。
SSHFSマウントを長時間持続する切断(> 5分)や、別のIPでの再ダイアリンにも耐えられるようにする方法はありますか?
Autosshとautofsのヒントをありがとう。
しかし、直接的な目的で、あまりよく文書化されていないはるかに単純な解決策を見つけました。
sshfs -o reconnect server:/path/to/mount
-o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3
を使用
ServerAliveInterval=15,ServerAliveCountMax=3
の組み合わせにより、1分間のネットワーク停止後にI/Oエラーが発生します。これは重要ですが、ほとんど文書化されていません。 ServerAliveInterval
オプションがデフォルトのままになっている場合(アライブチェックがない場合)、I/Oハングが発生するプロセスは、sshfsがreconnect
'edされた後でも、無期限にスリープしているように見えます。これは役に立たない行動だと思います。
つまり、ServerAliveInterval
を割り当てずに-o reconnect
で発生するのは、I/Oが成功するか、sshがその下に再接続するとアプリケーションが無期限にハングすることです。その結果、一般的なアプリケーションは完全にハングします。 I/Oがエラーを返してアプリケーションを再開できるようにする場合は、ServerAliveInterval=1
以上が必要です。
とにかくServerAliveCountMax=3
がデフォルトですが、読みやすくするためにそれを指定します。
Autossh sshが停止したか、トラフィックの通過を停止したことに気付いた場合、sshセッションを自動的に再接続します。それは単に自動化されたsshなので、異なるIPとサスペンドから動作します(ラップトップが別のLANで起動した場合でも)。
SSHクライアントが接続をドロップしないように構成できたとしても、サーバーは指定された非アクティブ期間が経過した後にそれを行うように構成されている可能性があり、それをオーバーライドすることができないためです。たとえできたとしても、接続を再開しないと、サーバーはハングしたままになり、時間の経過とともにサーバーリソースの大幅な浪費につながる可能性があります。
コンピューターを一時停止する前にファイルシステムをアンマウントし、コンピューターが再び起動したときに再マウントするのが、より良いテクニックだと思います。そうするためのメカニズムは、コンピュータをどのようにサスペンドするかに完全に依存する可能性があります-私はtuxoniceカーネルを使用し、このようなことをするために、私は次のようなディレクティブを持っています
Unmount /mnt/sshfs
/etc/hibernate/common.conf
。
kubanczykの答え は素晴らしいです。貪欲なsshfsが原因でインターフェース全体のフリーズに問題がありましたが、ラップトップを開いたときに再接続し、接続が遅くなってもフリーズしないスクリプトによって開始される簡単な接続のために、そのようなbashスクリプトを使用できます(たぶん安全性は高くありませんが、たとえば多くのWebプロジェクトでは便利です):
#!/bin/bash
echo PWD | sshfs USER@SERVER:/ MOUNT_PATH -o password_stdin,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 -p PORT -C -oStrictHostKeyChecking=no
if xhost >& /dev/null ; then
pcmanfm MOUNT_PATH
fi