Назад | Перейти на главную страницу

Безопасно ли отправлять снимки ZFS, постепенно игнорируя некоторые промежуточные снимки?

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

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

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

Эта проблема.

Но время от времени случалось, что ЗРЭП попадал в какое-то состояние. не может больше синхронизировать. Чтобы решить эту проблему, коллега сказал мне, что ему нужно удалить моментальные снимки и снова выполнить процесс инициализации 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 приводит к ОДНОМУ новому снимку на цели всегда vs. -I может привести к N дополнительным.

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

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

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

Безопасно ли вообще отправлять снимки 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/