ZFS 发送和 ZFS 接收数据集,无需 -RI 增量复制同步

ZFS 发送和 ZFS 接收数据集,无需 -RI 增量复制同步

有没有办法只将最新的快照发送到备份 zfs 系统,即使它有以前的快照?当我尝试时,我不断收到错误:

“无法接收新的文件系统流:目标有快照(例如mirrorpool/ETC/Stuff)必须销毁它们才能覆盖它”

我已经在使用带有 -F 的 zfs send accept 了。

基本上,自从我发现接收系统空间不足以来,它就没有收到过大量快照。因此,我删除了接收 zfs 文件系统上的大量非常旧的快照,只留下了较新的快照,但执行 zfs 发送的 zfs 系统有很多较新的快照,而这些快照在 zfs 接收器(备份服务器)上并不存在。但我不想将所有丢失的快照复制回它们共有的快照。我只想将最近的快照对快照发送到 zfs 接收器。

目前,zfs 接收器具有曾经创建的前几个快照,然后其余的都被删除了,只剩下大约在 2018 年 10 月某个时间创建的最新快照。所以我想避免从 Zfs 发送器系统向 zfs 接收器发送自 2018 年 10 月以来的每个每日快照,而只发送最近的几个快照。

或者是否存在某种“rsync”类型的 zfs send | zfs received,我可以保持两个数据集同步而无需发送任何快照?

答案1

我在解析你的问题时遇到了一些困难,但我认为它是这样的:

BoxA:pool/dataset@1,2,3,4,5,6,7,8,9,10

BoxB:pool/dataset@1,2,3

您想要获取 BoxB 上的快照 10,但不想拥有所有中间快照 (4、5、6、7、8、9)。

假设情况确实如此,那就很简单了:

root@BoxA:~# zfs send -Ri pool/dataset@3 pool/dataset@10 | ssh root@BoxB zfs receive pool/dataset

完成后(注意我们使用小写 -i, 不是大写 -I!),你最终会遇到以下情况:

BoxA:pool/dataset@1,2,3,4,5,6,7,8,9,10

BoxB:pool/dataset@1,2,3,10

请注意,由于我们指定-Rzfs send,我们实际上还将发送(和接收)任何假设的子数据集或 zvol,例如pool/dataset/child0、等等。(另请注意,如果您在使用pool/dataset/child1时没有在所有子数据集上提供完全相同的快照,事情会变得有点奇怪。)-Rzfs send

相关内容