r.vdooren@snow.nl
v0.5, 2003-08-09
Перевод на русский: (c) Иван Песин
Этот документ описывает работу с квотами в системе Linux, установку квот для пользователей и групп и использование дополнительных команд управления квотами. Документ предназначен для пользователей, работающих с ядрами 2.x (последняя версия ядра, на котором проверялась работа с квотами -- 2.4.21).
Присылайте коментарии и замечания мне, на адрес r.vdooren at snow.nl. Я буду признателен.
Квотирование позволяет задавать ограничения по двум параметрам дисковых хранилищ: число индексных дескрипторов, которыми может владеть пользователь или группа, и число блоков диска, доступных пользователю или группе.
Идея квотирования заключается в ограничении дискового пространства, доступного пользователю. Тем самым пресекается его возможность занять все дисковое пространство системы. Квоты назначаются на основе пользователя и файловой системы. Если имеется более одной файловой системы, доступной пользователю, квотирование должно быть настроено на каждой из них. Для управления и автоматизации работы с квотами существует хороший набор утилит.
В последнее время в реализацию механизма квотирования были внесены значительные изменения. Теперь существуют два разных варианта настройки. Утилиты работают как и раньше, но есть разница в используемых файлах. Данный документ описывает настройку и работу с новым вариантом квотирования. Поскольку этот новый механизм еще не включен в ядро, нам придется его пропатчить. Мы опишем процесс установки патча и пакета linuxquota. Если у вас уже установлено ПО для квотирования, то, быть может, все равно нужно будет установить ПО, а возможно и нет. Можете написать мне, если у вас возникли вопросы. Я постараюсь позже включить в этот документ обзор дистрибутивов Linux с их реализациями квотирования.
Исходный код ядер 2.x доступен на сайте http://www.kernel.org. Пожалуйста, для уменьшения трафика пользуйтесь ближайшим к вам зеркалом. Если у вас свежая версия утилиты tar, вы можете загрузить сжатый файл .bz2.
Разархивируйте ядро:
cd /usr/src tar jxvf /path/to/linux-2.4.21-tar.bz2 - для ядра, сжатого bzip2 - tar zxvf /path/to/linux-2.4.21-tar.gz - для ядра, сжатого gzip - ln -s /usr/src/linux-2.4.21 /usr/src/linux
В зависимости от используемого дистрибутива Linux у вас может быть уже установлено ПО квотирования. Программное обеспечение квотирования активно разрабатывается, а свежая версия ПО доступна на SourceForge. Домашняя страница проекта находится по адресу http://www.sourceforge.net/projects/linuxquota.
Загрузите патч ядра :
ftp://atrey.karlin.mff.cuni.cz/pub/local/jack/quota/.
Выберите версию вашего ядра и загрузите патч. Пропатчте ваше ядро командой 'patch'. Если для вашего ядра есть несколько патчей, обязательно накладывайте их в нужном порядке.
Вы можете использовать этот скрипт ( Я полагаю, что загруженные патчи находятся в /tmp/quota/, а ядро разархивировано в каталог /usr/src/linux) :
#!/bin/sh gunzip /tmp/quota/*.gz cd /usr/src/linux COUNT=`ls -1 /tmp/quota/*.diff | wc -l` for I in `seq 1 $COUNT` do patch -p1 < /tmp/quota/quota-2.4.21-$I-*.diff done
Переконфигурируйте ваше ядро и добавьте поддержку квот.
С помощью `make menuconfig` или `make xconfig` найдите параметр поддержки квот в меню Filesystems. Можно, при необходимости, указать дополнительные параметры, например поддержку 32-битных UID.
Сохраните конфигурацию и скомпилируйте ядро. Убедитесь, что при загрузке будет выбрано новое ядро, поддерживающее квоты.
Для того, чтобы использовать все возможности новой системы квот, вам, вероятно, будет нужно загрузить новый пакет утилит работы с квотами. Его можно загрузить по приведенному выше адресу.
После загрузки выполните:
$ gzip -dc <downloaded file> | tar xvf $ cd quota-tools (укажите каталог, в котором находятся утилиты) $ ./configure $ make $ su # make install
Вот пример:
# Проверить и активировать квоты. if [ -x /usr/sbin/quotacheck ] then echo "Checking quotas. This may take some time." /usr/sbin/quotacheck -avug echo " Done." fi if [ -x /usr/sbin/quotaon ] then echo "Turning on quota." /usr/sbin/quotaon -avug fi
Золотое правило гласит: активируйте квоты после того, как смонтируются все файловые системы из файла /etc/fstab, иначе квоты работать не будут. Я рекомендую включать квоты сразу после монтирования файловых систем в инициализационном скрипте.
Разделы, на которых еще не разрешено квотирование, выглядят примерно так:
/dev/hda1 / ext2 defaults 1 1 /dev/hda2 /usr ext2 defaults 1 1
Для того, чтобы включить поддержку квотирования на файловой системе, добавьте ключ "usrquota" в четвертое поле, содержащее слово"defaults" (за подробностями обращайтесь к man 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
Для активации системы квотирования нужно перезагрузить систему, тогда внесенные изменения вступят в силу. Загрузится ядро с поддержкой квот и выполнятся измененные инициализационные скрипты. При первом запуске quotacheck сгенерирует необходимые файлы для поддержания баз данных квотирования.
Полезно регулярно выполнять quotacheck. Например, раз в неделю. Для этого добавьте следующую строку в файл crontab:
0 3 * * 0 /sbin/quotacheck -avug
Эта операция выполняется с помощью команды edquota (за подробной информацией обращайтесь к команде `man edquota`).
Рассмотрим пример. В моей системе есть пользователь с именем bob. Команда "edquota -u bob" запустит редактор vi (или любой другой, указанный в переменной окружения $EDITOR) для редактирования квот пользователя bob на каждом разделе, для которого разрешено квотирование:
Quotas for user bob: /dev/hda3: 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" снова откроет нам редактор vi для редактирования квоты для группы 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)
Чтобы быстро установить квоты, скажем, для ста пользователей, равные установленной квоте для пользователя bob, я отредактирую вручную информацию bob'а, после чего выполню:
edquota -p bob `awk -F: '$3 > 499 {print $1}' /etc/passwd`
здесь я полагаю, что вы пользуетесь командным интерпретатором csh, а пользовательские UID начинаются со значения 500.
В дополнение к edquota существуют три термина, с которыми вам нужно познакомиться: "мягкий лимит", "жесткий лимит" и "период отсрочки" (Soft Limit, Hard Limit, Grace Period).
Мягкий лимит задает максимальное значение использования пространства файловой системы для пользователя. В комбинации с периодом отсрочки работает как граничная черта, за которой пользователь получает предупреждение о превышении своей квоты.
Жесткий лимит работает только при заданном периоде отсрочки. Он задает абсолютный максимум использования пространства файловой системы пользователем.
Редактируемый с помощью команды "edquota -t", период отсрочки -- это период времени, после которого мягкий лимит принудительно ограничивает доступное пространство файловой системы для пользователя. Интервал времени можно указывает в секундах, минутах, часах, днях, неделях и месяцах [ sec(onds), min(utes), hour(s), day(s), week(s), month(s) ]. Вот, что вы увидите в результате выполнения команды "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
Измените часть строки, содержащую "0 days" на любой подходящий вам промежуток времени. Лично я предпочитаю 7 дней (или 1 неделю).
Quotacheck используется для сканирования файловой системы на предмет ее использования и обновления файла "aquota.user", содержащего данные об использованном пользователями пространстве. Я рекомендую выполнять quotacheck при загрузке и периодически как задание для 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 для ее отключения. Фактически оба файла подобны. Они выполняются при старте и завершении работы системы.
Copyright (c) 2003, Ralf van Dooren