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

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

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

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

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

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

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

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

  • создать снимок

  • отправьте этот снимок способом, предложенным ранее, но при этом оставив все службы активными

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

  • создать второй снимок (например, снимок 2)

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

    zfs send -i rpool/filesystem@snapshot rpool/filesystem@snapshot2 \
        | zfs receive -F destinationpool/filesystem
    
  • когда закончите, переместите точку монтирования файловой системы из старого набора данных в новый. например.:

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

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

  • повторно активируйте сервис (ы), и все готово.

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

Если у вас есть подфайловые системы, вы захотите использовать -r флаг в команде zfs snapshot, а -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 переключатель.

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

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

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

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

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

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