ZFS датасеты (dataset)

В этой статье поближе познакомимся с 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. Но алгоритм по умолчанию в будущих версиях может поменяться. Изменение этого свойства повлияет только на вновь добавленные данные.
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 для этого раздела.

Если понравилась статья, подпишись на мой канал в  VK  или  Telegram .