Команда zfs send создает потоковое представление снимка, передаваемое на стандартный вывод. По умолчанию генерируется полный поток. Выходные данные можно перенаправить в файл или в другую систему. Команда zfs receive создает снимок, содержимое которого помещается в поток, направляемый на стандартный ввод. При получении полного потока также создается новая файловая система. С помощью этих команд можно отправлять и получать данные снимков ZFS и файловых систем. См. примеры в следующем разделе.
Существуют следующие решения резервного копирования для сохранения данных ZFS:
Продукты для резервного копирования на корпоративном уровне. Если требуются следующие функциональные возможности, рассмотрите возможность использования решения для резервного копирования на корпоративном уровне:
Восстановление отдельных файлов
Проверка архивных носителей
управление носителями
Снимки файловой системы и откат снимков. При необходимости простого создания копии файловой системы и возврата к предыдущей версии файловой системы используются команды zfs snapshot и zfs rollback. Например, это решение можно использовать для восстановления файла или файлов из предыдущей версии файловой системы.
Для получения дополнительной информации о создании снимков и откате см. Краткий обзор снимков ZFS.
Сохранение снимков. Для отправки и получения снимка ZFS используются команды zfs send и zfs receive. Инкрементные изменения между снимками могут быть сохранены, но восстановление отдельных файлов невозможно. Снимок файловой системы необходимо восстановить полностью. Эти команды не обеспечивают полное резервное копирование для сохранения данных ZFS.
Удаленная репликация. Для копирования файловой системы из одной системы в другую используются команды zfs send и zfs receive. Этот процесс отличается от традиционного управления томами, при котором существовала возможность зеркалирования устройств в глобальной сети. Какие-либо специальные настройки или оборудование не требуются. Преимущество репликации файловой системы ZFS состоит в возможности воссоздания файловой системы в пуле устройств хранения данных на другом оборудовании и определения различных конфигурационных уровней для нового пула, например RAID-Z, но с идентичными данными файловой системы.
Средство архивации. Сохранение данных ZFS с помощью средств архивации, таких как tar, cpio и pax или продуктов резервного копирования сторонних изготовителей. В настоящее время команды tar и cpio правильно выполняют трансляцию ACL типа NFSv4, однако команда pax выполняет трансляцию ACL типа NFSv4 некорректно.
Можно использовать команду zfs send для отправки копии снимка в другой пул и получения снимка из другого пула на той же системе или из пула на другой системе, которая используется для сохранения архивных данных. Например, чтобы отправить снимок в другой пул на той же системе, используется синтаксис, аналогичный следующему:
# zfs send tank/data@snap1 | zfs recv spool/ds01 |
Если потоковое представление моментального снимка отправляется в другую систему, выходные данные команды zfs send передаются с помощью команды ssh. Пример:
host1# zfs send tank/dana@snap1 | ssh host2 zfs recv newtank/dana |
При передаче полного потока целевая файловая система не должна существовать.
Для сохранения инкрементных данных используется команда zfs send с параметром -i. Пример:
host1# zfs send -i tank/dana@snap1 tank/dana@snap2 | ssh host2 zfs recv newtank/dana |
Обратите внимание, что первый аргумент представляет более ранний снимок (snap1), а второй – более поздний (snap2). В этом случае для успешного выполнения инкрементной передачи должна существовать файловая система newtank/dana.
В качестве последнего компонента имени снимка можно указать инкрементный источник snap1. Это означает, что достаточно указать имя после знака @ для снимка snap1, который, как предполагается, находится в той же файловой системе, что и snap2. Пример:
host1# zfs send -i snap1 tank/dana@snap2 > ssh host2 zfs recv newtank/dana |
Этот синтаксис является эквивалентом приведенного выше примера инкрементного синтаксиса.
При попытке генерации инкрементного потока из другой файловой системы snapshot1 отображается следующее сообщение:
cannot send 'pool/fs@name': not an earlier snapshot from the same fs |
При необходимости сохранения нескольких копий можно выполнить сжатие потокового представления моментального снимка ZFS с помощью команды gzip. Пример:
# zfs send pool/fs@snap | gzip > backupfile.gz |
При получении снимка файловой системы необходимо учитывать следующее:
Получены снимок и файловая система.
Файловая система и все дочерние файловые системы размонтируются.
Во время получения файловые системы недоступны.
Исходная файловая система, которая должна быть получена, не должна существовать во время передачи.
При наличии файловой системы с конфликтующим именем эту систему можно переименовать с помощью команды zfs rename.
Пример:
# zfs send tank/gozer@0830 > /bkups/gozer.083006 # zfs receive tank/gozer2@today < /bkups/gozer.083006 # zfs rename tank/gozer tank/gozer.old # zfs rename tank/gozer2 tank/gozer |
Также можно использовать сокращенный вариант zfs recv как псевдоним команды zfs receive.
В случае изменения исходной файловой системы и необходимости инкрементной передачи снимка сначала следует выполнить откат целевой файловой системы.
Например, предположим, что в файловую систему вносится следующее изменение:
host2# rm newtank/dana/file.1 |
Для выполнения инкрементной отправки снимка tank/dana@snap3 и получения нового инкрементного снимка сначала следует выполнить откат целевой файловой системы. Для исключения этапа отката можно использовать параметр -F. Пример:
host1# zfs send -i tank/dana@snap2 tank/dana@snap3 | ssh host2 zfs recv -F newtank/dana |
При получении инкрементного снимка целевая файловая система должна уже существовать.
При внесении изменений в исходную файловую систему без отката целевой файловой системы для получения нового инкрементного снимка, либо в случае отсутствия параметра -F появится следующее сообщение:
host1# zfs send -i tank/dana@snap4 tank/dana@snap5 | ssh host2 zfs recv newtank/dana cannot receive: destination has been modified since most recent snapshot |
Перед применением параметра -F выполняются следующие проверки:
Если новый снимок не соответствует инкрементному источнику, операции отката и получения не выполняются, и выводится сообщение об ошибке.
При непреднамеренном вводе в команде zfs receive имени другой файловой системы, не соответствующей инкрементному источнику, операции отката и получения не выполняются, и выводится следующее сообщение об ошибке.
cannot send 'pool/fs@name': not an earlier snapshot from the same fs |
В этом разделе описано использование параметров команды 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 в удаленной системе.
Помимо команд zfs send и zfs receive, для сохранения файлов ZFS также можно использовать средства архивации, например tar и cpio. Такие средства позволяют сохранять и восстанавливать атрибуты файлов ZFS и списков ACL. См. описание соответствующих параметров команд tar и cpio.
Для получения новейшей информации о проблемах с ZFS и продуктами резервного копирования сторонних изготовителей см. заметки о выпуске Solaris 10 сопроводительной документации или вопросы и ответы (FAQ) по ZFS: