
Wie können Sie feststellen, ob zwei ZFS-Snapshots identisch sind oder lediglich den gleichen Namen haben?
Angenommen, ich habe zwei Computer mit den Namen host-a
und host-b
. Nehmen wir außerdem an, dass dieser host-a
einen ZFS-Datensatz mit dem Namen hat /tank/mydataset
.
Auf Host-A konnte ich:zfs snapshot tank/mydataset@mysnapshot' and then I could 'zfs send tank/mydataset@mysnapshot | ssh host-b zfs receive tank/mydataset
Dies würde bedeuten, dass auf beiden @mysnapshot
identisch wäre .host-a
host-b
Andererseits host-a
könnte ich Folgendes schreiben: zfs snapshot tank/mydataset@mysnapshot
gefolgt von ssh host-b zfs snapshot tank/mydataset@mysnapshot
.
In diesem zweiten Fall sind die beiden Snapshots identisch benannt, der Datensatz kann jedoch völlig unterschiedlich sein.
Beim Betrachten der Eigenschaften tank/mydataset@mysnapshot
wird keine offensichtliche Möglichkeit aufgelistet, um festzustellen, ob die Snapshots identisch sind (z. B. eine GUID oder ein Hash).
Gibt es eine andere Möglichkeit als zu versuchen, einen weiteren Snapshot zu erstellen und ihn über host-a
tank/mydataset@mysnapshot2
zu senden, um festzustellen, dass die Snapshots nicht nur vom Namen, sondern auch von den Blöcken her identisch sind?host-b
zfs send -i @mysnapshot tank/mydataset@mysnapshot2 | ssh host-b zfs receive tank/mydataset
Antwort1
Es gibt eine Immobiliespeziellfür diesen Anwendungsfall.
zfs get guid pool/fs@snap
gibt Ihnen eine GUID (Globally Unique ID) für einen Snapshot. Wenn die GUID zwischen zwei Snapshots nicht übereinstimmt, wird einer nicht vom anderen repliziert und sie dienen nicht als Grundlage für weitere inkrementelle Replikation.
So ist auchsynoididentifiziert allgemeine Snapshots, um Replikationsbefehle zu bestimmen.
(Haftungsausschluss: Ich bin der ursprüngliche Entwickler und Hauptbetreuer des Sanoid-Projekts, zu dem das Replikationstool Syncoid gehört.)