Система квот задает каждому пользователю или группе необязательный
и обязательный лимиты использования дискового пространства.
"Жесткий" лимит не может быть превышен. Необязательный лимит превышать можно,
но появится соответствующее предостережение. Более того, пользователь не может
превышать необязательный лимит по умолчанию более одной недели:
по истечении этой недели необязательный лимит будет считаться обязательным.
Квоты запускает системный вызов
quotactl
функции имеет формат
QCMD(subcmd,type),
где значение
type
равно
USRQUOTA
или
GRPQUOTA
(значение для пользователей или групп соответственно), а параметр
subcmd
описан ниже.
Второй параметр,
special
это блочное устройство, на который накладывается квота.
Оно должно быть запущено.
Третий параметр,
id
это идентификатор пользователя или группы, на который налагается квота,
если она является соответствующей.
Четвертый параметр,
addr
это адрес структуры данных, зависящих от команды.
subcmd
может быть равен:
Q_QUOTAON
Запустить квотирование. Параметр
addr
содержит адрес строки с именем файла, где указаны
квоты файловой системы.
Q_QUOTAOFF
Остановить квотирование.
Q_GETQUOTA
Узнать лимиты и объем использованного пространства.
Параметр
addr
это указатель на структуру dqblk (заданную в
<sys/quota.h>).
Q_SETQUOTA
Задать лимиты и объем использованного пространства.
Значение параметра
addr
аналогично предыдущему.
Q_SETQLIM
Задать лимиты. Значение параметра
addr
аналогично предыдущему.
Синхронизировать данные о квотах в памяти и на диске.
Q_GETSTATS
Собрать сводные статистические данные.
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
При удачном завершении вызова возвращаемое значение равно нулю.
В случае ошибки оно равно -1, а переменной
errno
присваивается номер ошибки.
НАЙДЕННЫЕ ОШИБКИ
ENOPKG
Ядро собрано без учета поддержки квот.
EFAULT
Неправильное значение
addr.
EINVAL
Неизвестный тип квоты
type,
или блочное устройство
special
не найдено.
ENOTBLK
special
не является блочным устройством.
ENODEV
Устройство
special
не подключено к системе.
EACCES
Файл квот не является обычным файлом.
EIO
Ошибка записи информации в файл квот.
EMFILE
Слишком много открытых файлов: открыть файл квот невозможно.
EBUSY
Была задана команда
Q_QUOTAON,
а система квот уже запущена.
ESRCH
Файловой системе была задана одна из команд:
Q_GETQUOTA,
Q_SETQUOTA,
Q_SETUSE
или
Q_SETQLIM,
а в этой системе уже началось квотирование.
EPERM
Процесс не является root (для данной файловой системы), и pid была дана
команда
Q_GETQUOTA,
а pid не равен pid текущего процесса, или были заданы
команды, отличные от
Q_GETSTATS
или
Q_SYNC.