Как переместить deduped файловую систему ZFS из одного пула в другой

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

У меня есть файловая система ZFS, которая использует дедупликацию [1]. Я пытаюсь переместить её в другой пул, используя zfs send | zfs receive (как описано в Перемещение файловой системы ZFS из одного пула в другой, например).

Однако похоже, что целевой пул истощается во время операции. Мне кажется, что атрибут “dedup” не копируется. Я даже пытался сначала вручную включить дедупликацию в целевом пуле перед выполнением send/receive, но всё равно возникала ошибка “недостаточно места”.

Как я могу перенести данные из одного пула ZFS в другой (включая все снимки, которые у меня есть!) и убедиться, что я не использую больше пространства на принимающей стороне?

[1] Да, я знаю, что существует много обсуждений о том, “стоит ли использовать дедупликацию”, но в моем случае это определенно оправдано, потому что это “случайные, часто повторяющиеся данные, собранные с различных носителей” и это позволяет мне использовать на ~5 раз меньше хранилища.

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

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

Подготовка к миграции

  1. Проверка состояния системы: Убедитесь, что оба пула (исходный и целевой) находятся в стабильном состоянии. Важно проверить наличие свободного пространства на целевом пуле и его использования. Запустите команду:

    zpool list
  2. Выбор подходящего метода миграции: Поскольку ваша файловая система использует дедупликацию, вам нужно будет использовать специальный подход, чтобы минимизировать затраты по пространству на целевом пуле.

Процесс миграции

Экспорт и импорт с использованием дельта

  1. Создание снимков: Для начала создайте снимок (snapshot) вашей файловой системы до начала передачи данных. Это обеспечит целостность данных во время миграции.

    zfs snapshot pool1/filesystem@snapshot-name
  2. Вывод дедуплицированных данных: Для передачи данных без дублирования, вы можете использовать комбинацию zfs send и zfs receive. Однако, необходимо использовать опцию -R для передачи всех снимков.

    zfs send -R pool1/filesystem@snapshot-name | zfs receive -F pool2/filesystem

Оптимизация использования пространства

  1. Использование "zfs send -D": При отправке дедуплицированных данных, используйте параметр -D, который позволяет создавать дедуплицированные потоки:

    zfs send -D pool1/filesystem@snapshot-name | zfs receive -F pool2/filesystem
  2. Проверка состояния дедупликации: После завершения передачи данных, проверьте состояние дедупликации на целевом пуле. Убедитесь, что дедупликация активирована, выполнив:

    zfs get dedup pool2/filesystem

Завершение процесса миграции

  1. Восстановление доступа: Если на исходном пулах есть какие-либо дополнительные права доступа или монтирования, убедитесь в их настройках. Возможно, потребуется изменить их для соответствия вашей новой настройки.

  2. Устранение временных ресурсов: После успешной миграции и проверки целостности данных, старые снимки можно удалить, чтобы освободить место в исходном пуле:

    zfs destroy pool1/filesystem@snapshot-name

Заключение

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

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

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

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