суббота, 3 марта 2007 г.

Дисковые квоты в Linux

Как известно, Linux - это многопользовательская операционная система. Это значит, что на одном компьютере могут работать несколько человек одновременно. Каждый из них имеет свою домашнюю директорию, которая находятся в разделе /home. Многие администраторы для /home создают отдельный раздел на жестком диске. Следовательно, что мы имеем? Есть отдельный раздел диска фиксированного размера и есть несколько пользователей, которые могут им пользоваться. Здесь возникает вопрос. А как разделить это пространство между всеми пользователями? Как застраховаться от ситуации, когда пользователь захочет перенести в свой раздел всю коллекцию фильмов или музыки? Для решения этой проблемы в Linux и существуют квоты.


Установка дисковых квот.

Первым делом в ядре должна быть включена поддержка квот. Если у вас ядро серии 2.6, то по умолчанию квоты включены, если - 2.4 - пересоберите ядро (посмотреть версию ядра можно командой uname -r). Для того, чтобы проделать все нижеописанное, Вам понадобится утилита quota, установленная на вашем компьютере. Бинарные пакеты существуют для всех распространенных дистрибутивов.
В Debian-производных дистрибутивах установка с помощью утилиты apt-get выглядит так:

$ sudo apt-get install quota

Все. Никаких дополнительных пакетов не требуется.

Теперь, как я уже упоминал выше, допустим, у нас есть папка /home, смонтированная на отдельном разделе жесткого диска, скажем /dev/sda8, размером 20Гб, и два пользователя - serhiy и nadiia с домашними директориями /home/serhiy/ и /home/nadiia. И что я хочу сделать? Правильно, ограничим пользователя nadiia всего 50 мегабайтами. Приступим.

1. Загрузитесь в однопользовательский режим. Поскольку директория /home будет перемонтирована, то мы должны застраховаться от того, что другие пользователи могут потерять свои данные.

#init 1

(этого можно и не делать, если вы уверены, что за компьютером больше никто кроме вас не работает)

2. Отредактируйте файл /etc/fstab/:

$sudo vi /etc/fstab/

добавив usrqouta к опциям раздела /home.
Вот так это выглядит у меня:

/dev/sda8 /home ext3 defaults,usrquota 0 2

3. Перемонтируйте раздел /home:

$ sudo mount -o remount /home

4. Создайте файлы aquota.user и/или aquota.group. Файлы должны быть созданы в самой верхней директории раздела. В нашем случае это /home. Поскольку я хочу ограничить квотами лишь пользователей, файл aquota.group я создавать не буду.

$ sudo touch /home/aquota.user
$ sudo chmod 600 /home/aquota.user

5. Разрешаем linux читать файл aquota.user. Это делается с помощью команды quotackeck. Будьте готовы к тому, что будет выведена ошибка, как показано ниже. Это связано с тем, что файл был создан вручную, а не командами qouta. Также будет сказано об отсутствии файла для групп. Ничего страшного в этом нет

$ sudo quotacheck -vagum
quotacheck: WARNING - Quotafile /home/aquota.user was probably truncated. Can't save quota settings...
quotacheck: Scanning /dev/sda8 [/home] quotacheck: Old group file not found. Usage will not be substracted.
done
quotacheck: Checked 5265 directories and 74403 files

6. Задайте квоты для пользователей, используя команду edquota

$sudo edquota -u nadiia

Эта команда запустит редактор, установленный по умолчанию (переменная EDITOR) (в моем случае это редактор mc -mcedit):

Disk quotas for user nadiia (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sda8 16 0 0 5 0 0

(Если используемый по умолчанию редактор вам не нравится, всегда можно его изменить, запустив в консоли export EDITOR=vi. Вместо vi запишите удобный для вас редактор)

В приведенном выше файле:

Blocks : Место, используемое пользователем в блоках длиной 1kB.
inodes : Число используемых пользователем файлов
Soft Limit : Максимальное количество блоков/файлов, которое пользователь может иметь на данном разделе. Если используется период отсрочки (grace period), то вместо жесткого ограничения, пользователь нарушивший данные требования, получит лишь сообщение об этом. Значение 0 отключает данную опцию.
Hard Limit : Максимальное количество блоков/файлов, которое пользователь может иметь на данном разделе даже с установленным периодом отсрочки. Это жесткое ограничение, которое пользователь не может превысить.

Ограничим пользователя всего 50-ю мегабайтами (приблизительно).

Disk quotas for user nadiia (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sda8 16 50000 0 5 0 0

7. Теперь можно выйти из однопользовательского режима (если вы работали в нем), набрав

#init 5

Все. Теперь пользователь nadiia не может превысить 50Mb.


Другие команды quota.

Изменяем период отсрочки:

$sudo edquota -t

Эта команда установит период отсрочки для всех пользователей. Период отсрочки - это период, во время которого опция soft period будет лишь предупреждать, но не ограничивать. Могут быть использованы секунды, минуты, часы, дни, недели и месяцы (нужно вписать на английском языке seconds, minutes, hours, days, weeks и months ) Так выглядит запуск этой команды у меня:

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/sda8 7days 7days

Редактирование квот для групп:

$sudo edquota -g


Регулярная проверка квот:

Полезно регулярно выполнять quotacheck. Это можно реализовать, добавив задание в файл crontab

0 3 * * 0 /sbin/quotacheck -vagu
(частоту выполнения задания можно выставить, используя синтаксис cron)

Отчет об квотах:

Команда repquota показывает суммарный отчет по квотам на файловой системе. У меня отчет выглядит следующим образом:

$ sudo repquota /home
*** Report for user quotas on device /dev/sda8
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 131312 0 0 15 0 0
serhiy -- 18774192 0 0 79512 0 0
sshd -- 14512 0 0 137 0 0
nadiia -- 16 50000 0 5 0 0


Для более подробной информации обращайтесь к страницам man. Также рекомендую почитать перевод Quota mini-HOWTO.

Источники:
Disk Quotas in GNU/Linux explained
Quota mini-HOWTO.
File system quota

22 коммент.:

Tigro комментирует...

А с reiserfs из коробки квоты кажется не работают?

serhiy cherevko комментирует...

Точно ответить не могу. Для ext3 проблем не было. Для ядра ветки 2.6 вроде уже включена поддержка квот для ext2,ext3,reiserfs и xfs.
В документации к Gentoo пишут - "Чтобы задействовать квоты для ReiserFS, необходимо наложить заплатку на ядро,которая доступна на сайте Namesys" -
ftp://ftp.namesys.com/pub/reiserfs-for-2.4/testing/quota-2.4.20

Tigro комментирует...

Для Ext2, Ext3 квоты вообще всегда поддерживались, с незапамятных времён. Для xfs в ядре я вроде бы припоминаю опции для квот. А вот Reiser. 2.4 точно нельзя было (патчи). А вот что с 2.6.

Tigro комментирует...

Вот сейчас спросил у человека, который использует Reiser, он сказал что в 2.6 квоты встроены.

serhiy cherevko комментирует...

Вот сейчас спросил у человека, который использует Reiser, он сказал что в 2.6 квоты встроены.
Вот и замечательно. Не нужно будет ставить эксперименты самому. Спасибо что сказали, а то в инете как-то все расплывчато написано.

GQ комментирует...

Для райзера в 2.4 нужен патч, в 2.6 все работает из коробки.

Насчет статьи - в сингл-юзер переходить не обязательно. Перемонтируешь каталог и все.

sudo mount /home -o remount,usrquota

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

Кстати
$ sudo touch /home/aquota.user
$ sudo chmod 600 /home/aquota.user
тоже не обязательно, АФАИР

serhiy cherevko комментирует...

В сингл-юзер я не переходил, за моим компьютером больше никто не работал. А в случае, если за компьютером работает много пользователей, то даже не знаю. Если они не почувствуют перемонтирования, значит можно и не уходить.
На следующий раз попробую без
$ sudo touch /home/aquota.user
$ sudo chmod 600 /home/aquota.user

virens комментирует...

Статья очень интересная и познавательная - большое спасибо! Теперь всё, что надо, под рукой - если что, воспользуюсь.

Andrey комментирует...

Вы забыли про ядро - в ядре ДОЛЖНА быть включена поддержка квот. Без этого нет смысла в данных утилитах.

serhiy cherevko комментирует...

Читайте комментарии выше. В ядре 2.6 квоты включены, в 2.4 нужен патч (у многих еще стоит 2.4?). У кого стоит ядро 2.4, те думаю знают как добавить патч, это опытные пользователи.

Andrey комментирует...

Что значит квоты уже включены? Вот у меня они отключены. Не нужно мне квотирование на лэптопе. А на сервере квоты я включил. Решение включать или отключать квоты принимает тот, кто компилит ядро.

serhiy cherevko комментирует...

Решение включать или отключать квоты принимает тот, кто компилит ядро.
Имелась ввиду компиляция по умолчанию. По умолчанию, при компиляции ядра ветки 2.6, квоты включены.

serhiy cherevko комментирует...

Это получается когда я буду писать статью о настройке FTP, мне тоже нужно будет написать о том, что нужно включить поддержку FTP в ядро? Исходя из этого, везде нужно упоминать о включение соответствующей возможности в ядро.

Andrey комментирует...

Нет, писать можете что хотите - блог ваш, вам и решать.

FTP в ядре - оригинально.

serhiy cherevko комментирует...

Может Вы и правы. Не стоит мне, как ведущему этот блог, так реагировать на комментарии. Действительно, лучше включить заметку о том, что квоты должны быть включены в ядре, в статью.
На счет FTP - это образно.

calibra комментирует...

Любой осмысленный текст на сайт Открытое письмо. На сайте можно отправить открытое послание президенту, премьеру, министру, любому человеку.

hosting kniga комментирует...

свободный хостинг http://hosting.miheeff.ru хостинг свободный хостинг

Игорь комментирует...

Спасибо статейка очень интересная , но вот вопрос а как сделать квоту на определенную папку (при условии что стоит веб сервер и надо юзера огарничить местом скажем в 500мб)...

Buy Viagra online комментирует...

Для Ext2, Ext3 квоты вообще всегда поддерживались, с незапамятных времён. Для xfs в ядре я вроде бы припоминаю опции для квот. А вот Reiser. 2.4 точно нельзя было (патчи). А вот что с 2.6.

Анонимный комментирует...

Here is the complete guide to create custom keyboard shortcuts for Google Chrome which you can start browsing websites on rapid speed.
Solution Options: It was decided to use a web services simulator to simulate the exact functions of
a web services backend. Best of all, the basic version
of this game is free. The main purpose of a simulator is to
understand the behavior of the system. Just attach a Joystick and pedals,
and you could have a real experience of flying a
plane.

Анонимный комментирует...

If you don't see any bugs or if you can't determine
the reason why the plant is looking sick, take a
sample in to the local county extension office. 5
will decrease the availability of lead from your soil. In some cases, the quantity of materials for making compost in the
amounts desired (an annual layer 2 inches deep across the garden) cannot be obtained.



Feel free to surf to my blog - upper

Анонимный комментирует...

Luckily, there are many methods in safely removing unwanted hair.
s Therapy Treatment line, which is a lightweight replenishing treatment that protects and maintains hair condition.

When one thinks of fungus, they don't generally associate it with the head or scalp, but the itching, burning scalp, rash or pimples on the scalp could very well be caused by a fungus, requiring antifungal shampoo to provide well needed relief to the symptoms.

Also visit my blog: hair products