在不可靠的连接上挂载sshfs

时间:2013-07-16 21:05:14

标签: fuse sshfs

我使用sshfs挂载远程文件系统。如果ssh连接超时,则可能导致其他应用程序挂起(例如,仅打开本地文件的vim会话)。系统恢复需要大约10分钟。即使我将远程文件系统挂载为只读,也会发生这种情况。为什么?有没有办法做sshfs挂载,以便在使用不可靠的连接(例如,wifi)时不会导致其他应用程序挂起?我不需要强大的东西,我只需要能够在远程计算机上查看文件,可以是只读的。

我使用lubuntu 12.10。

$sshfs -V
SSHFS version 2.4
FUSE library version: 2.9.0
fusermount version: 2.9.0
using FUSE kernel interface version 7.18

3 个答案:

答案 0 :(得分:9)

使用-o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3

这些ServerAlive选项会导致I / O错误在网络中断一分钟后弹出。没有这些选项,即使在sshfs获得reconnect之后,经历I / O挂起的进程也会无限期地睡眠。

答案 1 :(得分:1)

您可以使用sshfs的选项进行一些操作,例如,为tcp启用压缩,自动重新连接和nodelay标志:

-C     equivalent to '-o compression=yes'
-o reconnect
-o workaround=LIST
    [no]nodelaysrv
              set nodelay tcp flag in ssh (default: off)

sshfs server:/srv/homes /mnt/mountpoint -C -o reconnect -o workaround=nodelaysrv

但是什么给了我更好的结果是使用NFS,我没有使用sshfs的滞后并且在* nix环境中非常标准,你可以使用只读选项导出你的目录额外的速度。虽然请注意NFS不是加密协议。

服务器:

# File: /etc/exports
/srv/homes    hostname1(rw,sync,no_subtree_check)    hostname2(ro,sync,no_subtree_check)

客户端:

mount server:/srv/homes /mnt/mountpoint

答案 2 :(得分:1)

如果您认为远程端已经消失,则监视远程主机并终止本地sshfs进程。你可以用很多种方式来做。例如,用bash方式开始ping它:

mountpoint=~/mnt/google

sshfs -o reconnect,ServerAliveInterval=5,ServerAliveCountMax=3 user@google.com:/ "$mountpoint"

while :
do
  if ping -c 3 google.com
  then
    echo "google.com is still up"
  else
    # find sshfs pid
    sshfsPids=$(ps -C sshfs -f | grep "$mountpoint" | grep -v grep | awk '{print $2}' | tr '\n' ' ')
    kill -SIGTERM "$sshfsPids"
  fi 
done

如果您可以使用外部监视程序方法进行连接,请考虑以下项目:https://github.com/RuralYak/sshfs-watchdog它的功能基本相同但是更复杂