Spec-Zone .ru
спецификации, руководства, описания, API

15.5.1. Используя ZF для Репликации Файловой системы

Поскольку zfs send и zfs recv используйте потоки, чтобы обмениваться данными, можно использовать их, чтобы тиражировать информацию от одной системы до другого, объединяясь zfs send, ssh, и zfs recv.

Например, чтобы скопировать снимок scratchpool файловую систему к новой файловой системе вызывают slavepool на новом сервере Вы использовали бы следующую команду. Эта последовательность комбинирует снимок scratchpool, передача к ведомой машине (использующий ssh с учетными данными входа в систему), и восстановление снимка на ведомом устройстве, используя zfs recv:

root-shell> zfs send scratchpool@snap1 |ssh id@host pfexec zfs recv -F slavepool

Первая часть конвейера, zfs send scratchpool@snap1, передает снимок потоком. ssh команда, и команда, которую это выполняет на другом сервере, pfexec zfs recv -F slavepool, получает переданные потоком данные снимка и пишет это в slavepool. В этом экземпляре я определил -F опция, которая вынуждает данные снимка быть примененными, и является поэтому разрушительной. Это прекрасно, поскольку я создаю первую версию своей тиражированной файловой системы.

На ведомой машине тиражированная файловая система содержит тот же самый контент:

root-shell> ls -al /slavepool/total 23drwxr-xr-x   6 root     root           7 Nov  8 09:13 ./drwxr-xr-x  29 root     root          34 Nov  9 07:06 ../drwxr-xr-x  31 root     bin           50 Jul 21 07:32 DTT/drwxr-xr-x   4 root     bin            5 Jul 21 07:32 SUNWmlib/drwxr-xr-x  14 root     sys           16 Nov  5 09:56 SUNWspro/drwxrwxrwx  19 1000     1000          40 Nov  6 19:16 emacs-22.1/

Как только снимок был создан, чтобы синхронизировать файловую систему снова, Вы создаете новый снимок и затем используете инкрементную функцию снимка zfs send отправить изменения между этими двумя снимками к ведомой машине снова:

root-shell> zfs send -i scratchpool@snapshot1 scratchpool@snapshot2 |ssh id@host pfexec zfs recv slavepool

Эта работа только успешно выполняется, если файловая система на ведомой машине не была изменена вообще. Невозможно применить инкрементные изменения к целевой файловой системе, которая изменилась. В примере выше, ls команда вызвала бы проблемы, изменяя метаданные, такие как прошлое время доступа для файлов или каталогов.

Чтобы предотвратить изменения на ведомой файловой системе, установите файловую систему на ведомом устройстве, чтобы быть только для чтения:

root-shell> zfs set readonly=on slavepool

Установка readonly средства, что невозможно изменить файловую систему на ведомом устройстве нормальными средствами, включая метаданные файловой системы. Операции, которые обычно обновляли бы метаданные (как наш ls) тихо выполните их функцию, не пытаясь обновить состояние файловой системы.

В основном ведомая файловая система является только статической копией исходной файловой системы. Однако, даже когда конфигурирующийся к быть только для чтения, файловой системе можно было примениться к снимкам это. С набором файловой системы к только для чтения, запускает повторно начальную копию:

root-shell> zfs send scratchpool@snap1 |ssh id@host pfexec zfs recv -F slavepool

Теперь можно произвести изменения в исходной файловой системе и тиражировать их в ведомое устройство.