SSHFS:传输端点未连接

SSHFS:传输端点未连接

Stack Exchange 网站上有许多与标题中的问题相关的帖子,但似乎没有一个能提供很好的解决方案。我猜这篇文章是无耻地试图提出这个问题(其他一些帖子已经有几年了),看看是否有人对此有很好的解决方案 - 我认为也许是为 autofs 提供的经过验证的选项组合,而不是某些解决方法/监控脚本。

我刚刚提出作为针对 SSHFS 的问题,但显然目前没有维护者……

为了呼应错误报告的内容,因为我知道人们不喜欢依赖可能短暂的外部链接:

--------- 开始粘贴 ---------

我怀疑这个问题是已知/理解的,但我找不到它的未解决的问题。

这个问题困扰了我一段时间,在 Stack Overflow 等网站上搜索相关帖子(搜索 sshfs “传输端点未连接”)后,我发现这是一个多年前的问题,从未得到解决。我不知道修复是在 sshfs 还是其他地方,但我认为如果重新连接选项已通过且挂载点不再可用,则重新连接尝试是相当合理的。

问题似乎在于挂载点仍然列在 下mount,但 sshfs 下没有它的进程,例如:

请注意,虽然我已经更改了一些用户/路径以实现匿名,但问题正如所描述的那样,即两个挂载点(当前正在运行的挂载点和当前不运行的挂载点)在服务器和客户端上都是相邻的(因此您可能希望它们可以一起工作或失败,但事实并非如此)。

Autofs 配置:

cat /etc/auto.sshfs
data1 -fstype=fuse,port=22,rw,nodev,nonempty,noatime,allow_other,max_read=65536,reconnect,workaround=all,ServerAliveInterval=15,ServerAliveCountMax=3 :sshfs\#user@server1\:/storage/data1
data2 -fstype=fuse,port=22,rw,nodev,nonempty,noatime,allow_other,max_read=65536,reconnect,workaround=all,ServerAliveInterval=15,ServerAliveCountMax=3 :sshfs\#user@server1\:/storage/data2

mount 命令的输出:

mount | grep server1
user@server1:/storage/data1 on /mnt/sshfs/data1 type fuse.sshfs (rw,nodev,noatime,user_id=0,group_id=0,allow_other)
user@server1:/storage/data2 on /mnt/sshfs/data2 type fuse.sshfs (rw,nodev,noatime,user_id=0,group_id=0,allow_other)

Autofs 状态(请注意上面指定的 data2 挂载点不存在):

user@serverx:/home/user# systemctl status autofs
● autofs.service - Automounts filesystems on demand
Loaded: loaded (/lib/systemd/system/autofs.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2019-10-23 14:46:52 UTC; 2 months 13 days ago
Main PID: 8524 (automount)
Tasks: 17 (limit: 4915)
Memory: 8.8M
CPU: 18h 19min 6.124s
CGroup: /system.slice/autofs.service
├─8524 /usr/sbin/automount --pid-file /var/run/autofs.pid
├─8718 ssh -X -a -oClearAllForwardings=yes -oport=22 -oServerAliveInterval=15 -oServerAliveCountMax=3 -2 user@server1 -s sftp
└─8755 sshfs user@server1:/storage/data1 /mnt/sshfs/data1 -o rw,nodev,noatime,uid=0,gid=0,port=22,nonempty,allow_other,max_read=65536,reconnect,workaround=[truncated by terminal]

现在,如果我umount/mnt/sshfs/data2,然后尝试ls同一目录的 ,则该卷将自动重新安装。但如果没有umountls(此处为父目录)则会产生:

user@serverx:/home/user# ls -l /mnt/sshfs/
ls: cannot access '/mnt/sshfs/data2': Transport endpoint is not connected
total 4
drwxr-xr-x 1 root root 4096 Jul 22 11:46 data1
d????????? ? ? ? ? ? data2

那么,当尝试访问该卷时返回“未连接”错误,为什么它没有自动重新安装?

--------- 结束粘贴 ---------

编辑:

我突然意识到我在这里创建了两个不必要的连接,而实际上我只需挂载父目录 /storage/ 即可。但据我所知,这没有任何危害(事实上,我刚刚挂载了第三个目录,它们都运行良好)。无论哪种方式,让所有流量都通过一个父挂载点是否有任何好处?两个(或更多)ssh 进程之间是否有发生冲突的可能性(它们的命令行相同:ssh -X -a -oClearAllForwardings=yes -oport=22 -oServerAliveInterval=15 -oServerAliveCountMax=3 -2 user@server1 -s sftp)?

编辑:

我刚刚做了一些实验,杀死了客户端/服务器上的各种元素,而我重现偶尔看到的问题的唯一方法是杀死客户端上的 sshfs:

终止服务器上的 ssh 会话:挂载恢复

在服务器上终止 sftp 服务器:挂载恢复

终止客户端上的 ssh 会话:mount 恢复

终止客户端上的 sshfs:必须手动执行umount,之后它会再次按需挂载(如问题最初描述的那样)

因此,在没有确凿证据的情况下,我认为 sshfs 本身偶尔会退出。autofs 应该处理这个问题吗?

相关内容