8.22. Дисковые квоты

Проблема

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

Решение

Воспользуйтесь пакетом Linux Disk Quota. Пакет содержит ряд компонентов, включая quota, edquota, quotacheck и repquota.

Сначала отредактируйте файл /etc/fstab и выберите разделы, для которых будут установлены квоты. Квоты могут устанавливаться как для отдельных пользователей (usrquota), так и для групп (grpquota). Оба вида квот могут действовать одновременно:

/dev/hda6 / ext3 defaults 0 1
/dev/hda7 /home ext3 defaults,usrquota,grpquota 0 1

Перемонтируйте файловую систему:

# mount -o remount /home

Сценарий Quota init запускает программу quotacheck, которая анализирует систему, создаёт базу данных использования дискового пространства и создаёт файлы квот.

Затем назначьте квоты пользователям. При этом файл конфигурации откроется в редакторе по умолчанию:

# edquota -u vhenson
Disk quotas for user vhenson (uid 1550):
Filesystem blocks soft hard inodes soft hard
/dev/hda7 550466 0 0 47466 0 0

Мягкое ограничение (soft limits) предоставляет пользователю отсрочку с выдачей предупреждений, в то время как жёсткое ограничение (hard limits) вступает в силу немедленно. Чтобы задать ограничения, отредактируйте файл:

# edquota -u vhenson
Disk quotas for user vhenson (uid 1550):
Filesystem blocks soft hard inodes soft hard
/dev/hda7 550466 650000 700000 47466 0 0

Блоки всегда имеют размер 1024 байта, поэтому 650 000 блоков составляют около 665 Мбайт.

Сохраните и закройте файл. Убедитесь, что квота вступила в силу:

# quota vhenson
Disk quotas for user vhenson (uid 1550): 650000 700000

Назначение квот для групп осуществляется аналогично:

# edquota -g engineers

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

Чтобы задать отсрочку для мягких ограничений, используйте команду:

# edquota -t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/hda3 7days 7days

Один из пользователей может быть использован в качестве «прототипа» для определения квот для нового пользователя:

# edquota -p vhenson dnorth

Или сразу нескольких пользователей:

# edquota -p vhenson "awk -F: '$3 > 999 {print $1}' /etc/passwd"

Несомненно, вы захотите следить за использованием квот. Для этого используйте команду:

# repquota -a

Чтобы ограничиться конкретной файловой системой:

# repquota /home

Комментарий

Включите следующую строку в сценарий mass_useradd, после строки chmod, чтобы квота пользователя vhenson автоматически применялась для всех новых пользователей:

/usr/sbin/edquota -p vhenson $username

Команду adduser можно настроить на автоматическое назначение квот для новых пользователей, отредактировав файл adduser.conf:

QUOTAUSER="vhenson"

Пакет Quota находится в переходной фазе. Код для ядер версий 2.2 и 2.4 устарел. Если ваш дистрибутив включает «заплатку» для ядра, это облегчит задачу. Но если её нет, вам может потребоваться установить несколько «заплаток». Подробности вы найдёте в «Quota mini-HOWTO».

На момент написания книги надёжная реализация ReiserFS с поддержкой Quota существовала только в SuSE. Заплатки для других дистрибутивов можно загрузить с домашней страницы ReiserFS.

К счастью, ядро 2.6 полностью поддерживает Quota. Установите последнюю версию Quota для вашей системы. Пользователи Debian могут воспользоваться командой:

# apt-get install quota

См. также

man(1) quota, man(8) edquota, man(8) quotacheck, man(8) repquota; сценарий mass_useradd (раздел 8.17); Quota mini-HOWTO; домашняя страница проекта Quota; домашняя страница ReiserFS.