В случаях использования большим количеством пользователей одной системы достаточно часто возникает вопрос, как же организовать в Linux управление квотами. Квота — это ограничение на объем дискового пространства, который может использовать пользователь или группа пользователей. Такая потребность может возникнуть, например, при организации файлового хранилища организации или при организации shared-хостинга. В операционных системах на базе ядра Linux такие ограничения реализуются достаточно просто.
Управление квотами дискового пространства осуществляется под пользователем root. Существуют два вида квот: мягкие (soft quota) и жесткие (hard quota).
Мягкая квота определяет максимальный объем дискового пространства, разрешенный квотой. При превышении квоты пользователь получает сообщение о том, что квота превышена.
Жесткая квота определяет абсолютный максимальный объем дискового пространства, который пользователь не может превышать. Пользователю не разрешено будет занять больше дискового пространства, чем определено жесткой квотой.
Установка пакета
Перед началом работы с квотами нужно установить пакет quota
apt-get install quota
Настройка файловых систем на работу с квотами
Для файловой системы, для которой мы хотим включить управление квотами, нужно указать опции монтирования usrquota и grpquota для поддержки пользовательских и групповых квот соответственно. Эти параметры нужно указать в файле /etc/fstab, например, так:
/dev/sdb1 /mnt/storage ext3 defaults,usrquota,grpquota 0 0
После указания опций надо перемонтировать файловую систему:
mount /mnt/sdb1 -o remount
После этого в корне файловой системы нужно создать файлы aquota.user и aquota.group. Это файлы базы данных квот. Создать их можно следующей командой:
quotacheck -cuvg /dev/sdb1
Опции:
-c, —create-files | Создать базу данных |
-u, —user | Проверить квоты для пользователей |
-g, —group | Проверить квоты для групп |
-v, —verbose | Выводить подробную информацию |
-a, —all | Проверить все не-NFS файловые системы |
После этого можно включить квоты
quotaon /dev/sdb1
У этой команды тоже есть опции командной строки, вот некоторые из них:
-a, —all | Включить квоты для всех файловых систем |
-f, —off | Выключить квоты |
-u, —user | Работать с пользовательскими квотами |
-g, —group | Работать с групповыми квотами |
-p, —print-state | Вывести информацию о квотах |
-v, —verbose | Выводить подробную информацию о работе |
После включения квот можно приступать к их настройке.
Управление квотами
Настройка лимитов квот (непосредственное управление квотами) производится при помощи команды edquota. Формат команды:
edquota [опции] [пользователь|группа]
Несколько опций команды edquota:
-u, —user | Редактировать пользовательские квоты |
-g, —group | Редактировать групповые квоты |
-r, —remote | Редактировать квоты на удаленной системе |
-f, —file-system=<файловая-система> | Редактировать квоты только на указанной файловой системе |
-t, —edit-period | Редактировать временные лимиты для мягких квот, которые указываются в единицах времени — минутах, секундах, и так далее |
После редактирования квот может потребоваться перезапустить сервис quota
service quota restart
Теперь давайте создадим пользователя и настроим для него квоты
# adduser user1 Adding user `user1' ... Adding new group `user1' (1003) ... Adding new user `user1' (1004) with group `user1' ... Creating home directory `/home/user1' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for user1 Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] #
Пользователь создан. Добавим для него следующие ограничения: пусть он не может использовать больше 1 мегабайта и может создать только 3 файла на файловой системе, смонтированной в /mnt/storage.
Выполним команду
edquota -u user1
В редакторе вы увидите следующее:
Disk quotas for user user1 (uid 1004): Filesystem blocks soft hard inodes soft hard /dev/sdb1 0 0 0 0 0 0
Выставим следующие значения для квот по пространству: soft — 768, hard — 1024, по inodes: soft — 2, hard — 3.
Disk quotas for user user1 (uid 1004): Filesystem blocks soft hard inodes soft hard /dev/sdb1 0 768 1024 0 2 3
И выйдем с сохранением. Теперь посмотрим, сохранились ли квоты. Залогинимся под пользователем user1 и перейдем в директорию /mnt/storage. Попробуем создать файл большого размера:
$ cd /mnt/storage $ cat /dev/urandom > file.dat sdb1: warning, user block quota exceeded. sdb1: write failed, user block limit reached. cat: write error: Disk quota exceeded
Как видите, квота пользователя исчерпана. Посмотрим, что у нас есть на дисковой системе:
$ ls -l total 1056 -rw------- 1 root root 7168 Apr 23 16:03 aquota.group -rw------- 1 root root 7168 Apr 23 15:59 aquota.user -rw-r--r-- 1 user1 user1 1044480 Apr 23 16:03 file.dat drwx------ 2 root root 16384 Apr 23 15:33 lost+found
Как видите, размер файла 1 мегабайт. Теперь надо проверить, работает ли ограничение на количество файлов. Удалим file.dat и попробуем создать четыре файла.
$ rm file.dat $ touch file1 file2 file3 file4 sdb1: warning, user file quota exceeded. sdb1: write failed, user file limit reached. touch: cannot touch `file4': Disk quota exceeded
Файл file4 мы не смогли создать, потому что сработало ограничение на количество файлов. Смотрим, какие файлы у нас есть:
$ ls -l total 32 -rw------- 1 root root 7168 Apr 23 16:07 aquota.group -rw------- 1 root root 7168 Apr 23 16:06 aquota.user -rw-r--r-- 1 user1 user1 0 Apr 23 16:07 file1 -rw-r--r-- 1 user1 user1 0 Apr 23 16:07 file2 -rw-r--r-- 1 user1 user1 0 Apr 23 16:07 file3 drwx------ 2 root root 16384 Apr 23 15:33 lost+found
Как видите, управление квотами работает.
Просмотреть установленные квоты можно при помощи команды quota. Вот несколько опций:
-u, —user | Вывод информации для пользователя |
-g, —group | Вывод информации для группы |
-v, —verbose | Вывод подробной информации |
-s, —human-readable | Вывод информации в удобном для чтения человеком виде |
-l, —local-only | Выводить информацию только по локальным файловым системам, то есть не выводить информацию о сетевых файловых системах |
Давайте посмотрим информацию для пользователя user1:
# quota -u user1 Disk quotas for user user1 (uid 1004): Filesystem blocks quota limit grace files quota limit grace /dev/sdb1 0 768 1024 3* 2 3 6days
По поводу просмотра квот есть одно замечание. Они могут не отображаться сразу после создания, пока пользователь не создал ни одного файла.
Также можно воспользоваться командой repquota для просмотра квот, которые в данный момент присутствуют в системе.
# repquota -a *** Report for user quotas on device /dev/sdb1 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 20 0 0 2 0 0 user1 -+ 0 768 1024 3 2 3 6days
У команды repquota также есть дополнительные опции командной строки.
[wysija_form id=»2″]