В этом разделе описано использование параметров команды zfs send - I и - R для отправки и получения потоковых представлений сложных моментальных снимков.
При отправке и получении потоковых представлений моментальных снимков ZFS необходимо помнить следующее.
Параметр zfs send - I используют для отправки всех инкрементных потоков из одного снимка в совокупный снимок. Или этот параметр используют для отправки инкрементного потока из исходного снимка для создания клона. Для получения инкрементного потока исходный снимок уже должен существовать на принимающей стороне.
Параметр zfs send - R используют для отправки потока репликации всех дочерних файловых систем. При получении сохраняются все свойства, снимки, файловые системы-потомки и клоны.
Оба параметра можно использовать для отправки потока инкрементной репликации.
Сохраняются изменения свойств, а также результаты операций переименования и уничтожения снимков и файловых систем.
Если параметр zfs recv -F не указан при получении потока репликации, результаты операций уничтожения наборов данных игнорируются. Синтаксис zfs recv -F в этом случае также сохраняет свой смысл отката при необходимости.
Что касается других вариантов (не zfs send -R) - i или -I, если используется параметр - I, отправляются все снимки от snapA до snapD. Если используется параметр - i, отправляются только снимки snapD (для всех дочерних).
Для получения всех новых типов потоков zfs send принимающая система должна выполнять версию программного обеспечения, поддерживающую их отправку. Версия потока увеличивается.
Однако можно получить доступ к потокам из старых версий пула с помощью новой версии программного обеспечения. Например, можно отправлять и получать потоки, созданные с новыми параметрами, в и из пула версии 3. Но при этом для получения потока, отправленного с новыми параметрами, должно выполняться последнее программное обеспечение.
Группу инкрементных снимков можно объединить в один снимок с помощью команды zfs send с параметром - I. Пример:
# zfs send -I pool/fs@snapA pool/fs@snapD > /snaps/fs@all-I |
Удалите снимки B, C и D.
# zfs destroy pool/fs@snapB # zfs destroy pool/fs@snapC # zfs destroy pool/fs@snapD |
Получите комбинированный снимок.
# zfs receive -d -F pool/fs < /snaps/fs@all-I # zfs list NAME USED AVAIL REFER MOUNTPOINT pool 428K 16.5G 20K /pool pool/fs 71K 16.5G 21K /pool/fs pool/fs@snapA 16K - 18.5K - pool/fs@snapB 17K - 20K - pool/fs@snapC 17K - 20.5K - pool/fs@snapD 0 - 21K - |
Команду zfs send -I можно также использовать, чтобы объединить снимок и снимок клона для создания комбинированного набора данных. Пример:
# zfs create pool/fs # zfs snapshot pool/fs@snap1 # zfs clone pool/fs@snap1 pool/clone # zfs snapshot pool/clone@snapA # zfs send -I pool/fs@snap1 pool/clone@snapA > /snaps/fsclonesnap-I # zfs destroy pool/clone@snapA # zfs destroy pool/clone # zfs receive -F pool/clone < /snaps/fsclonesnap-I |
Команду zfs send - R используют для репликации файловой системы ZFS и всех дочерних файловых систем вплоть до именованного снимка. При получении сохраняются все свойства, снимки, дочерние файловые системы и клоны.
В следующем примере снимки создаются для пользовательских файловых систем. Для всех пользовательских снимков создается один поток репликации. Затем исходные файловые системы и снимки удаляются и восстанавливаются.
# zfs snapshot -r users@today # zfs list NAME USED AVAIL REFER MOUNTPOINT users 187K 33.2G 22K /users users@today 0 - 22K - users/user1 18K 33.2G 18K /users/user1 users/user1@today 0 - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K - # zfs send -R users@today > /snaps/users-R # zfs destroy -r users # zfs receive -F -d users < /snaps/users-R # zfs list NAME USED AVAIL REFER MOUNTPOINT users 196K 33.2G 22K /users users@today 0 - 22K - users/user1 18K 33.2G 18K /users/user1 users/user1@today 0 - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K - |
Можно использовать команду zfs send -Rдля репликации набора данных users и отправки реплицированного потока в другой пул users2.
# zfs create users2 mirror c0t1d0 c1t1d0 # zfs receive -F -d users2 < /snaps/users-R # zfs list NAME USED AVAIL REFER MOUNTPOINT users 224K 33.2G 22K /users users@today 0 - 22K - users/user1 33K 33.2G 18K /users/user1 users/user1@today 15K - 18K - users/user2 18K 33.2G 18K /users/user2 users/user2@today 0 - 18K - users/user3 18K 33.2G 18K /users/user3 users/user3@today 0 - 18K - users2 188K 16.5G 22K /users2 users2@today 0 - 22K - users2/user1 18K 16.5G 18K /users2/user1 users2/user1@today 0 - 18K - users2/user2 18K 16.5G 18K /users2/user2 users2/user2@today 0 - 18K - users2/user3 18K 16.5G 18K /users2/user3 users2/user3@today 0 - 18K - |
Для удаленного копирования потокового представления моментального снимка из одной системы в другую используются команды zfs send и zfs recv. Пример:
# zfs send tank/cindy@today | ssh newsys zfs recv sandbox/restfs@today |
Эта команда отправляет данные снимка tank/cindy@today и получает их в файловой системе sandbox/restfs, а также создает снимок restfs@today в системе newsys. В этом примере пользователь настроен на использование команды ssh в удаленной системе.