Quota mini-HOWTO

Ralf van Dooren r.vdooren@snow.nl

v0.5, 2003-08-09

Перевод на русский: (c) Иван Песин


Preamble: This document is written by Ralf van Dooren (r.vdooren@snow.nl). Original text and setup of this document is copyleft-ed by Albert M.C. Tam, many thanks to him for this initial mini-HOWTO. This document is licensed under the GNU Free Documentation License. Permission to use, copy, distribute this document for non-commercial purposes is hereby granted, provided that the author's / editor's name and this notice appear in all copies and/or supporting documents; that this document is not modified. This document is distributed in hope that it will be useful, but WITHOUT ANY WARRANTY, either expressed or implied. While every effort has been taken to ensure the accuracy of the information documented herein, the author / editor / maintainer assumes NO RESPONSIBILITY for errors, or for damages results for the use of the information documented herein.

Этот документ описывает работу с квотами в системе Linux, установку квот для пользователей и групп и использование дополнительных команд управления квотами. Документ предназначен для пользователей, работающих с ядрами 2.x (последняя версия ядра, на котором проверялась работа с квотами -- 2.4.21).

Присылайте коментарии и замечания мне, на адрес r.vdooren at snow.nl. Я буду признателен.

1. Что такое квота?

2. Требования для квот

3. Настройка квот: установка и конфигурация

4. Настройка квотирования: утилиты

5. Дополнительные команды квотирования


1. Что такое квота?

1.1 Для чего нужны квоты?

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

Идея квотирования заключается в ограничении дискового пространства, доступного пользователю. Тем самым пресекается его возможность занять все дисковое пространство системы. Квоты назначаются на основе пользователя и файловой системы. Если имеется более одной файловой системы, доступной пользователю, квотирование должно быть настроено на каждой из них. Для управления и автоматизации работы с квотами существует хороший набор утилит.

1.2 Текущее состояние системы квотирования на Linux

В последнее время в реализацию механизма квотирования были внесены значительные изменения. Теперь существуют два разных варианта настройки. Утилиты работают как и раньше, но есть разница в используемых файлах. Данный документ описывает настройку и работу с новым вариантом квотирования. Поскольку этот новый механизм еще не включен в ядро, нам придется его пропатчить. Мы опишем процесс установки патча и пакета linuxquota. Если у вас уже установлено ПО для квотирования, то, быть может, все равно нужно будет установить ПО, а возможно и нет. Можете написать мне, если у вас возникли вопросы. Я постараюсь позже включить в этот документ обзор дистрибутивов Linux с их реализациями квотирования.


2. Требования для квот

2.1 Ядро

Исходный код ядер 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

2.2 Программное обеспечение квот

В зависимости от используемого дистрибутива Linux у вас может быть уже установлено ПО квотирования. Программное обеспечение квотирования активно разрабатывается, а свежая версия ПО доступна на SourceForge. Домашняя страница проекта находится по адресу http://www.sourceforge.net/projects/linuxquota.


3. Настройка квот: установка и конфигурация

3.1 Патч ядра

Загрузите патч ядра :

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

3.2 Переконфигурируйте ваше ядро

Переконфигурируйте ваше ядро и добавьте поддержку квот.

С помощью `make menuconfig` или `make xconfig` найдите параметр поддержки квот в меню Filesystems. Можно, при необходимости, указать дополнительные параметры, например поддержку 32-битных UID.

Сохраните конфигурацию и скомпилируйте ядро. Убедитесь, что при загрузке будет выбрано новое ядро, поддерживающее квоты.

3.3 Скомпилируйте и установите программное обеспечение квот

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

После загрузки выполните:


$ gzip -dc <downloaded file> | tar xvf 
$ cd quota-tools  (укажите каталог, в котором находятся утилиты)
$ ./configure
$ make
$ su
# make install

3.4 Измените ваши системные стартовые скрипты для проверки и активации квот при загрузке

Вот пример:


# Проверить и активировать квоты. 
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, иначе квоты работать не будут. Я рекомендую включать квоты сразу после монтирования файловых систем в инициализационном скрипте.

3.5 Изменение /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

3.6 Активация системы квотирования

Для активации системы квотирования нужно перезагрузить систему, тогда внесенные изменения вступят в силу. Загрузится ядро с поддержкой квот и выполнятся измененные инициализационные скрипты. При первом запуске quotacheck сгенерирует необходимые файлы для поддержания баз данных квотирования.

3.7 Добавление quotacheck в crontab

Полезно регулярно выполнять quotacheck. Например, раз в неделю. Для этого добавьте следующую строку в файл crontab:


0 3 * * 0 /sbin/quotacheck -avug

4. Настройка квотирования: утилиты

Эта операция выполняется с помощью команды edquota (за подробной информацией обращайтесь к команде `man edquota`).

4.1 Назначение квоты отдельному пользователю

Рассмотрим пример. В моей системе есть пользователь с именем 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" -- общее число использованных пользователем на разделе и-нод.

4.2 Назначение квоты отдельной группе

Теперь допустим у нас имеется группа 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)

4.3 Назначение одинаковых квот большому количеству пользователей

Чтобы быстро установить квоты, скажем, для ста пользователей, равные установленной квоте для пользователя bob, я отредактирую вручную информацию bob'а, после чего выполню:


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

здесь я полагаю, что вы пользуетесь командным интерпретатором csh, а пользовательские UID начинаются со значения 500.

В дополнение к edquota существуют три термина, с которыми вам нужно познакомиться: "мягкий лимит", "жесткий лимит" и "период отсрочки" (Soft Limit, Hard Limit, Grace Period).

4.4 Мягкий лимит

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

4.5 Жесткий лимит

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

4.6 Период отсрочки

Редактируемый с помощью команды "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 неделю).


5. Дополнительные команды квотирования

5.1 Quotacheck

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

5.2 Repquota

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

5.3 Quotaon and Quotaoff

Утилита quotaon используется для включения системы квот, тогда как quotaoff для ее отключения. Фактически оба файла подобны. Они выполняются при старте и завершении работы системы.


Copyright (c) 2003, Ralf van Dooren


Вернуться на главную страницу