Немного предыстории.

Немного предыстории.

Немного предыстории.

я используюЗРЭПдля репликации двух серверов друг с другом, и каждый сервер содержит один ZFS-пул, содержащий два набора данных в качестве мастера репликации и два набора в качестве цели репликации. Мастер-наборы содержат систему и VirtualBox-VM локального сервера, цели репликации те же самые с другого.

Кроме того, я делаю резервное копирование всех основных наборов на сервере на какой-то NAS с помощью rsync. NAS довольно медленный, и резервное копирование занимает часы, поэтому реализованный подход заключается в приостановке виртуальных машин, создании одного снимка, восстановлении виртуальных машин и запуске rsyncсозданного снимка. Важно то, что созданный вручную снимок не следовал соглашению об именовании ZREP и был уничтожен сразу после rsyncзавершения. Сначала ZREP продолжал работать параллельно, запущенный cron.

Проблема.

Но время от времени случалось, что ЗРЭП приходил в какое-то состояниебольше не могу синхронизироваться. Чтобы решить эту проблему, коллега сказал мне, что ему нужно удалить снимки и следовать процессу, чтобы снова инициализировать ZREP. Эта проблема была исправлена, когда мы rsyncбольше не позволяли ZREP работать параллельно с нашим собственным снимком.

К сожалению, у меня нет конкретных подробностей этой ошибки, а коллега больше не доступен, но из его описания следовало, что возникла проблема с поиском общих предков снимков между мастером репликации и целью для постепенной синхронизации. Я думаю, сообщения об ошибках были примерно такими:

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против. -Iиз моего понимания либо приводят к одному логическому снимку, получающему отправку, содержащему все вычисленные инкрементные данные главной стороны, ЛИБО к отправке всех промежуточных снимков, содержащих их инкрементные изменения. Так, например, -iвсегда приводит к ОДНОМУ новому снимку на цели против. -Iможет привести к N дополнительным.

Создание и уничтожение промежуточных снимков между тем, что предоставляется как аргументы 1 и 2, zfs send -iне должно быть проблемой, поскольку ZFS всегда вычисляет различия только между этими двумя предоставленными аргументами и не заботится о других промежуточных снимках. В случае ZREP это означает в теории, что пока я не вмешиваюсь в снимки, управляемые ZREP, не должно иметь значения, создаются ли дополнительные снимки во время его работы или нет. Просто потому, что специальные снимки ZREP всегда доступны, управляются ZREP и используются для вычисления различий для репликации. Поэтому в теории дополнительное создание снимков для rsyncрезервного копирования не должно быть проблемой вообще.

Верны ли эти предположения?

Вопросы, не связанные с ZREP.

Безопасно ли вообще отправлять снимки ZFS пошагово, игнорируя некоторые промежуточные? Или необходимо отправлять ВСЕ промежуточные снимки, когда-либо созданные, в цель репликации, чтобы net get out of sync или что-то в этом роде? Как все зависит от -ivs. -I?

решение1

Да, вы по-прежнему получаете все промежуточные данные, но вы просто не можете вернуться к промежуточным данным.

Если у вас есть снимки 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/

Связанный контент