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


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

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

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


11
2017-11-26 19:02


Источник




Ответы:


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

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

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

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

    zfs send -i rpool / filesystem @ моментальный снимок   rpool / filesystem @ snapshot2 | ZFS   получать -F destinationpool / файловая система

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

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

    zfs set mountpoint = / application / directory destination / filesystem

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

  • повторно включите службы (службы), и все будет готово.

13
2017-11-27 01:32





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

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

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

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

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

9
2017-11-26 19:11





Я повторяю многое из того, что сказал 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 переключатель.


9
2018-03-31 00:00



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


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


4
2017-11-24 16:14



Обратите внимание, что это очень старый вопрос (более 5 лет), и ваш ответ вряд ли добавит что-либо к вопросу, который старый. - Catherine MacInnes
Это отличный совет, и я тоже использую его для пула. - Dan Buhler