Как использовать моментальные снимки, клоны и репликацию в ZFS в Linux
В предыдущем уроке мы узнали, как создать 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
# 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/
# 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. Моментальные снимки используются для создания копий файловых систем или томов на определенный момент времени, клонирование используется для создания повторяющихся наборов данных, а репликация используется для репликации набора данных из одного пула данных в другой пул данных на том же компьютере или для репликации пулов данных между разными машины.