Руководство по администрированию файловых систем ZFS Solaris

Отправка и получение данных ZFS

Команда zfs send создает потоковое представление снимка, передаваемое на стандартный вывод. По умолчанию генерируется полный поток. Выходные данные можно перенаправить в файл или в другую систему. Команда zfs receive создает снимок, содержимое которого помещается в поток, направляемый на стандартный ввод. При получении полного потока также создается новая файловая система. С помощью этих команд можно отправлять и получать данные снимков ZFS и файловых систем. См. примеры в следующем разделе.

Существуют следующие решения резервного копирования для сохранения данных ZFS:

Отправка снимка ZFS

Можно использовать команду 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

При получении снимка файловой системы необходимо учитывать следующее:

Пример:


# 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

В этом разделе описано использование параметров команды zfs send - I и - R для отправки и получения потоковых представлений сложных моментальных снимков.

При отправке и получении потоковых представлений моментальных снимков ZFS необходимо помнить следующее.


Пример 7–1 Примеры: отправка и получение потоковых представлений сложных моментальных снимков ZFS

Группу инкрементных снимков можно объединить в один снимок с помощью команды 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

Для удаленного копирования потокового представления моментального снимка из одной системы в другую используются команды 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 с использованием сторонних решений для резервного копирования

Помимо команд zfs send и zfs receive, для сохранения файлов ZFS также можно использовать средства архивации, например tar и cpio. Такие средства позволяют сохранять и восстанавливать атрибуты файлов ZFS и списков ACL. См. описание соответствующих параметров команд tar и cpio.

Для получения новейшей информации о проблемах с ZFS и продуктами резервного копирования сторонних изготовителей см. заметки о выпуске Solaris 10 сопроводительной документации или вопросы и ответы (FAQ) по ZFS:

http://opensolaris.org/os/community/zfs/faq/#backupsoftware