Квотирование
Денис Колисниченко
Во многих книгах, посвященных Linux'у, я так и не нашел подробного
описания
процесса квотирования. Максимум, что я нашел - "для ограничения дискового
пространства используется команда quota". Может быть я плохо искал,
но разбираться
пришлось самому.
Ограничение дискового пространства (квотирование) само по себе
является очень
полезной возможностью, так как жесткий диск у нас не резиновый... Это
не столь
важно при примении Linux в непрофессиональных целях, но когда вы являетесь
провайдером, значимость квот значительно возрастает.
Кстати, возможность квотирования, которая была изначально заложена
в ОС UNIX
и была реализована в самых первых ее версиях, в Windows NT появилась
только с
выходом пятой версии в 2000-м году, т.е. в Windows 2000.
Команда quota позволяет просмотреть ограничения дискового пространства
пользователя.
Ограничения, как правило, устанавливаются системным администратором.
Существуют
два типа ограничения - ограничение на количество файлов (inodes) и
ограничение использования
дискового пространства(blocks) . Если установлены оба ограничения,
то они будут использоваться
одновременно.
Ограничения на inodes и на blocks могут быть установлены как для пользователя,
так и на
группу. Если вы входите в группу, которая превысила наложенное на ее
ограничение, то
вы не сможете использовать дисковое пространство, даже если вы не превысили
квоту
как пользователь.
Для каждого ограничения характерны четыре числа:
Мягкое ограничение определяет число блоков, которые пользователь все еще
может превысить,
жесткое ограничение превысить невозможно. При попытке сделать это,
пользователь
получит сообщение об ошибке.
При истечении определенного времени (обычно 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" означает ограничение пространства для пользователей на данном устройстве,
Периодически нужно проверять содержащиеся в файле ограничений на
целостность
действительного числа блоков и файлов выделенных для пользователя.
Для этого используется
команда 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 [-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
и выберите в меню Filesystems -> Set quotas default
Здесь можно указать ограничения, которые будут использованы по умолчанию
для пользователей
или групп. Здесь можно также указать интервал времени (grace period),
по истечении которого
"мягкое" ограничение перейдет в "жесткое"
Ограничения можно задать отдельно для конкретного пользователя. Для
этого выберите в меню
программы User accounts -> User accounts и выберите пользователя, для
которого вы хотите задать
ограничения.
По умолчанию используется значение Default, т.е. для этого пользователя
будут использованы такие же
ограничения, как и для все остальных. No limit - без ограничения. Ограничения
можно задать отдельно
для разных файловых систем.
Для квотирования NFS нужно установить quota на сервере - на клиенте
она не нужна.
Клиент получит сведения об ограничениях с помощью rquotad, который
должен быть установлен
и запущен на сервере. Вам не нужно устанавливать флаги usrquota или
grpquota для монтирования
NFS-дисков. Вместо этого установите auota на своем файловом сервере
и запустите на нем из
rc-файла сервер rpc.rquotad