Данная статья является вольным переводом страниц документации к Shadow Migration. Данный функционал появился в 11 версии и не так широко известен.
Давайте попробуем понять, что же это такое. Предположим вам нужно перенести данные с одного места в другое, при этом без downtim’a. Тогда вам будет очень кстати этот метод. Shadow Migration позволяет переносить данные “в тени (в фоне)” на новое место + редиректить запросы тоже на новое место. Получаем перенос данных + прозрачный редирект без простоя. Но есть одно но! Исходная ФС (старое место) должна быть переведена в режим RO. Если для вас это приемлимо – то ниже будет описан процесс работы с ним.
Создадим ФС и наполним её файлами (для эксперимента):
# zfs create oldstuff/forgotten
# find /var/adm -print | cpio -pdv /oldstuff/forgotten
Для работы Shadow Migration нужно поставить соответсвующий пакет и запустить службу:
# pkg install shadow-migration
# svcadm enable shadowd
Теперь пару слов о работе самой службы. Она начинает миграцию сразу в тот момент, как только была создана новая ФС (новое место), куда собственно будут мигрировать данные. Но что бы всё заработало правильно, новую ФС нужно создать с соответствующим параметром shadow и указать в качестве значения, путь старой системы. Перед этим, старую систему нужно перевести в RO-режим. Приступим:
# zfs set readonly=on oldstuff/forgotten
# zfs create -o shadow=file:///oldstuff/forgotten mypool/remembered
Примечание:
При копировании между серверами, команду zfs create нужно создавать на том сервере, куда переносятся данные. Соответственно на том же сервере нужно ставить пакет shadow-migration и запускать службу shadowd
Теперь можно наблюдать за процессом shadow migration в режиме RealTime:
# shadowstat EST BYTES BYTES ELAPSED DATASET XFRD LEFT ERRORS TIME mypool/remembered 92.5M - - 00:00:59 mypool/remembered 99.1M 302M - 00:01:09 mypool/remembered 109M 260M - 00:01:19 mypool/remembered 133M 304M - 00:01:29 mypool/remembered 149M 339M - 00:01:39 mypool/remembered 156M 86.4M - 00:01:49 mypool/remembered 156M 8E 29 (completed)
В качестве значения для shadow можно указать и nfs:
nfs://fileserver/directory