Переход к предыдущей публикации Domain Name System (DNS) Мониторинг сетевого трафика утилитой trafshow Переход к следущей публикации

Выделение квот во FreeBSD

Воскресенье, 10 февраля, 2008 17:03:54 EET

Исправления от 23 марта, 2009 11:54:41

Выделенные сервера дешевле обычного хостинга

Disk Quota Usage Впервые о выставлении квот на FreeBSD машине я задумался когда запустил тестовый сервер, на котором было создано с десяток пользовательских аккаунтов для того, чтобы братья-товарищи имели возможность приобщаться к *nix’ам и языкам программирования. Однако многие из них вместо того, чтобы заниматься изучением shell, PHP, Perl и т.п. начали сваливать в свои домашние директории разный хлам в виде музыки, фильмов, архивов с софтом и прочим. С этим нужно было что-то делать. Скрипт для чистки домашних директорий, стартовавший по крону, прекрасно справлялся со своей задачей около недели, пока мне это в итоге не надоело…

Квоты! Их придумали как раз для того, чтобы ограничивать для пользователей и групп пользователей объем занимаемого дискового пространства. Квоты используют, пожалуй, во всех многопользовательских операционных системах (по крайней мере, в тех, что мне известны). Рассмотрим здесь, как же настроить систему под управлением FreeBSD на использование квот. Ничего сложного нет. Данный вопрос освещен в Руководстве довольно неплохо, а потому приступим к прежде всего к пересборке ядра, потому что поддержка квот во FreeBSD должна быть включена в ядро. А в GENERIC ядре данная возможность отсутствует. Для пересборки ядра с поддержкой квот следует добавить в конфигурационный файл соответствующую опцию:

   options    QUOTA

О том, как пересобирается ядро описано в этой публикации. После того, как пересоберете ядро, не спешите перегружать систему. Сначала следует отредактировать файл /etc/fstab прописав в нем поддержку квот в дополнительных опциях монтирования каждой файловой системы, для которой Вы желаете подключить квоту.

# fstab file by Daemony
#
# Device      MNTP    FS     Options                 Dump  Pass
/dev/ad0s1b   none    swap   sw                        0    0
/dev/ad0s1a   /       ufs    rw,userquota,groupquota   1    1
/dev/ad0s1d   /tmp    ufs    rw,userquota,groupquota   2    2
/dev/ad0s1e   /home   ufs    rw,userquota,groupquota   2    2
/dev/ad0s1f   /var    ufs    rw,userquota,groupquota   2    2
/dev/ad0s1g   /usr    ufs    rw,userquota,groupquota   2    2

Опция userquota дает возможность использовать квоты для пользователей. Опция groupquota - для групп пользователей. Кроме этого, следует на каждом разделе создать специальные файлы, в которых будет храниться информация о квотах. Эти файлы называются quota.user (пользовательские квоты) и quota.group (групповые квоты). Права на эти файлы должны быть установлены в 640, а владелец root:operator

# ls -la /quota* /tmp/quota* /usr/quota* /var/quota* /home/quota*
-rw-r-----  1 root  operator  ... /quota.group
-rw-r-----  1 root  operator  ... /quota.user
-rw-r-----  1 root  operator  ... /tmp/quota.group
-rw-r-----  1 root  operator  ... /tmp/quota.user
-rw-r-----  1 root  operator  ... /usr/quota.group
-rw-r-----  1 root  operator  ... /usr/quota.user
-rw-r-----  1 root  operator  ... /var/quota.group
-rw-r-----  1 root  operator  ... /var/quota.user
-rw-r-----  1 root  operator  ... /home/quota.group
-rw-r-----  1 root  operator  ... /home/quota.user

Напоследок, для подключения квот при запуске системы, добавьте в /etc/rc.conf

    enable_quotas="YES"
    check_quotas="NO"

По желанию, можно выставить check_quotas=”YES”, но иногда этот процесс (проверки квот при запуске) может занимать довольно длительное время. Теперь все готово. Перегружайте систему. При старте, на экране (и в логах) появится:

Feb  1 14:35:07 daemony kernel: Enabling quotas:
Feb  1 14:35:07 daemony kernel: done.

Если есть такое, значит все в порядке. Теперь можно заняться ограничением дискового пространства для определенных пользователей. Для работы с квотами применяются несколько утилит. Основные из них: quota, quotacheck, edquota, repquota. quota - служит для получения информации о текущем использовании квоты пользователем или группой. В простом виде каждый пользователь, чтобы узнать занимаемую им квоту, может выполнить:

$ quota
Disk quotas for user daemony (uid 1001):
Filesystem usage    quota    limit  grace files  quota  limit grace
    /tmp   1874     102400   204800        299    3000   3000
    /home  17918086 26214400 31457280      19597  500000 500000

Как это все читается? Для начала следует сказать о том, что существуют ограничения не только на используемое дисковое пространство, но и на количество файлов (инод) в конкретной файловой системе. Как известно, количество инод ограничено, а потому, чтобы не дать пользователю забить раздел огромным количеством мелких файликов ему выставляют квоту на общее число создаваемых файлов. Второе, что следует знать - квоты бывают “мягкие” (soft) и “жесткие” (hard). Soft квота может быть установлена несколько ниже значения hard квоты. При достижении пользователем soft квоты у него еще будет возможность в течении grace времени (по умолчанию семь дней) записывать файлы на диск сверх мягкой квоты. По истечении grace срока писать на диск пользователь больше ничего не сможет, пока не удалит свои файлы на жестком диске, чтобы их суммарный объем не превышал soft квоту. Если пользователь достиг hard квоты система моментально ему об этом сообщит и более записать что-либо на диск он не сможет, пока не удалит лишние файлы. Soft и hard квоты устанавливаются также и на количество файлов. В вышеприведенном примере пользователь daemony использовал на разделе /home 17918086 килобайт (~17Gb) в 19597 файлах. Установленная квота для daemony на разделе /home: 26 Gb - soft; 30Gb - hard. По количеству файлов и жесткая и мягкая квоты одинаковы - 50 тысяч файлов может быть у пользователя daemony на разделе /home. Пользователь также может проверить квоту для группы в которой он находится. Для этого следует запустить команду quota с опцией -g <имя группы>:

$ quota -g wheel
Disk quotas for group wheel (gid 0): none

Данное сообщение означает, что для группы wheel не установлено никаких квот. Командой edquota администратор может создавать/редактировать квоты. Запуская edquota c ключом -u или -g можно задавать квоты для пользователей или групп соответственно. При этом, выполнив:

# edquota -u john

у Вас откроется текстовый редактор по-умолчанию:

Quotas for user john:
/: kbytes in use: 0, limits (soft = 0, hard = 0)
        inodes in use: 0, limits (soft = 0, hard = 0)
/tmp: kbytes in use: 34, limits (soft = 1024, hard = 1024)
        inodes in use: 7, limits (soft = 100, hard = 100)
/usr: kbytes in use: 0, limits (soft = 0, hard = 0)
        inodes in use: 0, limits (soft = 0, hard = 0)
/var: kbytes in use: 14, limits (soft = 1024, hard = 1024)
        inodes in use: 1, limits (soft = 10, hard = 15)
/home: kbytes in use: 120, limits (soft = 1024, hard = 2048)
        inodes in use: 13, limits (soft = 450, hard = 500)

в котором можно внести изменения в использования квот пользователя john. Аналогично можно выполнить изменения и для квот группы. Данную команду может запускать только root. Кроме этого, у администратора есть еще один инструмент для просмотра состояния квот - repquota. Запуская repquota c ключом -u или -g, а также указывая файловую систему, по которой требуется информация, можно просмотреть состояние квот для пользователей или групп соответственно для указанной файловой системы.

# repquota -u /home
                  Block  limits          File  limits
User        used   soft    hard  grace  used soft hard grace
stan   --   6793 102400 1024000    -     485 1000 1000     -
serg   --      4  10240   10240    -       2  300  300     -
mike   --     28   1024    1024    -      12   50   50     -
peter  --  96498 307200  512000    -     199 3000 3000     -
romeo  --    834  10240   10240    -     138  500  500     -
zein   --   7298  10240   10240    -      18  200  200     -
ana    --     42      0       0    -      20    0    0     -
still  --     34      0       0    -      15    0    0     -

Если у какого-то пользователя будет превышена квота, то это будет отмечено “плюсиком”, а grace покажет сколько еще времени пользователь может превышать soft квоту:

                  Block  limits          File  limits
User        used   soft    hard  grace  used soft hard grace
...
denis  +- 442562 102400 1024000  7days  527  1200 1200     -
...

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

# quotacheck -uv /home
*** Checking user quotas for /dev/ad6s1g (/home)

Ключ -v выводит дополнительную информацию на экран. Ключ -u или -g указывает проверять квоты для пользователей или групп соответственно.

Похожие публикации

Комментариев 5

dionx 5 апреля, 2009 17:00:21 EEST .:. ID #7293 .:.

Похоже в статье упущена еще одна утилита - quotaon /mount_point
Не сразу догадался, как же заставить работать квоты

Daemony 3 апреля, 2009 21:48:01 EEST .:. ID #7219 .:.

У самбы вроде бы есть свои средства выставления квот на каталоги. На уровне UFS как установить квоты на отдельный каталог я не знаю.

В случае с самбой можно раздавать права на папки для конкретных пользователей, а уже по пользователю можно выставить квоты. Тоесть, создается share папка с назначенными правами для системного пользователя user, а потом для user задаются квоты на файловой системе, где лежит эта папка.

DionX 3 апреля, 2009 16:43:00 EEST .:. ID #7206 .:.

А возможно ли назначать квоты по каталогам? Или как можно управляться квотами на каталоги самбы?

Daemony 18 февраля, 2008 22:33:53 EET .:. ID #315 .:.

Jimm, да. Так и есть на самом деле.
То по старой привычке. ;)

Jimm 18 февраля, 2008 22:16:49 EET .:. ID #313 .:.

а помоему quota.user и quota.group файлы создавать ненужно
система их вроде сама должна создать после перезагрузки

Возник вопрос по этой теме, или есть что добавить? Говорите!

  1. Зарегистрированным пользователям вводить защитный код (captcha) не приходится.
  2. Загрузить свою аватарку Вы сможете, зарегистрировавшись на сервисе www.gravatar.com
Публикуя комментарий Вы подтверждаете, что ознакомились c Правилами и принимаете их!
HOMOSAPIENS ONLY! :)