Поиск по сайту:

Как использовать моментальные снимки, клоны и репликацию в ZFS в Linux


На этой странице

  1. Снимки ZFS — обзор
  2. Создание и удаление моментального снимка ZFS
  3. Откат снимка
  4. Обзор клонов ZFS
  5. Создание и удаление клона ZFS
  6. Обзор репликации ZFS
  7. Настройка репликации ZFS
  8. Заключение

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

Снимки ZFS — обзор

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

Типичным примером использования моментального снимка является быстрый способ резервного копирования текущего состояния файловой системы при выполнении рискованных действий, таких как установка программного обеспечения или обновление системы.

Создание и удаление моментального снимка ZFS

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

Создайте пул с именем datapool.

# zpool create datapool mirror /dev/sdb /dev/sdc 
# zpool list
NAME       SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
datapool  1.98G    65K  1.98G         -     0%     0%  1.00x  ONLINE  -

Теперь у нас есть пул под названием datapool, затем нам нужно создать одну файловую систему ZFS для имитации функции моментальных снимков.

# zfs create datapool/docs -o mountpoint=/docs
# zfs list -r datapool
NAME            USED  AVAIL  REFER  MOUNTPOINT
datapool       93.5K  1.92G    19K  /datapool
datapool/docs    19K  1.92G    19K  /docs

Чтобы создать снимок файловой системы, мы можем использовать команду zfs snapshot, указав пул и имя снимка. Мы можем использовать параметр -r, если хотим создать снимок рекурсивно. Имя моментального снимка должно удовлетворять следующим требованиям к именованию:


# zfs snapshot datapool/      0      -  19.5K  -

Моментальный снимок для пула данных/документов создан.

Чтобы уничтожить снимок, мы можем использовать команду zfs destroy как обычно.

# zfs destroy datapool/
# zfs list -t snapshot
no datasets available

Откат снимка

Для моделирования нам нужно создать тестовый файл в каталоге /docs.

# echo "version 1" > /docs/data.txt
# cat /docs/data.txt
version 1
# zfs snapshot datapool/     9K      -  19.5K  -

Теперь меняем содержимое /docs/data.txt

# echo "version 2" > /docs/data.txt
# cat /docs/data.txt
version 2

Мы можем полностью вернуться к более старому моментальному снимку, который даст нам копию на момент времени, когда был сделан снимок.

# zfs list -t snapshot
NAME                     USED  AVAIL  REFER  MOUNTPOINT
datapool/
# cat /docs/data.txt
version 1

Как мы видим, содержимое data.txt возвращается к предыдущему содержимому.

Если мы хотим переименовать снимок, мы можем использовать команду zfs rename.

# zfs rename datapool/  9.50K      -  19.5K  -

Примечание: набор данных не может быть уничтожен, если существуют моментальные снимки этого набора данных, но мы можем использовать параметр -r, чтобы переопределить это.

# zfs destroy datapool/docs
cannot destroy 'datapool/docs': filesystem has children
use '-r' to destroy the following datasets:
datapool/
# zfs destroy -r datapool/docs
# zfs list -t snapshot
no datasets available

Обзор клонов ZFS

Клон — это доступный для записи том или файловая система, исходное содержимое которого совпадает с набором данных, из которого он был создан.

Создание и уничтожение клона ZFS

Клоны могут быть созданы только из снимка, а снимок нельзя удалить, пока вы не удалите клон, основанный на этом снимке. Чтобы создать клон, используйте команду zfs clone.

# zfs create datapool/docs -o mountpoint=/docs
# zfs list -r datapool
NAME            USED  AVAIL  REFER  MOUNTPOINT
datapool       93.5K  1.92G    19K  /datapool
datapool/docs    19K  1.92G    19K  /docs
# mkdir /docs/folder{1..5}
# ls /docs/
folder1  folder2  folder3  folder4  folder5
# zfs snapshot datapool/      0      -    19K  -

Теперь мы создаем клон из пула данных снапшотов/[email

# zfs clone datapool/ datapool/pict
# zfs list
NAME            USED  AVAIL  REFER  MOUNTPOINT
datapool        166K  1.92G    19K  /datapool
datapool/docs    19K  1.92G    19K  /docs
datapool/pict     1K  1.92G    19K  /datapool/pict

Процесс клонирования завершен, пул данных моментального снимка/[email  был клонирован в /datapool/pict. Когда мы проверяем содержимое каталога /datapool/pict, оно должно быть таким же, как /datapool/docs.

# ls /datapool/pict
folder1  folder2  folder3  folder4  folder5

После клонирования моментального снимка его нельзя удалить, пока вы не удалите набор данных.

# zfs destroy datapool/': snapshot has dependent clones
use '-R' to destroy the following datasets:
datapool/pict
# zfs destroy datapool/pict

Наконец мы можем уничтожить снимок.

# zfs destroy datapool/
# zfs list -t snapshot
no datasets available

Обзор репликации ZFS

Основой для этой репликации ZFS является снимок, мы можем создать снимок в любое время, и мы можем создать столько снимков, сколько захотим. Постоянно создавая, передавая и восстанавливая моментальные снимки, вы можете обеспечить синхронизацию между одной или несколькими машинами. ZFS предоставляет встроенную функцию сериализации, которая может отправлять потоковое представление данных на стандартный вывод.

Настройка репликации ZFS

В этом разделе я хочу показать вам, как реплицировать набор данных из пула данных в резервный пул, но данные можно не только хранить в другом пуле, подключенном к локальной системе, но и отправлять их по сети в другую систему. Для репликации данных используются команды zfs send и zfs receive.

Создайте еще один пул с именем backuppool.

# zpool create backuppool mirror sde sdf
# zpool list
NAME         SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
backuppool  1.98G    50K  1.98G         -     0%     0%  1.00x  ONLINE  -
datapool    1.98G   568K  1.98G         -     0%     0%  1.00x  ONLINE  -

Проверить состояние пула:

# zpool status
  pool: datapool
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        datapool    ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0

errors: No known data errors

пул: backuppool
 состояние: ONLINE
  scan: ничего не запрошено
config:

        NAME        STATE     READ WRITE CKSUM
        backuppool     ONLINE       0     0     0
          Mirror-0  ONLINE       0       Mirror-0  ONLINE      0     
           sde     ОНЛАЙН       0     0     0
             sdf     ОНЛАЙН       0     0     0

ошибки: нет известных ошибок данных

Создайте набор данных, который хорошо реплицируется.

# zfs snapshot datapool/      0      -    19K  -
# ls /docs/
folder1  folder2  folder3  folder4  folder5

Пришло время сделать репликацию.

# zfs send datapool/ | zfs receive backuppool/backup
# zfs list
NAME                USED  AVAIL  REFER  MOUNTPOINT
backuppool           83K  1.92G    19K  /backuppool
backuppool/backup    19K  1.92G    19K  /backuppool/backup
datapool            527K  1.92G    19K  /datapool
datapool/docs        19K  1.92G    19K  /docs
# ls /backuppool/backup
folder1  folder2  folder3  folder4  folder5

Пул данных набора данных/[электронная почта защищена] успешно реплицирован в резервный пул/резервное копирование.

Чтобы реплицировать набор данных на другой компьютер, мы можем использовать следующую команду:

# zfs send datapool/ | ssh otherserver zfs recv backuppool/backup

Сделанный.

Заключение

Моментальный снимок, клонирование и репликация — самые мощные функции ZFS. Моментальные снимки используются для создания копий файловых систем или томов на определенный момент времени, клонирование используется для создания повторяющихся наборов данных, а репликация используется для репликации набора данных из одного пула данных в другой пул данных на том же компьютере или для репликации пулов данных между разными машины.