Linux: управление квотами дискового пространства

Linux: управление квотамиВ случаях использования большим количеством пользователей одной системы достаточно часто возникает вопрос, как же организовать в 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″]