Перемещение файловой системы ZFS из одного пула в другой

18

Я дополняю сервер Solaris 10 U8 дополнительным пулом хранения в дополнение к корневому пулу.

Каков наиболее эффективный / простой / надежный способ перемещения отдельных файловых систем ZFS из rpool в этот новый пул хранения?

Можно ли это сделать онлайн или я должен сначала отключить службы, использующие эти пулы?

Асгейр Нильсен
источник

Ответы:

15

Вопрос об отключении сервисов существенно зависит от самих сервисов:

  • Они активно записывают в файловую систему, которую вы планируете переместить?
  • Они хранят постоянные данные, которые вы хотите сохранить.

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

  • создать снимок
  • отправьте этот снимок способом, предложенным ранее, но сохраняя все службы активными
  • когда fs получен в другом пуле, отключите границы критических служб для этой файловой системы. Убедитесь, что новая файловая система в целевом пуле не изменена, так как в любом случае изменения будут отменены позже.
  • создать второй снимок (например, снимок 2)
  • отправьте второй снимок постепенно, это будет намного быстрее, чем предыдущая передача. например:

    zfs send -i rpool / filesystem @ snapshot rpool / filesystem @ snapshot2 | zfs получает -F destinationpool / filesystem

  • когда закончите, переместите точку монтирования файловой системы из старого набора данных в новый. например:

    zfs set mountpoint=/application/directory.old rpool/filesystem
    

    zfs set mountpoint = / application / directory destination / filesystem

Вы должны убедиться, что ни один процесс не связан /application/filesystem(например: доступ к файлам или наличие его в качестве текущего каталога) для достижения этого.

  • повторно включите услугу (и), и все готово.
jlliagre
источник
10

Я не думаю, что это может быть выполнено в режиме онлайн, но мой процесс будет состоять в том, чтобы выключить необходимые службы, сделать снимок и использовать zfs send / receive для выполнения миграции. Что-то вроде:

zfs send rpool/filesystem@snapshot | zfs receive destinationpool/filesystem

Редактировать:

Если вы установили команду «просмотр канала» (pv), вы можете отслеживать состояние передачи с помощью:

zfs send rpool/filesystem@snapshot | pv | zfs receive destinationpool/filesystem
ewwhite
источник
10

Я повторяю многое из того, что сказал jlliagre, но с дополнениями для дочерних файловых систем. (В основном, поэтому у меня есть ссылка, когда я забываю.)

Если у вас есть подсистемы файлов, вы можете использовать -rфлаг в команде снимка zfs и флаг -rили -Rв zfs sendкоманде. Верхний регистр -Rперемещает все свойства , снимки и клоны.

Чтобы переместить весь пул:

zfs snapshot -r sourcepool@moving
zfs send -R sourcepool@moving | zfs receive -F destpool

затем, чтобы синхронизировать изменения для более короткого периода миграции, закройте приложения, завершите работу samba, nfs

zfs snapshot -r sourcepool@moving2
zfs send -Ri sourcepool@moving sourcepool@moving2 | zfs receive -F destpool

Если вы создаете несколько промежуточных моментальных снимков для миграции, прочитайте справочную страницу о zfs send -Iкоммутаторе.

Дэн Бюлер
источник
3
В моих экспериментах точная команда выглядела так: zfs send -R Pool0 @ moving | zfs получает -dF Pool1
TinkerTank
4

Вы также найдете некоторое преимущество в использовании такого инструмента, как «mbuffer» в конвейере; по-видимому, производительность отправки / записи ZFS значительно улучшается, если оба конца в основном могут передавать данные непрерывно, и без mbuffer (или чего-то подобного) вы получаете эффект пинг-понга, когда один постоянно блокирует другой.

Адам Томпсон
источник
Обратите внимание, что это очень старый вопрос (более 5 лет), и ваш ответ вряд ли что-нибудь добавит к старому вопросу.
Кэтрин Макиннес
1
Это отличный совет, и я использую его также для движений в бассейне.
Дэн Бюлер