Я использую ZREP для репликации двух серверов друг с другом, и каждый сервер содержит один пул ZFS, содержащий два набора данных в качестве главного сервера репликации и два набора в качестве репликации цель. Основные наборы содержат систему и виртуальные машины VirtualBox на локальном сервере, репликация нацелена на то же самое, что и на другом сервере.
Кроме того, я создаю резервные копии всех основных наборов на сервере на некотором NAS с помощью rsync
. NAS работает довольно медленно, и для успешного резервного копирования требуются часы, поэтому реализованный подход заключается в приостановке виртуальных машин, создании одного снимка, восстановлении виртуальных машин и разрешении rsync
запускаться из созданного снимка. Важно то, что созданный вручную снимок не соответствовал соглашению об именах ZREP и был уничтожен сразу после повторного завершения rsync
. Сначала ZREP продолжал работать одновременно, запущенный cron
.
Но время от времени случалось, что ZREP переходил в какое-то состояние , которое больше не могло синхронизироваться . Чтобы решить эту проблему, коллега сказал мне, что ему нужно удалить моментальные снимки и полностью выполнить процесс инициализации ZREP. Эта проблема была решена тем, что ZREP больше не запускался параллельно с rsync
и нашим собственным снимком.
К сожалению, мне не хватает конкретных деталей этой ошибки, и коллега больше недоступна, кроме По его описанию это звучало так, как будто возникла проблема с поиском общих предков моментальных снимков между мастером репликации и целью для постепенной синхронизации. Я думаю, что сообщения об ошибках были примерно такими:
cannot receive incremental stream: most recent snapshot of zfs-pool/vbox/tori does not match incremental source
cannot open 'zfs-pool/vbox/tori@zrep_0001b7': dataset does not exist
Из моего понимания документов и других вопросов ],для успешной пошаговой отправки моментальных снимков ведущему устройству-отправителю и принимающему объекту необходимо совместно использовать один моментальный снимок, который используется в качестве аргумента 1 для zfs send
, и этот моментальный снимок дополнительно должен быть текущим на принимающей цели.
Второй аргумент - это произвольный более новый моментальный снимок, используемый ZFS для вычисления различий между одним главным и целевым устройством моментальных снимков, которые являются общими, и отправки этих различий целевому объекту репликации. Поскольку оба используют один и тот же снимок, указанный в качестве аргумента 1, различия имеют смысл для цели и могут быть просто применены как есть.
Аргументы -i
vs. -I
из Насколько я понимаю, это либо приведет к отправке одного логического снимка, содержащего все рассчитанные инкрементные данные главной стороны, либо отправит все промежуточные снимки, содержащие их инкрементные изменения. Так, например, -i
всегда приводит к ОДНОМУ новому снимку на целевом объекте, тогда как -I
может привести к N дополнительным снимкам.
Создание и уничтожение промежуточных снимков между тем, что предоставляется как arg 1 и 2 до zfs send -i
не должно быть проблемой, потому что ZFS всегда вычисляет различия только между этими двумя предоставленными аргументами и не заботится о каких-либо других промежуточных снимках. В случае ZREP это теоретически означает, что до тех пор, пока я не вмешиваюсь в снимки, управляемые ZREP, это не должно иметь никакого значения, будут ли созданы дополнительные снимки во время его работы или нет. Просто потому, что специальные снимки ZREP доступны всегда, управляются ZREP и используются для расчета различий для репликации. Так что теоретически дополнительное создание снимков для rsync
и резервного копирования не должно быть проблемой.
Верны ли эти предположения?
Безопасно ли это в вообще отправлять ZFS-снимки, игнорируя какие-то промежуточные? Или необходимо отправить ВСЕ промежуточные моментальные снимки, созданные когда-либо, на цель репликации, чтобы получить рассинхронизацию или прочее? Как все зависит от -i
vs. -I
?
Да, вы по-прежнему получаете все промежуточные данные, но вы просто не можете перемотать их назад.
Если у вас есть снимки 1,2 и 3 и только удаленный пул есть снимок 1, вы можете дать ему снимок 3 и пропустить 2 .. он просто не сможет вернуться в состояние «2». Но данные все равно будут там.
Снимки описывают, что было там в то время. Так что отсутствует снимок «2» в удаленном пуле, как будто вы никогда не делали его в тот момент. Он буквально не знает о снимке «2» и о том, как все выглядело тогда.
Если вы передумаете, вам нужно будет удалить снимок «3» в удаленном пуле, и только тогда вы сможете отправить » 2 ', затем снова' 3 '.
https://www.reddit.com/r/zfs/comments/cfzdb3/is_it_safe_to_send_zfssnapshots_incrementally/euensuy/