9

我用 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
4

3 回答 3

10

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

这些ServerAlive选项会导致 I/O 错误在网络中断一分钟后弹出。如果没有这些选项,经历 I/O 挂起的进程似乎会无限期地休眠,即使在 sshfs 被reconnect'ed 之后也是如此。

于 2014-10-27T09:05:13.433 回答
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
于 2013-08-03T21:19:12.357 回答
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 ,它的作用几乎相同,但方式更复杂

于 2017-03-17T18:31:55.830 回答