zfs recv продолжает пытаться создать другой подпол с тем же именем на инкрементальных снимках.

Вопрос или проблема

У меня возникла странная проблема с ZFS инкрементальными снимками. Допустим, у меня есть следующие тома. kirssy является резервной копией для abby:

NAME                          USED  AVAIL  REFER  MOUNTPOINT
abby                         8.20T  4.40T   192K  /mnt/abby
abby/main                    8.20T  4.40T  8.20T  /mnt/abby/main
abby/main@2024-10-08          399M      -  8.06T  -
abby/main@2025-01-18         14.2M      -  8.19T  -
krissy                       8.06T  8.17T   192K  /mnt/krissy
krissy/main                  8.06T  8.17T  8.06T  /mnt/krissy/main
krissy/main@2024-10-08          0B      -  8.06T  -

Если я запущу следующее:

zfs send -i abby/main@2024-10-08 abby/main@2025-01-18 | pv | zfs recv krissy/main

Попытка записать этот снимок в подтом krissy/main приводит к тому, что полное имя будет krissy/main/main:

krissy                       8.06T  8.17T   192K  /mnt/krissy
krissy/main                  8.06T  8.17T  8.06T  /mnt/krissy/main
krissy/main@2024-10-08          0B      -  8.06T  -
krissy/main/main              970M  8.17T   970M  /mnt/krissy/main/main

Я попробовал изменить команду recv на zfs recv krissy, но появляется сообщение most recent snapshot of krissy does not match incremental source.

Раньше с этим не сталкивался. Почему он позволяет мне получать снимок только в подтом оригинального тома с таким же именем?

Я использую Alpine 3.20.5 и zfs/zfs-kmod 2.2.5-1.

Ответ или решение

Главная проблема, с которой вы столкнулись, связана с неправильной интерпретацией команды zfs recv при приеме инкрементных снимков. Рассмотрим ситуацию детальнее:

Теория

ZFS, или Zettabyte File System, предоставляет мощные инструменты для управления данными, включая создание и пересылку снимков файловых систем. Снимки ZFS используют метод инкрементной передачи: изменения передаются от предыдущего снимка к следующему, что позволяет экономить место и увеличивает скорость передачи. Однако данный процесс может столкнуться с проблемами, если структура пути размещения снимков не совпадает между источником и назначением.

Когда вы используете команду zfs send -i, вы передаете изменения от одного снимка к другому. Команда zfs recv должна правильно интерпретировать эти изменения и применять их к целевому пулу. Здесь важно знать, что ZFS чувствителен к совпадению имен снимков и подтомов. Когда структура целевого пула не соответствует ожидаемой, ZFS пытается создать новый подтом с оригинальным именем.

Пример

В вашей ситуации команда zfs send -i abby/main@2024-10-08 abby/main@2025-01-18 передает изменения между двумя снимками, ожидая, что подобная структура уже имеется на целевом диске. Однако, ZFS, не найдя подходящего снимка на krissy/main, создает новую иерархию, в результате чего вы получаете krissy/main/main.

Когда вы пробуете команду zfs recv krissy, ZFS хочет, чтобы последний снимок на krissy соответствовал снимку-источнику, поскольку инкрементное обновление применимо только к одинаковым аналогичным снимкам.

Применение

Чтобы исправить эту ситуацию, необходимо удостовериться, что структура снимков на целевом пуле соответствует источнику. Один из способов — это создать мгновенные снимки вручную или применить ключ zfs rollback для настройки снимков на клеточном пуле до состояния, соответствующего снимку-источнику. Однако при использовании rollback стоит быть осторожным, так как это может привести к утрате некоторых данных.

Попробуйте следующий порядок действий:

  1. Сверка снимков: Убедитесь, что снимок krissy/main@2024-10-08 идентичен abby/main@2024-10-08 в плане данных и структуры (используя команды вроде zfs diff для проверки).

  2. Создание необходимого снимка: Если нужного снимка нет в целевом пуле, вручную создайте его, например: zfs snapshot krissy/main@2024-10-08.

  3. Запуск передачи: После создания снимка попробуйте повторно запустить передачу:

    zfs send -i abby/main@2024-10-08 abby/main@2025-01-18 | pv | zfs recv krissy/main
  4. Использование ключа -F: Если совпадение снимков гарантировано, можно использовать ключ -F для принудительного приложения снимка:

    zfs send -i abby/main@2024-10-08 abby/main@2025-01-18 | pv | zfs recv -F krissy/main

Использование этих шагов должно улучшить управление и передачу снимков в вашей ZFS-пульной системе, избегая создания ненужных подтомов.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...