Свойство quota используется для установки предела по объему пространства, занимаемого файловой системой. Также предусмотрено свойство reservation, которое гарантирует наличие определенного объема пространства для файловой системы. Оба свойства применяются в отношении набора данных, в котором они установлены, и дочерних элементов этого набора данных.
Таким образом, при установке квоты для набора данных tank/home общий объем пространства, используемого tank/home и всеми дочерними элементами, не может превышать эту квоту. Аналогичным образом, при настройке резервируемого пространства для tank/home система tank/home и все ее дочерние элементы будут использовать это пространство. Объем пространства, используемого набором данных и всеми его дочерними элементами, указывается в свойстве used.
Свойства refquota и refreservation могут использоваться для управления пространством файловой системы (без учета пространства, потребленного дочерними элементами, например снимками и клонами).
В данной версии Solaris можно установить квоту user или group для объема пространства, используемого файлами, относящимися к отдельному пользователю или группе. Свойства квот для пользователей или групп не могут быть установлены для тома в файловой системе до версии 4 или в пуле до версии 15.
При выборе механизма настройки квот и резервирования пространства, который лучше всего подходит для управления вашими файловыми системами, учитывайте следующие факторы :
Свойства quota и reservation удобны для управления пространством, используемым наборами данных.
Свойства refquota и refreservation предназначены для управления пространством, используемым наборами данных и снимками.
Если указать для свойства refquota или refreservation значение, которое больше, чем значение свойства quota или, соответственно, reservation, то это значение не вступит в силу. Если настроено значение для свойства quota или refquota, то операции, пытающиеся использовать более высокое значение, будут заканчиваться сбоем. Допускается превышение значения quota, если оно больше значения refquota. Если отдельные блоки снимка испорчены, то можно превысить значение quota до того, как будет превышено значение refquota.
Квоты пользователя или группы предоставляют более простой способ управления дисковым пространством для множества учетных записей пользователей, например, в университетах.
Для получения подробной информации о настройке квот и резервируемого пространства см. Установка квот в файловых системах ZFS и Настройка резервируемого пространства в файловых системах ZFS.
Для настройки и просмотра квот ZFS используются команды zfs set и zfs get. В следующем примере для tank/home/bonwick установлена квота 10 ГБ.
# zfs set quota=10G tank/home/bonwick # zfs get quota tank/home/bonwick NAME PROPERTY VALUE SOURCE tank/home/bonwick quota 10.0G local |
Квоты ZFS также влияют на выходные данные команд zfs list и df. Пример:
# zfs list NAME USED AVAIL REFER MOUNTPOINT tank/home 16.5K 33.5G 8.50K /export/home tank/home/bonwick 15.0K 10.0G 8.50K /export/home/bonwick tank/home/bonwick/ws 6.50K 10.0G 8.50K /export/home/bonwick/ws # df -h /export/home/bonwick Filesystem size used avail capacity Mounted on tank/home/bonwick 10G 8K 10G 1% /export/home/bonwick |
Следует отметить, что, несмотря на наличие в tank/home свободного пространства 33,5 ГБ, системам tank/home/bonwick и tank/home/bonwick/ws предоставляется только 10 ГБ свободного пространства, поскольку настроена квота для tank/home/bonwick.
Установить квоту меньше, чем используется для набора данных в настоящее время, невозможно. Пример:
# zfs set quota=10K tank/home/bonwick cannot set quota for 'tank/home/bonwick': size is less than current used or reserved space |
Для набора данных можно настроить свойствоrefquota, ограничивающее объем доступного набору пространства. Этот жесткий лимит не включает пространство, используемое дочерними элементами, такими как снимки и клоны. Пример:
# zfs set refquota=10g students/studentA # zfs list NAME USED AVAIL REFER MOUNTPOINT profs 106K 33.2G 18K /profs students 57.7M 33.2G 19K /students students/studentA 57.5M 9.94G 57.5M /students/studentA # zfs snapshot students/studentA@today # zfs list NAME USED AVAIL REFER MOUNTPOINT profs 106K 33.2G 18K /profs students 57.7M 33.2G 19K /students students/studentA 57.5M 9.94G 57.5M /students/studentA students/studentA@today 0 - 57.5M - |
Кроме того, для набора данных можно установить еще одну квоту для управления пространством, которое используется снимками. Пример:
# zfs set quota=20g students/studentA # zfs list NAME USED AVAIL REFER MOUNTPOINT profs 106K 33.2G 18K /profs students 57.7M 33.2G 19K /students students/studentA 57.5M 9.94G 57.5M /students/studentA students/studentA@today 0 - 57.5M - |
В данном случае studentA может достичь жесткого предела, определяемого свойством refquota (10 ГБ), но может удалить файлы для восстановления, даже если существуют снимки.
В приведенном выше примере команда zfs list отображает меньшую квоту (10 и 20 ГБ). Чтобы увидеть обе квоты, используйте команду zfs get. Пример:
# zfs get refquota,quota students/studentA NAME PROPERTY VALUE SOURCE students/studentA refquota 10G local students/studentA quota 20G local |
Для настройки квоты пользователя или группы используются команды zfs userquota и zfs groupquota.
# zfs create students/compsci # zfs set userquota@student1=10G students/compsci # zfs create students/labstaff # zfs set groupquota@staff=20GB students/labstaff |
Отображение текущей квоты quota или group выполняется следующим образом:
# zfs get userquota@student1 students/compsci NAME PROPERTY VALUE SOURCE students/compsci userquota@student1 10G local # zfs get groupquota@staff students/labstaff NAME PROPERTY VALUE SOURCE students/labstaff groupquota@staff 20G local |
Просмотр информации об общем использовании пространства пользователя или группы можно выполнить с помощью запроса следующих свойств:
# zfs userspace students/compsci TYPE NAME USED QUOTA POSIX User root 227M none POSIX User student1 455M 10G # zfs groupspace students/labstaff TYPE NAME USED QUOTA POSIX Group root 217M none POSIX Group staff 217M 20G |
Если требуется получить информацию об использовании пространства пользователя или группы по отдельности, используется запрос для следующих свойств:
# zfs get userused@student1 students/compsci NAME PROPERTY VALUE SOURCE students/compsci userused@student1 455M local # zfs get groupused@staff students/labstaff NAME PROPERTY VALUE SOURCE students/labstaff groupused@staff 217M local |
Свойства квоты user и group не отображаются с помощью команд zfs get all dataset, которые используются для вывода перечня всех свойств файловой системы.
Удаление квот user или group выполняется следующим образом:
# zfs set userquota@user1=none students/compsci # zfs set groupquota@staff=none students/labstaff |
Квоты ZFS user и group имеют следующие функции:
При настройке в файловой системе квота user или group, установленная в родительской файловой системе, не наследуется автоматически дочерней файловой системой.
Однако квота user или group применяется при создании клона или снимка файловой системы, имеющий квоту user или group. Таким же образом квота user или group включается в файловую систему при создании потока с помощью команды zfs send даже без параметра -R.
Пользователи без соответствующих прав имеют доступ только к их собственному дисковому пространству. Пользователь типа root или пользователь, получивший права userused или groupused, может иметь доступ к информации о пространстве для учетных записей любого пользователя или группы.
Свойства userquota и groupquota невозможно настроить для томов ZFS, в файловой системе версии ниже 4 или в пуле версии ниже 15.
Применение квот user или group может быть выполнено с задержкой в несколько секунд. Эта задержка означает, что, возможно, пользователи превысили свою квоту до того как система обнаружила это превышение квоты и отклонила дополнительные попытки записи, открыв при этом сообщение об ошибке EDQUOT.
Для обзора квот пользователей в среде NFS может использоваться старая команда quota, например там, где смонтирована файловая система ZFS. Без указания параметров при выполнении команды quota выходные данные отображаются только в том случае, если превышена квота пользователя. Пример:
# zfs set userquota@student1=10m students/compsci # zfs userspace students/compsci TYPE NAME USED QUOTA POSIX User root 227M none POSIX User student1 455M 10M # quota student1 Block limit reached on /students/compsci |
В случае сброса квоты, и если ограничение квоты более не превышается, для обзора квоты пользователя требуется использовать команду quota -v. Пример:
# zfs set userquota@student1=10GB students/compsci # zfs userspace students/compsci TYPE NAME USED QUOTA POSIX User root 227M none POSIX User student1 455M 10G # quota student1 # quota -v student1 Disk quotas for student1 (uid 201): Filesystem usage quota limit timeleft files quota limit timeleft /students/compsci 466029 10485760 10485760 |
Настройка резервируемого пространства ZFS подразумевает распределение пространства пула, гарантированно доступного набору данных. Таким образом, зарезервировать для набора данных пространство, которое в настоящее время не доступно в пуле, невозможно. Общий объем всех указанных резервирований не может превышать объем неиспользуемого пространства в пуле. Для настройки и просмотра резервируемого пространства ZFS используются команды zfs set и zfs get. Пример:
# zfs set reservation=5G tank/home/moore # zfs get reservation tank/home/moore NAME PROPERTY VALUE SOURCE tank/home/moore reservation 5.00G local |
Настройка резервируемого пространства ZFS может повлиять на выходные данные команды zfs list. Пример:
# zfs list NAME USED AVAIL REFER MOUNTPOINT tank/home 5.00G 33.5G 8.50K /export/home tank/home/moore 15.0K 10.0G 8.50K /export/home/moore |
Обратите внимание, что система tank/home использует пространство объемом 5 ГБ, несмотря на то, что общий объем пространства, доступного для tank/home и ее дочерних элементов, значительно меньше 5 ГБ. Используемое пространство отражает пространство, зарезервированное для tank/home/moore. Настройки резервируемого пространства учитываются при отображении занятого пространства родительского набора данных и проверяются на соблюдение установленных квот и прочих резервирований.
# zfs set quota=5G pool/filesystem # zfs set reservation=10G pool/filesystem/user1 cannot set reservation for 'pool/filesystem/user1': size is greater than available space |
Набор данных может использовать больше пространства, чем определено в настройке резервируемого пространства, при условии наличия доступного незарезервированного пространства в пуле и соблюдении установленной для набора данных квоты. Пространство, зарезервированное для набора данных, не может быть занято другим набором данных.
Настройки резервируемого пространства не суммируются. Это означает, что при втором вызове команды zfs set для определения резервируемого пространства суммирование зарезервированного объема не выполняется. Напротив, вторая настройка заменяет собой первую.
# zfs set reservation=10G tank/home/moore # zfs set reservation=5G tank/home/moore # zfs get reservation tank/home/moore NAME PROPERTY VALUE SOURCE tank/home/moore reservation 5.00G local |
Свойство refreservation позволяет зарезервировать для набора данных пространство, без учета пространства, используемого снимками и клонами. Резервирование refreservation учитывается в пространстве, используемом родительскими наборами данных, и сопоставляется с квотами и резервированием для родительских наборов данных. Пример:
# zfs set refreservation=10g profs/prof1 # zfs list NAME USED AVAIL REFER MOUNTPOINT profs 10.0G 23.2G 19K /profs profs/prof1 10G 33.2G 18K /profs/prof1 |
Можно также настроить резервирование пространства для того же набора данных, чтобы гарантировать пространство для набора данных и для снимков. Пример:
# zfs set reservation=20g profs/prof1 # zfs list NAME USED AVAIL REFER MOUNTPOINT profs 20.0G 13.2G 19K /profs profs/prof1 10G 33.2G 18K /profs/prof1 |
Обычное резервирование учитывается в пространстве, используемом родительским элементом.
В приведенном выше примере команда zfs list отображает меньшую квоту (10 и 20 ГБ). Чтобы увидеть обе квоты, используйте команду zfs get. Пример:
# zfs get reservation,refreserv profs/prof1 NAME PROPERTY VALUE SOURCE profs/prof1 reservation 20G local profs/prof1 refreservation 10G local |
Если установлено свойство refreservation, то иметь снимок разрешается только при наличии в пуле достаточного свободного пространства (за пределами данного резервирования) для размещения текущего объема байт referenced в наборе данных.