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.