2gusia (2gusia) wrote,
2gusia
2gusia

Category:

zfs снимки - магия клонов

Чуть раньше мы научились создавать zfs снимки, вручную и автоматом; откатываться к снимкам; удалять старые снимки и использовать для доступа через "Предыдущие версии" Windows и по сети / через файловую систему. Но снимок доступен только на чтение (почему и хорош для защиты от криптовируса, в частности). А если мне 10 копий какого-то набора файлов, доступных для записи в котором каждую копию надо как-то модифицировать? Вот тут и выходят на сцену zfs клоны.




Как умозрительный пример могу предложить терабайтную библиотеку (софта, картинок, видео - не важно), предоставляемую по сети ста сотрудникам. Но каждому выдаётся уникальная копия. Может быть на некоторых картинках стоят водяные знаки с ID пользователя. Или в базе данных спрятались уникальные для него фейк-записи. Конфиги прописаны именно под его компьютер. В дистрибутив забито его имя. Ну, или что-то в этом роде. Пользователь активно работает с библиотекой - удаляет, добавляет, модифицирует файлы. И каждый видит свой терабайт. Но хранить приходится только один терабайт плюс те файлы, которые отличаются в экземпляре данного пользователя от шаблона...



Обратите внимание на разные сумки клонов.

Да, это про клоны. Которые в некоторых случаев могут использоваться как некий суррогат дедупликации на уровне файлов. Но в отличие от zfs дедупликации не требует дополнительных ресурсов. А блочная zfs дедупликация жрёт памяти столько, сколько в домашних условиях просто не бывает. Ставя колом систему при недостатке памяти. Почему категорически не рекомендована не профессионалам.

Любой zfs снимок можно использовать как матрицу для создания клона (или нескольких клонов). Как и в случае со снимками, клон создается почти мгновенно и изначально не занимает дополнительного дискового пространства. Кроме того, можно сделать снимок клона.

Доступ к функционалу лежит в Disks > ZFS > Snapshots > Snapshot



Гаечный  ключ справа позволяет среди прочего клонировать снимок. Нажмём его


Выбрав как действие Clone нужно задать имя клона. Причём начинаться оно должно с того пула, на котором расположен снимок-шаблон. Если пул задать не тот - ругнётся. (На картинке ниже я для примера пытаюсь создать клон с пула Pool на пул WD2T)



После имени пула идёт имя. Как говорилось, с одного снимка можно создать несколько клонов - для примера клоны Music1 и Music2 смонтированы в корень пула Pool


Но монтировать можно не только в корень, но как потомка любого датасета этого пула. Например, если у меня есть датасет Pool/Clone_place, то я могу к нему примонтировать клон Music3

(а если такого датасета нет - то не смогу :)

Ну и после того, как клон создан, выглядит он как нормальная папка с файлами. С которыми можно делать что угодно



Намёк от Капитана. Снимок можно удалить только после того, как удалены все клоны, на него опирающиеся. Напомню, что чтобы откатиться к снимку, нужно удалить все снимки, более поздние, чем он.

А удалить клон просто - идём в Disks > ZFS > Snapshots > Clone и жмём на красный крестик. Соглашаемся. Жмём кнопку Apply.

На самом деле реальная магия на этом не заканчивается. zfs позволяет еще одну операцию. Замену файловой системы на её клон. Но в гуе nas4free это не реализовано. Официальная инфа по клонам от Oracle на русском.

Ну и по традиции на сладкое посмотрим историю пула Pool из командной строки.
nas4free ~/ root~$ zpool history Pool
--blah-blah--
2016-12-27.01:12:40 zfs clone Pool/Music@auto-20161220-030000 Pool/Music1
2016-12-27.01:13:20 zfs clone Pool/Music@auto-20161220-030000 Pool/Music2
2016-12-27.01:27:34 zfs create -o aclinherit=restricted -o aclmode=discard -o atime=off -o casesensitivity=sensitive -o compression=off -o dedup=off -o sync=standard Pool/Clone_place
2016-12-27.01:27:51 zfs clone Pool/Music@auto-20161220-030000 Pool/Clone_place/Music3

2016-12-27.02:42:42 zfs destroy Pool/Music2
2016-12-27.02:42:42 zfs destroy Pool/Music1
2016-12-27.02:42:43 zfs destroy Pool/Clone_place/Music3
2016-12-27.02:42:48 zfs destroy Pool/BackupClone
2016-12-27.02:43:37 zfs destroy -f Pool/Clone_place


Видно, что я создал два клона Music1 и Music2, смонтировал их в корень пул Pool
Потом создал датасет Clone_Place
Создал с того же снимка клон Music3 и смонтировал его поверх Clone_Place
И, наконец, удалил клоны и этот датасет

Как это выглядит видно на синих картинках выше. Но вы попробуйте сами. Не каждый день удаётся такое потестить ;)
Tags: nas, nas4free, zfs
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 8 comments