我使用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
答案 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它的功能基本相同但是更复杂