В этой статье поближе познакомимся с 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 на английском языке доступно здесь.
Если понравилось статья, подпишись на мой канал в VK.