有什么更好的方法来处理sshfs挂载的服务器断开连接?


58

我有几个目录通过sshfs挂载。有时我会与服务器断开连接(无法自行配置)。我通常这样挂载目录

sshfs user@server.example.com:/home/user /mnt/example

当服务器断开连接时,sshfs子系统不会卸载/释放目录,而是将其锁定为不可访问。键入时仍可以看到该安装mount。当我打字

ls /mnt/example

该过程被锁定(Ctrl+ c也无济于事)。我因此做

sudo umount -l /mnt/example
# find pid of corresponding process:
ps aux | grep example.com
kill -9 <pid of locked sshfs process>

有没有更好的方法来解决这个问题?显然,sshfs应该执行umount并清理...理想情况下,它将自动重新连接。



4
有使用维护软件的解决方案吗?
塞巴斯蒂安

Answers:


45

您可以使用“重新连接”选项运行sshfs。我们将sshfs与PAM / automount一起使用,以共享网络中每个工作站的服务器文件。我们使用-o reconnect作为sshfs的参数,主要是因为我们的用户挂起了计算机,并且唤醒后sshfs不会重新连接(或响应,或进行任何操作)。

例如:

sshfs mvaldez@192.168.128.1:/home/mvaldez/REMOTE /home/mvaldez/RemoteDocs -o reconnect,idmap=user,password_stdin,dev,suid

请注意,如果远程计算机真的宕机了,sshfs可能会长时间无响应。


11

这可以通过减少超时来解决。在$HOME/.ssh/config或中添加以下内容/etc/ssh/ssh_config

ServerAliveInterval 15
ServerAliveCountMax 3

这导致45秒超时。


3
仅当问题是SSH的故障时,这才有帮助。有一个更大的问题sshfs不能很好地处理基础ssh流程的终止。
bahamat 2012年

实际上,这只是一种解决方法,应该在sshfs中修复。
2012年

但是,只有一种解决方法可以处理多种原因。他的问题可能与保持活动无关。问题的本质与原因无关,而与清理到一致状态有关。
bahamat 2012年

5

我有一台用于存储的服务器,并且由于我居住的空间不足,我将其保存在另一个位置。为了将文件带入我的网络,我使用树莓派,该树莓派使用sshfs从服务器挂载文件。

最近,由于电源故障,我不得不升级到raspbian jessie,并意识到sshfs变得严重不稳定。这些文件夹将正确安装,但过一会儿我将无法连接到它们,并且如果我想列出安装的内容,树莓派将冻结。

我试过的是:

  1. 在fstab中使用了重新连接
  2. 在.ssh / config文件中使用了ServerAliveInterval和ServerAliveCountMax,但无济于事。
  3. 我在大多数论坛上阅读的其他解决方案。

但没有骰子!直到我修改fstab文件如下:

sshfs#user@server:/remote/folder /local/mount/dir fuse IdentityFile=sshkeyfile,Port=XXX,uid=1000,gid=1000,allow_other,_netdev,ServerAliveInterval=45,ServerAliveCountMax=2,reconnect,noatime,auto 0 0

而且有效!不再断开连接!我看起来sshfs出于某种原因未读取ssh配置文件,并且从未发送过保持活动信号。


3

这听起来像是autofs的工作。它相当擅长处理各种类型的网络挂载(nfs,samba,sshfs,您可以将其命名),并在需要重新安装这些内容时发出通知。它也可以在使用一段时间后卸载它们,并在发出文件系统请求时安装它们。


11
autofs将按需进行连接,并且在空闲时可以卸载(这减少了有问题的时间窗口),但是如果sshfs挂起是没有帮助的,因为服务器已断开连接。
Gilles

1

如果仍然有人遇到此问题,我仍然无法解决。我确实找到了一种解决方法。

以下红宝石脚本可以解决问题。反复创建一个名为“ keepalive”的文件夹。只是继续运行直到无限。

$i =1 
$num =0
begin
    puts("Inside the loop i = #$i" )
    $i +=1
    puts 'creating obj'
    system 'mkdir  /{yourmountpoint}/keepalive'
    sleep 5
    puts 'we did it, it should be still alive'
end while $i > $num

我不知道为什么这样。但这似乎解决了我的问题,因为我一分钟不活动并且一切都冻结了。它只是尝试在安装点创建一个文件夹,这似乎使它避免以某种方式断开连接并冻结所有内容。


6
好吧,如果这对您有用,那么您就不需要脚本和红宝石解释器了。一行就可以了:while true; do mkdir -p /x/y; sleep 2; done
mivk 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.