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 .