我在 Linux 上使用 ZFS,并尝试设置远程复制。但我的 ssh 连接不良,并且 zfs 通过 ssh 发送/接收再次重新启动。我知道 ZoL 存在问题,但我不知道它什么时候会实施,或者新的稳定版本会发布。我听说过 mbuffer,但似乎它无法重新启动。也许可以像 zfs send | 这样使用它缓冲区 |虽然是真的;执行 ssh ...;已完成,但不确定。
现在我正在做 zfs 发送到一个文件,用 --append --partial 将其 rsync 到远程并恢复。但它会占用空间,需要手动帮助,并且是一个肮脏的解决方案。我想要一些自动化的解决方案,例如 sanoid/syncoid,以保留包含所有快照的池镜像。也许某些 bash 脚本执行相同的操作,但将所有快照保留在远程,在成功同步后删除主机上的文件等。请帮助
PS我知道有一个重复的问题,但没有任何解决方案。在我的问题中,我使用了一些肮脏的解决方案,并且想要替换或改进它
答案1
您可以使用-s
zfs 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
干得好 :)