Quota

Что такое квотирование?

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

Текущее состояние квот в Linux

Я слышал, что поддержка квотирования встроена в ядро, начиная с версии 1.3.8x, и теперь это часть ядра 2.0.x. Если ваша система не поддерживает квотирование, я настоятельно рекомендую обновить ядро.

В настоящее время, квотирование работает только на файловой системе ext2.

Основные требования

Ядро

Исходные тексты ядра 2.x доступны на

http://sunsite.unc.edu/pub/Linux/kernel/v2.0

Программное обеспечение

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

ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/subsystems/quota/all.tar.gz.

Установка - Часть I: Настройка

Настройка ядра

Перенастройте свое ядро и добавьте туда поддержку квотирования.:

Quota support (CONFIG_QUOTA) [n] y

Установка программного обеспечения

Программное обеспечение для квотирования находится по адресу

ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/subsystems/quota/all.tar.gz

Включение квотирования во время загрузки

Далее приводится пример:

# Проверка квот и затем включение квотирования.
if [ -x /usr/sbin/quotacheck ]
then
echo "Checking quotas. This may take some time."
echo "Проверка квот. Подождите минуту..."
/usr/sbin/quotacheck -avug
echo " Ok."
fi
if [ -x /usr/sbin/quotaon ]
then
echo "Turning on quota."
echo "Включаем квоты."
/usr/sbin/quotaon -avug
fi

Золотое правило: всегда включайте квотирование после того, как файловые системы перечисленные в /etc/fstab, установлены, иначе квотирование не будет работать. Я рекомендую включать квотирование в конце скрипта загрузки системы, или, если хотите, сразу после установки файловых систем.

Изменение /etc/fstab

Разделы, на которых не включено квотирование, выглядят следующим образом:

/dev/hda1       /       ext2    defaults        1       1
/dev/hda2       /usr    ext2    defaults        1       1

Для включения поддержки квотирования, напишите "usrquota" в четвертом поле, где написано "defaults" (для выяснения подробностей прочтите руководство к fstab).

/dev/hda1       /       ext2    defaults        1       1
/dev/hda2       /usr    ext2    defaults,usrquota       1       1

Замените "usrquota" на "grpquota", если вам нужна поддержка квотирования групп пользователей в файловой системе.

/dev/hda1       /       ext2    defaults        1       1
/dev/hda2       /usr    ext2    defaults,grpquota       1       1

Если вам нужна поддержка квотирования пользователей и их групп в файловой системе, то:

/dev/hda1       /       ext2    defaults        1       1
/dev/hda2       /usr    ext2    defaults,usrquota,grpquota       1   1

Создание "quota.user" и "quota.group"

Доступ к файлам записи квот quota.user и quota.group должен иметь только пользователь с правами root

Зайдите как пользователь root. Зайдите в корневой каталог и создайте файлы quota.user и quota.group:

touch /partition/quota.user
touch /partition/quota.group
chmod 600 /partition/quota.user
chmod 600 /partition/quota.group

Перезагрузка

Теперь перезагрузите систему.

Запомните, что теперь для установления квотирования на каталоги вам потребуется произвести шаги 4, 5, и 6.

Установка - Часть II: Определение квот для пользователей и групп

Эта операция выполняется, при помощи команды edqouta (man edquota).

Перед этим я обычно запускаю команду qoutacheck с параметрами -avug, чтобы файловая система точно знала, что и кем используется. Впрочем, это не обязательный шаг, а просто привычка.

Определение квот для конкретного пользователя

Например. У меня в системе есть пользователь bob. Команда "edqouta -u bob" запускает текстовый редактор (определенный в переменной окружения $EDITOR) для редактирования квот пользователя bob для каждого раздела, на котором включено квотирование:

Quotas for user bob:
/dev/hda2: blocks in use: 2594, limits (soft = 5000, hard = 6500)
inodes in use: 356, limits (soft = 1000, hard = 1500)

"blocks in use" это общее количество блоков (килобайт), используемых пользователем на этом разделе.

"inodes in use" это общее количество файлов, принадлежащих пользователю.

Определение квот для конкретной группы

В моей системе есть группа games. "edquota -g games", снова запускает текстовый редактор для редактирования квот группы games:

        Quotas for group games:
/dev/hda4: blocks in use: 5799, limits (soft = 8000, hard = 10000)
inodes in use: 1454, limits (soft = 3000, hard = 4000)

Установка одинаковых квот для множества пользователей

Для быстрой установки квот, скажем для 100 пользователей, на те же значения, что и для пользователя bob, я должен определить ему квоты, а затем запустить:

edquota -p bob `awk -F: '$3 > 499 {print $1}' /etc/passwd`

если вы используете оболочку csh и идентификаторы пользователей (UID), то последние начинаются с 500.

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

Мягкие ограничения

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

Жесткие ограничения

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

Льготный период

Льготный период (grace period) - это количество времени после превышения мягких ограничений, в течении которого пользователю позволено использовать дисковое пространство, если оно не превышает жесткий лимит. Он определяется в секундах (seconds), минутах (minutes), часах (hours), днях (days), неделях (weeks) или месяцах (months). Проверить его можно при помощи команды "edquota -t":

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

Можете изменить число дней на любое разумное значение. Лично я использую 7 дней (или 1 неделю).

Команды

Quotacheck

Quotacheck используется для сканирования дискового пространства и обновления файла "quota.user". Я рекомендую запускать его во время загрузки системы или периодически через cron (скажем, каждую неделю).

Repquota

Repquota выводит общий отчет по квотированию файловой системы. Пример:

# repquota -a
Block limits               File limits
User            used    soft    hard  grace    used  soft  hard  grace
root      --  175419       0       0          14679     0     0
bin       --   18000       0       0            735     0     0
uucp      --     729       0       0             23     0     0
man       --      57       0       0             10     0     0
user1     --   13046   15360   19200            806  1500  2250
user2     --    2838    5120    6400            377  1000  1500

Quotaon и Quotaoff

Quotaon используется для включения подсчета квот; quotaoff для выключения. На самом деле, оба файла похожи между собой и запускаются во время запуска, и выключения системы соответственно.