Главная | Контакты



Главная > Операционные системы > UNIX > BSD > FreeBSD

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

Впервые о выставлении квот на 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 указывает проверять квоты для пользователей или групп соответственно.



Главная > Операционные системы > UNIX > BSD > FreeBSD