Я расширяю сервер 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 (или чего-то подобного) вы получаете эффект пинг-понга, когда один постоянно блокирует другой.