如何判断两个 ZFS 快照是相同的还是简单地命名相同?
假设我有两台名为host-a
和的计算机host-b
。还假设host-a
有一个名为/tank/mydataset
.
在 host-a 上,我可以:zfs snapshot tank/mydataset@mysnapshot' and then I could 'zfs send tank/mydataset@mysnapshot | ssh host-b zfs receive tank/mydataset
这意味着在和@mysnapshot
上将是相同的。host-a
host-b
另一方面, on host-a
I could:zfs snapshot tank/mydataset@mysnapshot
其次是ssh host-b zfs snapshot tank/mydataset@mysnapshot
.
在第二种情况下,两个快照的名称相同,但数据集可能大不相同。
查看 的属性tank/mydataset@mysnapshot
并没有列出任何识别快照是否相同的明显方法——即 GUID 或哈希。
除了尝试拍摄另一个快照host-a
tank/mydataset@mysnapshot2
并尝试发送到host-b
via之外zfs send -i @mysnapshot tank/mydataset@mysnapshot2 | ssh host-b zfs receive tank/mydataset
,还有一种方法可以确定快照不仅在名称上相同,而且在块上相同?
有一个专门针对此用例的属性。
zfs get guid pool/fs@snap
将为您提供快照的 GUID(全局唯一 ID)。如果两个快照之间的 GUID 不匹配,则不会从另一个复制其中一个,并且它们将无法作为进一步增量复制的基础。这也是syncoid如何识别常见快照以确定复制命令的方式。
(免责声明:我是 Syncoid 复制工具所属的 Sanoid 项目的初始开发者和首席维护者。)