检查 nfs over ssh 是否已挂载

检查 nfs over ssh 是否已挂载

我已经通过 ssh 隧道在本地机器上转发了远程 nfs 端口(转发 2 个端口),并使用 autossh 建立持久连接:

[email protected]:~#autossh -v -M 0 -q -f -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 2049:localhost:2049 [email protected]
[email protected]:~#autossh -v -M 0 -q -f -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 2059:localhost:2059 [email protected]

现在我已经在 local.machine 远程 nfs 端口监听 local.machine:

[email protected]:~# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:2049          0.0.0.0:*               LISTEN      27882/sshd: tunnel
tcp        0      0 127.0.0.1:2059          0.0.0.0:*               LISTEN      27881/sshd: tunnel

使用 /etc/fstab 中的以下配置来配置我的远程 nfs 挂载点:

localhost:/var/pub      /mnt/remote.machine nfs     tcp,rsize=8192,wsize=8192,rw,bg,intr,noatime,nosuid,noauto,vers=3,port=2049,mountport=2059      0   0

并将其挂载到/mnt/remote.machine/:

[email protected]:~# mount /mnt/remote.machine
[email protected]:~# mount -lt nfs
localhost:/var/pub on /mnt/remote.machine/ type nfs (rw,nosuid,noatime,tcp,rsize=8192,wsize=8192,bg,intr,vers=3,port=2049,mountport=2059,addr=127.0.0.1)

现在远程 nfs 文件系统可以作为本地目录访问了……

问题:

当 remote.machine 中的 nfs 服务停止和/或 ssh 隧道中断时,如何从 local.machine 测试这种情况?我正在使用此系统自动(使用 crond)从 local.machine 备份到 remote.machine

我想到运行简单的测试:
[电子邮件保护]:~# [ -d /mnt/remote.machine/remote/backups ] && ./run-backups.sh

但是当我运行它时,命令冻结,而 remote.machine 重新上线!并且自动化失败!

如果有人有更好的主意,例如使用 rsync 或其他,请提出建议。条件是出于安全原因和权限问题,备份必须从 local.machine 执行到 remote.machine(具有动态 ip)。

编辑: 使用选项挂载:retrans=1,timeo=1,soft,fg,retry=1,tcp,vers=3 或者:retrans=1,timeo=1,soft,bg,retry=1,tcp,vers=3 问题仍然存在并冻结任何文件系统命令(例如:ls,test -d)并在 2 分 50 秒后打印“输入/输出错误”

答案1

您需要添加soft安装选项,否则 NFS 客户端将永远重试请求。

尝试仍需要timeo * retrans超时,默认为 3 分钟。

答案2

您可以在备份过程之前检查挂载点是否可见,例如

timeout 10 ls /mountpoint >& /dev/null && /backup/script

这样它就不会挂起,因为挂载点已经过时了。

相关内容