Как определить, являются ли два моментальных снимка ZFS идентичными или просто имеют одинаковые имена?
Предположим, у меня есть два компьютера с именами host-a
и host-b
. Также предположим, что host-a
имеет набор данных ZFS с именем /tank/mydataset
.
На хосте-a я могу: zfs snapshot tank/mydataset@mysnapshot', а затем я могу '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
есть ли способ определить, что снимки идентичны не только по имени, но и по блокам?
Для этого варианта использования есть свойство , специально .
zfs get guid pool / fs @ snap
предоставит вам GUID (глобально уникальный идентификатор) для снимка. Если GUID не совпадает между двумя снимками, один не реплицируется из другого, и они не будут работать в качестве основы для дальнейшей инкрементной репликации.
Таким же образом синкоид идентифицирует общие моментальные снимки для определения команд репликации.
(Отказ от ответственности: я являюсь первоначальным разработчиком и главным сопровождающим проекта Sanoid, которому принадлежит инструмент репликации Syncoid.)