有没有办法判断两个同名的 ZFS 快照是否实际上相同?

Aar*_*uyn 3 zfs

如何判断两个 ZFS 快照是否相同或只是名称相同?

假设我有两台名为host-a和 的计算机host-b。还假设host-a有一个名为 的 ZFS 数据集/tank/mydataset

在主机 a 上,我可以:zfs snapshot tank/mydataset@mysnapshot' and then I could 'zfs send tank/mydataset@mysnapshot | ssh host-b zfs receive tank/mydataset

这意味着和 上@mysnapshot都是相同的。host-ahost-b

另一方面,host-a我可以:zfs snapshot tank/mydataset@mysnapshot后面跟着ssh host-b zfs snapshot tank/mydataset@mysnapshot.

在第二种情况下,两个快照的名称相同,但数据集可能截然不同。

查看 的属性tank/mydataset@mysnapshot并没有列出任何明显的方法来识别快照是否相同——即 GUID 或哈希值。

除了尝试拍摄另一个快照host-a tank/mydataset@mysnapshot2并尝试发送到host-bvia之外zfs send -i @mysnapshot tank/mydataset@mysnapshot2 | ssh host-b zfs receive tank/mydataset,是否有一种方法可以确定快照不仅在名称上相同,而且在块上也相同?

Jim*_*ter 6

有一个专门用于此用例的属性。

zfs get guid pool/fs@snap将为您提供快照的 GUID(全局唯一 ID)。如果两个快照之间的 GUID 不匹配,则不会从另一个快照复制一个快照,并且它们将无法作为进一步增量复制的基础。

这也是syncoid识别常见快照以确定复制命令的方式。

(免责声明:我是 Syncoid 复制工具所属的 Sanoid 项目的最初开发人员和首席维护者。)