我已经通过 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
这样它就不会挂起,因为挂载点已经过时了。