Linux 上的 ZFS 在 ssh 连接不良时发送/接收恢复

Linux 上的 ZFS 在 ssh 连接不良时发送/接收恢复

我在 Linux 上使用 ZFS,并尝试设置远程复制。但我的 ssh 连接不良,并且 zfs 通过 ssh 发送/接收再次重新启动。我知道 ZoL 存在问题,但我不知道它什么时候会实施,或者新的稳定版本会发布。我听说过 mbuffer,但似乎它无法重新启动。也许可以像 zfs send | 这样使用它缓冲区 |虽然是真的;执行 ssh ...;已完成,但不确定。

现在我正在做 zfs 发送到一个文件,用 --append --partial 将其 rsync 到远程并恢复。但它会占用空间,需要手动帮助,并且是一个肮脏的解决方案。我想要一些自动化的解决方案,例如 sanoid/syncoid,以保留包含所有快照的池镜像。也许某些 bash 脚本执行相同的操作,但将所有快照保留在远程,在成功同步后删除主机上的文件等。请帮助

PS我知道有一个重复的问题,但没有任何解决方案。在我的问题中,我使用了一些肮脏的解决方案,并且想要替换或改进它

答案1

您可以使用-szfs receive 选项,如果传输失败,该选项将在接收方保存可恢复令牌。这取决于您使用的是 netcat (nc) 还是 SSH。

recv机器上 (仅限网络猫)

nc -l <port> | zfs receive -s -v tank/dataset

send机器上:

从通常的开始send

zfs send -v snapshot | nc <host> <port>

zfs send -v snapshot | ssh ... zfs receive -s -v tank/dataset

如果传输失败,请在recv机器上输入:

zfs get all tank/dataset

获取receive_resume_token并运行send机器:

zfs send -v -t <token> | nc <host> <port>

zfs send -v -t <token> | ssh ... zfs receive -s -v tank/dataset

干得好 :)

相关内容