FastNetMon

Sunday, 14 February 2010

Управление лимитами дискового пространства для пользователей на Debian Linux

Для начала пару слов о том, что такое квоты. Это способ ограничить различных linux пользователей в занимаемом ими дисковом пространстве. Квоты бывают двух типов - для пользователя (usrquota) либо для группы (grpquota). Также у квот есть два подтипа - мягкие и жесткие. Первые можно превышать (но недолго, не более 7 дней), а вот жесткие превышать нельзя в принципе. Также есть еще лимиты уровня блоков и уровня inode (ограничение на число файлов), стандартным является тот, кто уровня блоков.

Ставим необходимое ПО:
apt-get install -y quota quotatool


Теперь для раздела (ну точнее - блочного устройства), на котором нам необходимо использовать квоты нам требуется включить опцию монтирования.

Для этого открываем:
vi /etc/fstab


И ищем там нужный раздел (если их несколько - операцию необходимо проделать для всех), в моем случае он выглядел так:

/dev/md4 /backup2 ext3 defaults 0 0


И добавляем опции монтирования grpquota и usrquota:

/dev/md4 /backup2 ext3 defaults,grpquota,usrquota 0 0


Теперь перемонтируем файловые системы (если же Вы активируете квоты для /, то рекомендую перезагрузиться):

umount -a
mount -a


Теперь для каждой файловой системы непосредственно в ее точке монтирования (у меня это /backup2), где планируется использовать квоты, нам необходимо создать специальные файлы, где будут хранится данные квот.


touch /backup2/aquota.user
touch /backup2/aquota.group
chmod 600 /backup2/aquota.user /backup2/aquota.group



В итоге мы получаем следующую картину, которая свидетельствует об успешной активации квот для заданного раздела:

mount | grep md4
/dev/md4 on /backup2 type ext3 (rw,grpquota,usrquota)


Теперь загружаем модуль поддержки квот в ядро (к слову, почему v2? Ну потому, что есть v1, который оставлен для совместимости со "старым" форматом данных квот):

modprobe quota_v2


Также добавляем модуль в автозагрузку:

echo 'quota_v2' >> /etc/modules


Инициализируем систему квот:

quotacheck -vagum


В ответ будет выдано примерно следующее (на тему журналируемых квот, упомянутых ниже, можете сходить вот сюда):

quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown.
quotacheck: WARNING - Quotafile /backup2/aquota.user was probably truncated. Cannot save quota settings...
quotacheck: WARNING - Quotafile /backup2/aquota.group was probably truncated. Cannot save quota settings...
quotacheck: Scanning /dev/md3 [/backup2]
done
quotacheck: Checked 3 directories and 4 files


Теперь берем подопытного пользователя test и выставляем ему на блоки мягкий лимит в 200 мегабайт и жесткий в 250:

quotatool -u test -b -q 200M -l 250M /backup2


Если при этому вы получаете ошибку:
quotatool: Error while detecting kernel quota version: No such process


То необходимо запустить служебный демон quota:

/etc/init.d/quota start


Текущее использование же квот для определенного раздела можно посмотреть так:

repquota /backup2


Выглядит вывод так:

repquota /backup2/
*** Report for user quotas on device /dev/md4
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 202364 0 0 4 0 0
test -- 28 204800 256000 7 0 0


Также от имени захомутанного юзера можно посмотреть лимит командой:
quota


Которая откликается вот так:
quota
Disk quotas for user test (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/md4 28 204800 256000 7 0 0


Ну и теперь протестируем, попробовав загнать 260 мегабайт вместо отведенных 250:

dd if=/dev/zero of=260mb-file bs=1024 count=260216
md4: warning, user block quota exceeded.
md4: write failed, user block limit reached.
dd: writing `260mb-file': Disk quota exceeded
246493+0 records in
246492+0 records out
252407808 bytes (252 MB) copied, 0.657214 s, 384 MB/s


И теперь все последующие попытки забить место обернутся обломом:

mkdir 1
mkdir: cannot create directory `1': Disk quota exceeded


Ну вот мы и стали чуточку лучше понимать Линукс :)

Источник: http://www.debian-administration.org/articles/47 и http://learnlinux.tsf.org.za/courses/build/sys-admin/ch05s02.html

No comments :

Post a Comment

Note: only a member of this blog may post a comment.