如何判断两个 ZFS 快照是否相同或只是名称相同?
假设我有两台计算机,分别名为host-a
和host-b
。还假设host-a
有一个名为 的 ZFS 数据集/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
另一方面,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-b
通过发送之外zfs send -i @mysnapshot tank/mydataset@mysnapshot2 | ssh host-b zfs receive tank/mydataset
,还有其他方法可以确定快照不仅名称相同,而且块也相同吗?
答案1
有一个属性具体来说对于这个用例。
zfs get guid pool/fs@snap
将为您提供快照的 GUID(全局唯一 ID)。如果两个快照之间的 GUID 不匹配,则不会从其中一个快照复制另一个快照,并且它们将无法作为进一步增量复制的基础。
这也是合子识别常见快照来确定复制命令。
(免责声明:我是 Sanoid 项目的最初开发者和首席维护者,Syncoid 复制工具属于该项目。)