Квотирование

Денис Колисниченко


Во многих книгах, посвященных Linux'у, я так и не нашел подробного описания
процесса квотирования. Максимум, что я нашел - "для ограничения дискового
пространства используется команда quota". Может быть я плохо искал, но разбираться
пришлось самому.
Ограничение дискового пространства (квотирование)  само по себе является очень
полезной возможностью, так как жесткий диск у нас не резиновый... Это не столь
важно при примении Linux в непрофессиональных целях, но когда вы являетесь
провайдером, значимость квот значительно возрастает.
Кстати, возможность квотирования, которая была изначально заложена в ОС UNIX
и была реализована в самых первых ее версиях, в Windows NT появилась только с
выходом пятой версии в 2000-м году, т.е. в Windows 2000.


Содержание:

Обзор квот.
Настройка квот
Проверка ограничений
Определение ограничений
Использование команды quota
Запрет квоты для пользователя или группы
Ограничения на сетевой файловой системе - NFS


Обзор квот.


Команда quota позволяет просмотреть ограничения дискового пространства пользователя.
Ограничения, как правило, устанавливаются системным администратором. Существуют
два типа ограничения - ограничение на количество файлов (inodes) и ограничение использования
дискового пространства(blocks) . Если установлены оба ограничения, то они будут использоваться
одновременно.
Ограничения на inodes и на blocks могут быть установлены как для пользователя, так и на
группу. Если вы входите в группу, которая превысила наложенное на ее ограничение, то
вы не сможете использовать дисковое пространство, даже если вы не превысили квоту
как пользователь.

Для каждого ограничения характерны четыре числа:

  1. ограничение, которое используется в данный момент
  2. "мягкое" ограничение (softlimit)
  3. "жесткое" ограничение (hardlimit)
  4. время, по истечении которого мягкое ограничение будет интерпретироваться как жесткое
Мягкое ограничение определяет число блоков, которые пользователь все еще может превысить,
жесткое ограничение превысить невозможно. При попытке сделать это, пользователь
получит сообщение об ошибке.

При истечении определенного времени (обычно 7 дней) мягкое ограничение переходит
в жесткое. За это время пользователь должен удалить ненужные ему файлы и после этого
он может использовать это же время мягкое ограничение.
 

Настройка квот


Для поддержки ограничений прежде всего нужно настроить ядро. Для этого нужно включить
quota support в меню Filesystem при конфигурировании ядра, а потом перекомпилировать
ядро. О конфигурировании ядра вы можете прочитать в статье "Конфигурирование ядра"

Обычно нужно перейти в каталог /usr/src/linux и выполнить команду make menuconfig
Затем введите последовательность команд make dep; make bzImage; make modules; make modules_install
Последние две нужно вводить в случае если вы хотите перекомпилировать модули.
Не забудьте ввести команду lilo. (перед этим нужно немного подправить файл /etc/lilo.conf если вы этого не сделали раньше).

Если при загрузке ядра на вы видите сообщение Turning on user and group quotas for local filesystems , значит, ваше ядро уже поддерживает квоты.

Теперь нужно определить на какую файловую систему необходимо наложить ограничения.
Обычно это /home (домашние каталоги пользователей), /usr (пользователи имеют право
записывать информацию в этот каталог) и, возможно,  /var.

Отредактируйте файл /etc/fstab

/dev/hda1          /               ext2    defaults
/dev/hda4               /home           ext2    defaults,usrquota
/dev/hda5               /usr            ext2    defaults,usrquota,grpquota
none                    /proc           proc    defaults
Слово "usrquota" означает ограничение пространства для пользователей на данном устройстве,
а "grpquota" - для групп. Если вы пишите "usrquota" ("grpquota") без "=", то файлы ограничений
находятся в корневом каталоге каждой файловой системы, для которой используются ограничения
на дисковое пространство. Обычно эти файлы называются quota.user и quota.group для квот
пользователей и для групп соответственно. Вы сами можете указать какие файлы нужно
использовать для определения квот, например "usrquota=/quotas/user.quota". Старайтесь не указывать
слишком длинный путь.
 

Проверка ограничений


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

# quotacheck -avug

В основном данную проверку нужно выполнять при некорректной перезагрузке. Вы можете
включить эту команду в один из rc-сценариев и выполнять ее также, как и fsck.

Для того, чтобы включить систему ограничений при загрузке операционной системы, добавьте
команду quotaon -avug в сценарии загрузки системы.

Только root имеет право использовать команды, связанные с квотированием. Команда quota,
как уже было выше отмечено, используется для проверки используемых ограничений любого
пользователя,  а команду repquota - для проверки используемого пространства и ограничений
для всех пользователей на данной файловой системе.
При запуске программы quotacheck -avug будут автоматически изменены файлы квот, а также
будет изменена таблица ядра. Файлы квот имеют размер 2Мб, даже если ни один из пользователей
не использует квот.

Для того, чтобы получить информацию об ограничениях, наложенных на пользователя (группу)
выполните команду repquota -ua   (repquota -ga)

                        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 
www       --     156       0       0              1     0     0 
user      +-    1024       1       0   none       1     0     0 
den       +-    1024       1       0   none      94     0     0 
operator  +-    1024       1       0   none      94     0     0 
ifmail    +-    3030       1       0   none     794     0     0 
  

Определение ограничений


Для этого существует команда edquota. Для ограничения дискового пространства пользователя
нужно использовать команду quota с параметром -u, а для определения квот для группы -
с параметром -g
После выполнения этой команды будет запущен редактор, который указан в переменной окружения
$EDITOR, для редактирования квот. Редактировать нужно только число , которое следует за
словом hard или soft.

# equota -u den
Quotas for user den:
/dev/hda4: blocks in use: 345, limits (soft = 1, hard = 0)
    inodes in use: 94, limits (soft = 0, hard = 0)

Перед выполнением этой команды выполните две эти команды:
quotacheck -u <filesystem>
quotaon -u <filesystem>

Например:
quotacheck -u /mnt/ext2
quotaon -u /mnt/ext2

Данные команды необходимы для создания файлов quota.user и quota.group
В противном случае при редактировании ограничений пользователей (групп) вы
получите сообщение о том, что данные файлы не существуют.

Для каждой файловой системы, на которую наложены квоты, вы увидите две строки. Слово
soft означает, что на данную файловую систему наложено "мягкое" ограничение, а слово "hard" -
"жесткое". При этом пользователь имеет некоторый интервал времени, по истечению которого
"мягкое" ограничение перейдет в "жесткое". Данный интервал можно изменить с помощью
команды edquota -t

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

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

Строка /dev/hda4: blocks in use: 1024, limits (soft = 1, hard = 0) определяет количество блоков,
которое может быть выделено для пользователей или группы. Обычно размер блока в
Linux составляет 1024 байт. В данном случае ограничение равно 1Мб.

Строка inodes in use: 94, limits (soft = 0, hard = 0) сообщает какое число inode (файлов, устройств,
поименованных каналов(pipes)) может быть выделено для данного пользователя или группы.

В большинстве случаев у вас есть группа пользователей, которая должна иметь одинаковые
ограничения. Самым быстрым способом редактирования ограничений в этом случае является
использование прототипа. С помощью команды
# edquota -u <пользователь/группа_который(ая)_станет_прототипом>
определить ограничения, а затем с помощью команды
# edqouta -p <прототип> пользователь
создать квоты для всех оставшихся пользователей. При этом вам не нужно редактировать
ограничения отдельно для каждого пользователя/группы.

Например, вам нужно добавить пользователя user, который будет использовать такие же
ограничения, что и пользователь den:
# edquota -p den user
 

Использование команды quota


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

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

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

Параметр -q используется для получения сведений о файловых системах, на которых превышено
значение "мягкого" ограничения.

Параметр -g предоставляет информацию об ограничениях группы, членом которой вы являетесь.

Например, можно просмотреть ограничения для пользователя user


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

Пользователь user, ограниченный также как и его прототип - пользователь den.

Если ограничения для данного пользователя не заданы, вы увидите примерно
такое сообщение: Disk quotas for user root (uid 0): none

Запрет квоты для пользователя или группы


Для этого вам нужно использовать программу edquota. Установите значение soft и hard, равное 0
Тогда данный пользователь или группа сможет использовать дисковое пространство без ограничений.
 

Редактирование квот с помощью linuxconf

Очень удобно редактировать ограничения с помощью linuxconf. Для этого запустите linuxconf
и выберите в меню Filesystems -> Set quotas default

Здесь можно указать ограничения, которые будут использованы по умолчанию для пользователей
или групп. Здесь можно также указать интервал времени (grace period), по истечении которого
"мягкое" ограничение перейдет в "жесткое"

Ограничения можно задать отдельно для конкретного пользователя. Для этого выберите в меню
программы User accounts -> User accounts и выберите пользователя, для которого вы хотите задать
ограничения.

По умолчанию используется значение Default, т.е. для этого пользователя будут использованы такие же
ограничения, как и для все остальных. No limit - без ограничения. Ограничения можно задать отдельно
для разных файловых систем.

Ограничения на сетевой файловой системе - NFS


Для квотирования NFS нужно установить quota на сервере - на клиенте она не нужна.
Клиент получит сведения об ограничениях с помощью rquotad, который должен быть установлен
и запущен на сервере. Вам не нужно устанавливать флаги usrquota или grpquota для монтирования
 NFS-дисков. Вместо этого установите auota на своем файловом сервере и запустите на нем из
rc-файла сервер rpc.rquotad


Cчетчик Linux coutner
Hosted by uCoz