重新连接 ssh 连接而不破坏管道

重新连接 ssh 连接而不破坏管道

我在不同的站点有两台机器。两台机器都有 FreeBSD 和 ZFS 卷。一台是主机器,另一台是备份机器。

我通常通过 cron 调用的这个命令进行备份。

zfs send -i pool/vol@old pool/vol@new | ssh backup zfs recv pool/vol

但快照相当大。它需要超过 24 小时,有时它会丢失连接。如果发生这种情况,我需要重新发送第一个字节。

有没有办法可以在不断管的情况下重新连接 ssh 连接?

例如,我可以想象命令chunked_send和chunked_recv。

zfs send -i pool/vol@old pool/vol@new | chunked_send id1 ssh backup chunked_recv id1 zfs recv pool/vol

更新:

一个简单的解决方案是使用临时文件和 rsync。

zfs send -i vol@old vol@new | split -b 1024m backup-tmp.
rsync backup-tmp.* backup:/tmp
ssh backup 'cat /tmp/backup-tmp.* | zfs recv vol'

我觉得这并不聪明。

答案1

尝试将 TCP 连接封装在 UDP 数据包中。最简单的方法是安装一个OpenVPN两台服务器之间的 udp 网络。

UDP 连接可以抵御偶尔的断开连接。通过 UDP VPN 的 SSH 连接似乎不会断开连接。我不确定您的命令,但我相当肯定,如果在 OpenVPN 网络上使用,它可以抵御断开连接。

我写过Debian 版 OpenVPN 安装指南这可能会对你有所帮助。它提供了一个简化 OpenVPN 服务器设置的工具。

相关内容