4.20 Управление дисковыми квотами

Система diskquota обеспечивает механизм для управления используемым дисковым пространством. Ограничения могут быть установлены для каждого пользователя в отдельности, для любой или для всех файловых систем. Система ограничений (quota) будет предупреждать пользователей когда они превысят свой дозволенный лимит, но будет позволять иcпользовать некоторое дополнительное пространство для текущей работы. Система ограничений (quota system) является частью ядра LINUX.

Команда quota позволяет просмотреть любые ограничения дискового пространства для каждого пользователя.

Доступны два типа ограничений , которые могут быть наложены на   пользователя, обычно если используется одно из ограничений то и второе  тоже будет использоваться. Ограничение может быть установлено как на все дисковое пространство пользователя , которое используется этим пользователем так и на число файлов (inodes) которыми он может владеть. Quota обеспечивает информацию на ограничения , которые были установлены системным администратором, на каждую из областей, которые используются в данный момент. Ограничения по inodes и block накладываются как на uid (идентификатор пользователя) так и на gid (идентификатор группы). Так если вы входите в группу, которая превысила , наложенное на нее ограничение ,то вы не сможете   использовать дисковое пространство даже если вы все еще можете использовать его как пользователь.

Существуют четыре числа для каждого ограничения:

  • используемое в данное время ограничение;
  • «мягкое» ограничение (softlimit);
  • «жесткое» ограничение (hardlimit);
  • промежуток времени , после истечения которого «мягкое» ограничение интерпретируется как «жесткое».

«Мягкое» ограничение определяет число блоков размером 1Кбайт ,которое   пользователь может немного превысить. «Жесткое» ограничение не может быть превышено ни каким образом. Если пользователь пытается превысить данное число, то он получает сообщение о невозможности сделать это. При этом ядро возвращает код ошибки EDQUOT. После того как пользователь превысит доступное для него «мягкое» ограничение (softlimit) устанавливается время , после истечения которого «мягкое» ограничение становиться «жестким» (hardlimit).   Обычно срок истечения этого периода истекает после 7 дней (1 неделя). В этот период времени пользователь может удалить ненужные ему файлы после чего он вновь может использовать «мягкое» ограничение до момента истечения   указанного промежутка времени. После истечения указанного промежутка  времени «мягкое» ограничение становиться «жестким» ограничением и у   пользователя больше нет ресурсов для создания новых файлов.

Для того чтобы установить систему ограничений дискового пространства (quota) в ОС системному администратору необходимо сделать несколько шагов:

  • выбрать файловую систему ,на которую будут накладываться   ограничения;
  • разрешить (включить) систему ограничений;
  • произвести проверку файловой системы на ограничения дискового   пространства;
  • произвести проверку ограничений дискового пространства как для   пользователей так и для групп;
  • запретить ограничения для пользователей и групп.

В первую очередь необходимо решить на какую файловую систему необходимо наложить ограничения (quotas). Чаще всего ограничения накладываются на файловую систему , в которой располагаются домашние каталоги пользователей или на файловую систем, которая смонтирована в каталог /usr и пользователи имеют право записывать на нее информацию. Для того чтобы разрешить ограничения на дисковое пространство на необходимой файловой системе вы должны отредактировать файл /etc/fstab добавив к указанной системе опции для ограничения дискового пространства (как для пользователей так и для   групп).

Отредактированный файл /etc/fstab может иметь вид:

 #
 # /etc/fstab
 #           
 /dev/hda1               /               ext2    defaults
 /dev/hda2               none            swap    sw
 /dev/hda3               /usr            ext2    defaults
 /dev/hdb1               /usr/users      ext2    defaults,usrquota,grpquota
 /dev/hdb2               /usr/src        ext2    defaults,usrquota
 none                    /proc           proc    defaults

Зарезервированное слово «usrquota» ,в поле опций, включает ограничение    дискового пространства (quotas) для пользователей (userquota) на данном устройстве. Зарезервированное слово «grpquota» включает ограничение дискового пространства для групп (groupquota) на данном устройстве. Во то время когда вы используете опции «usrquota» и «grpquota» без ‘=’ , то ваши файлы ограничений (quotafile) будут находится в корневом каталоге каждой файловой системы , в которой используются ограничения на дисковое пространство. Файл называемый   «quota.user» будет использоваться для ограничений пользователей, а файл «quota.group» будет использоваться для ограничений групп. Однако вы сами можете определить ваши файлы ограничений. Например строка   «usrquota=/usr/adm/quotasrc.user» установит файл ограничений для пользователей в каталоге /usr/adm , который будет называться «quotarc.user». Однако будьте внимательны , и отслеживайте длину строки в файле /etc/fstab (смотрите ее определение в файле mntent.h).

Периодически (в основном после некорректной перезагрузки системы и во время первого разрешения ограничений на дисковое пространство) записи, содержащиеся в файле ограничений должны быть проверены на целостность действительного числа блоков и файлов выделенных для пользователя. Для выполнения этой операции может быть использована команда quotacheck.

Данную команду необязательно выполнять для неподмонтированных файловых систем или файловых системах ,на которых отключено ограничение на дисковое пространство (quotas). Для проверки файловой системы на число блоков используемых пользователем , а так же для установки и изменения всех файлов ограничений (quotafiles) выполните команду:

quotacheck -avug.

Вы можете вставить данную команду в один из rc скриптов и запускать ее   на файловой системе так же как и fsck , только тогда , когда не установлен флаг fastreboot. Данная программа не поддерживает одновременную параллельную проверку нескольких файловых систем. Для того чтобы включить систему ограничений на дисковое пространство на вашем компьютере добавьте строку /usr/bin/quotaon -avug в один из ваших /etc/rc файлов. Данная команда будет включать поддержку ограничений дискового пространства во время загрузки вашей системы.

Только суперпользователь может использовать команду quota для проверки используемых ограничений любого пользователя , и команду repquota для проверки используемого пространства и ограничений для всех пользователей на данной файловой системе.

Для того чтобы получить информацию об ограничениях , наложенных на   всех пользователей необходимо выполнить команду:

repquota -ua

после чего на экране можно будет видеть таблицу , в которой указаны   ограничения , наложенные на каждого пользователя. Содержимое экрана после выполнения выше приведенной команды может иметь вид:

                        Block limits               File limits
User            used    soft    hard  grace    used  soft  hard  grace
root      --  487082       0       0          12147     0     0
daemon    --     399       0       0              2     0     0
news      --     626       0       0             46     0     0

Для получения информации о группах необходимо выполнить команду:

repquota -ga .

Для редактирования ограничения дискового пространства необходимо    использовать программу edquota. Для редактирования ограничений дискового пространства для конкретного пользователя необходимо использовать программу edquota с опцией -u , а для группы необходимо использовать ту же программу , но с опцией -g. Редактировать необходимо только число , которое следует за словом hard или soft.Например ,после выполнения команды:

edquota -u cola

содержимое экрана может иметь вид:

Quotas for user cola:
/dev/hdb3: blocks in use: 345, limits (soft = 1, hard = 0)
           inodes in use: 94, limits (soft = 0, hard = 0)

После чего вы можете изменит значения , указанные после слов hard и soft. При редактировании используется редактор , который указывается в переменной окружения EDITOR.

Для каждой файловой системы , имеющей ограничение на дисковое   пространство вы видите две строки. Слово soft означает что на данную   файловую систему наложено «мягкое» ограничение (softlimit) , при этом  пользователь или группа имеют некоторый интервал времени (grace period), в течении которого они могут превысить указанное значение. Данный интервал времени можно изменить с помощью команды edquota -t.

Например ,после выполнения команды:

edquota -t

содержимое экрана может иметь вид:

Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/hdb3: block grace period: 10 minutes, file grace period: 10 minutes

После чего вы можете изменить значения , указанные по умолчанию. По   умолчанию используется значение определенное в файле <LINUX quota.h>. Если пользователь или группа не удалят лишних файлов в течении указанного периода времени , то данные файлы переходят в разряд «жестких» ограничений (hardlimit).  Слово hard означает , что на данную файловую систему наложено «жесткое» ограничение. Жестко ограничение является максимальным значением , которое может иметь пользователь или группа на данной файловой системе.  Пользователь/группа не может иметь больше файлов или inodes чем указано в hard).

Строка

/dev/hdb3: blocks in use: 345, limits (soft = 1, hard = 0)

сообщает какое число блоков может быть выделено для данного   пользователя или группы.

Строка

inodes in use: 94, limits (soft = 0, hard = 0)

сообщает какое число inode (файлов, устройств, поименованных   каналов(pipes) и т.д.) может быть выделено для данного пользователя или группы.

В большинстве случаев вам приходится иметь группу пользователей,   которые должны иметь одинаковые ограничения на дисковое пространство , на указанной файловой системе. Самый быстрый путь отредактировать   ограничения на дисковое пространство для этих пользователей заключается в создании прототипа одного из пользователей или группы для всех других. Вам нужно с помощью команды:

edquota -u <имя_пользователя/группы_который_станет_прототипом>

отредактировать ограничения на дисковое пространство , после чего с   помощью команды:

edquota -p <имя_прототипа> *

отредактировать ограничения для всех оставшихся пользователей.    Например , для того чтобы в качестве ограничений дискового пространства (quota) для пользователя ola использовались ограничения , наложенные на пользователя cola вам необходимо выполнить команду:

edquota -p cola ola

Для проверки ограничений дискового пространства для пользователя и    группы используется программа quota.

Синтакс этой программы:

quota [-guqv]
quota [-qv] -u username ...
quota [-qv] -g groupname ...  

Используйте опцию -v для вывода информации о:

  • файловых системах , которые не имеют включенными ограничения на   дисковое пространство (quota);
  • файловых системах на , которых вы уже установили систему ограничения   дискового пространства , но на которых еще не занят ни один блок.

Используйте опцию -q для просмотра файловых систем , на которых   превышено значение «мягкого» (softlimit) и «жесткого» (hardlimit) ограничения.

Опция -g дает вам возможность просмотреть все ограничения , которые  наложены на группы , членом которых вы являетесь.

Например , с помощью команды:

quota -u cola  

вы можете получить информацию об ограничениях дискового пространства, которые наложены на пользователя cola. Содержимое экрана после выполнения данной команды может иметь вид:

Disk quotas for user cola (uid 1002):
 Filesystem  blocks   quota   limit   grace   files   quota   limit  grace
 /dev/hdb3     345*      1       0    none      94       0       0

Если вы захотели запретить ограничения ,наложенные на какого то   пользователя или на группу , то вам необходимо воспользоваться программой edquota для редактирования значений hard и soft. Установите эти значения в 0. После чего для данного пользователя или группы не будет существовать ограничений на дисковое пространство , и он/она сможет создавать неограниченное количество файлов (ограниченное только дисковым пространством).

Если вы нашли ошибку, выделите текст и нажмите Ctrl+Enter.