В этой статье поближе познакомимся с ZFS датасетами (dataset), научимся их создавать, удалять, настраивать и просматривать.

Основы

Я уже писал про ZFS в статье ZFS и пулы ZFS (Zpool). В той статье я описал основы ZFS и создание ZFS пулов. А в этой познакомимся поближе с датасетами.

ZFS датасеты ещё называют разделами, и это действительно разделы с файловой системой ZFS. Разбивать zpool на разделы можно по нескольким причинам:

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

Если вы создали zpool, то у вас вместе с ним создаётся корневой dataset. Посмотреть созданные zpool можно с помощью команды zfs list, а посмотреть созданные разделы можно с помощью команды zfs list:

# zpool list
NAME       SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zfs-data  15.5G   768K  15.5G        -         -     0%     0%  1.00x    ONLINE  -

# zfs list
NAME       USED  AVAIL  REFER  MOUNTPOINT
zfs-data   768K  15.0G    96K  /zfs-data

И так, у нас zpool называется zfs-data, значит он будет автоматически примонтирован в /zfs-data.

Такое поведение можно было бы изменить. Для этого существует свойство пула ALTROOT, но его можно изменять только при создании или импорте пула. Этому свойству можно указать любую альтернативную точку монтирования.

В этой статье у нас будет всё стандартно, то есть мы не будем использовать свойство ALTROOT.

Создание датасетов и их просмотр

Для создания новых датасетов нужно использовать команду zfs create <dataset>. А для просмотра списка датасетов — команду zfs list. Например, создадим два датасета для хранения документов и резервных копий, а затем просмотрим список датасетов:

# zfs create zfs-data/documents
# zfs create zfs-data/backups

# zfs list
NAME                 USED  AVAIL  REFER  MOUNTPOINT
zfs-data             692K  15.0G   104K  /zfs-data
zfs-data/backups      96K  15.0G    96K  /zfs-data/backups
zfs-data/documents    96K  15.0G    96K  /zfs-data/documents

Обратите внимание что название датасетов начинается не со слеша, в отличии от их точек монтирования.

Переименование датасетов

Раздел можно переименовать, для этого используется команда zfs rename <old_name> <new_name>:

# zfs rename zfs-data/backups zfs-data/back

# zfs list
NAME                 USED  AVAIL  REFER  MOUNTPOINT
zfs-data             764K  15.0G   104K  /zfs-data
zfs-data/back         96K  15.0G    96K  /zfs-data/back
zfs-data/documents    96K  15.0G    96K  /zfs-data/documents

При этом точка монтирования тоже измениться. Все файлы, которые были в каталоге /zfs-data/backups появятся в /zfs-data/back. Это нужно учитывать, если вы используете символические ссылки.

Удаление датасетов

Для удаления датасета используется команда zfs destroy <dataset>:

# zfs destroy zfs-data/back

# zfs list
NAME                 USED  AVAIL  REFER  MOUNTPOINT
zfs-data             668K  15.0G   104K  /zfs-data
zfs-data/documents    96K  15.0G    96K  /zfs-data/documents

Здесь нужно помнить, что zfs не предупреждает перед удалением датасета. Очень легко случайно удалить не тот раздел.

Свойства датасетов

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

# man zfsprops

Вот некоторые из свойств:

availableОбъем пространства, доступный этому датасету и всем его дочерним датасетам. Объём может быть ограничен некоторыми факторами: физическим размером пула, квотами, резервированием или другими разделами в пуле.
usedОбъем пространства, занимаемый этим разделом и всеми его дочерними разделами.
compressratioДостигнутая степень сжатия для этого раздела. Указывается в виде множителя.
compression=
on / off
lz4 / lzjb / zle
gzip или gzip-N
zstd или zstd-N
zstd-fast или zstd-fast-N
Вы можете указать алгоритм сжатия для раздела. По умолчанию установлен в on. Это означает что сжатие включено и используется алгоритм по умолчанию. Алгоритм сжатия по умолчанию — lzjb, который предоставлен автором ZFS Джеффом Бонвиком. Но алгоритм по умолчанию в будущих версиях может поменяться.

Изменение этого свойства повлияет только на вновь добавленные данные.
atime=
on / off
Обновлять ли время доступа к файлам при их чтении. Отключение позволяет ускорить работу пула.
quota=
size / none
Ограничивает объем пространства, который может занимать датасет и его дочерние датасеты. Сюда входит все пространство, занимаемое потомками, включая датасеты и снапшоты.
canmount=
on / off / noauto
Если для этого свойства установлено значение off, файловая система не может быть смонтирована и игнорируется команда zfs mount.

Если on (по умолчанию), то файловая система будем автоматически смонтирована при создании или импорте.

Если noauto, то файловая система автоматически не будет смонтирована, но вручную (с помощью команды zfs mount) её можно будет примонтировать.

Чтобы получить значения всех свойств датасета используется команда zfs get all <dataset>. Или вы можете получить конкретное свойство датасета — zfs get <property> <dataset>. Изменить значение свойства можно с помощью команды zfs set <property>=<значение> <dataset>.

# zfs get quota,compression,available zfs-data/documents
NAME                PROPERTY     VALUE           SOURCE
zfs-data/documents  quota        none            local
zfs-data/documents  compression  on              local
zfs-data/documents  available    15.0G           -

# zfs set compression=lzjb quota=2G zfs-data/documents

# zfs get quota,compression,available zfs-data/documents
NAME                PROPERTY     VALUE           SOURCE
zfs-data/documents  quota        2G              local
zfs-data/documents  compression  lzjb            local
zfs-data/documents  available    2.00G           -

Как видите, изменив quota, мы дополнительно изменили available для этого раздела.

Итог

Работая с датасетами мы применяем команду zfs, вот команды разобранные в этой статье:

  • zfs create <раздел> — создание раздела;
  • zfs destroy <раздел> — удаление раздела;
  • zfs list — просмотр списка разделов;
  • zfs get <all> <раздел> — получение всех свойств раздела;
  • zfs get <свойство> <раздел> — получение определённого свойства раздела;
  • zfs set <свойство>=<значение> <раздел> — настройка свойства раздела;
  • man zfsprops — справочник по свойствам разделов;
  • man zfs — справочник по созданию и работе с zfs разделами.

Руководство по ZFS на английском языке доступно здесь.

Сводка
ZFS датасеты (dataset), тома (zvol) и снапшоты (snapshot)
Имя статьи
ZFS датасеты (dataset), тома (zvol) и снапшоты (snapshot)
Описание
В этой статье поближе познакомимся с ZFS датасетами (dataset), научимся их создавать и удалять, настраивать и просматривать

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *