Пример работы с дисковыми квотами в Linux

Сегодня разбирался с дисковыми квотами в Linux на практике. Даже не то чтобы разбирался, а просто выполнил настройку дисковых квот и проверил как они работают. В качестве тестового сервера использовалась виртуальная Ubuntu Server 10.04. Теории здесь почти не будет - ее в интернете предостаточно. Наберите запрос дисковые квоты в Linux и получите ссылки на кучу материалов. Собственно перечитав эту “кучу”, и выполнял настройку квот, разбираясь с вопросами, которые остались для меня открытыми, после прочтения теории. Можно сказать, что это такая себе лабораторная работа по дисковым квотам :) Квоты настраивал только для пользователя. Групповые пока не трогал.

Сначала установка пакета quota:

1
$ sudo apt-get install quota

Квотирование будет установлено для LVM-раздела /dev/mapper/ubuntuserver-ftp, который монтируется в каталог /home/ftp. Для этого в файле /etc/fstab необходимо прописать дополнительные параметры монтирования. Квоты настраиваем для пользователя поэтому достаточно написать параметр usrquota. Вот как выглядит измененная строка монтирования в файле /etc/fstab:

1
/dev/mapper/ubuntuserver-ftp    /home/ftp       ext4    defaults,usrquota      0       2

После сохранения изменений в /etc/fstab нужно перемонтировать раздел:

1
$ sudo mount -o remount /home/ftp

Проверяем, что квоты включены:

1
2
$ mount
/dev/mapper/ubuntuserver-ftp on /home/ftp type ext4 (rw,usrquota)

Теперь выполняем команду для начальной инициализации квотирования:

1
2
3
$ sudo quotacheck -avuс
quotacheck: Quota for users is enabled on mountpoint /home/ftp so quotacheck might damage the file.
Please turn quotas off or use -f to force checking

Команда quotacheck также создает файлы aquota.user и aquota.group. В нашем примере будет создан только файл aquota.user, так как квоты устанавливаются только для пользователя.

Теперь можно задавать ограничения для пользователя. Для этого предназначена команда edquota. Ограничения можно задавать двух типов: “жесткие” и “мягкие”. Если задать жесткое ограничение, то пользователь не сможет использовать больший объем дискового пространства, чем ему отведено квотой. При мягком ограничении пользователь может превышать размер квоты на протяжении заданного периода времени - grace period - период отсрочки. Но как только этот период закончится - пользователь будет получать сообщения о превышении квоты и не сможет сохранять информацию на жестком диске.

Установим для пользователя user1 мягкое ограничение в 50 Мб с периодом отсрочки в 10 минут, и жесткое ограничение размером в 100 Мб. При таком квотировании пользователь user1 ни при каких обстоятельствах не сможет превысить квоту в 100 Мб, и не сможет работать с диском более 10 минут при превышении порога 50 Мб. Домашний каталог пользователя user1 находится в каталоге /home/ftp/

Посмотреть текущие ограничения для пользователя user1 можно командой quota:

1
2
$ sudo quota user1
Disk quotas for user user1 (uid 1001): none

Видим, что сейчас ограничения не заданы.

Задаем ограничения используя команду edquota:

1
$ sudo edquota -u user1

Выполнив эту команду попадаем в в текстовый редактор в котором устанавливаем ограничения на использование дискового пространства. Приводим файл к следующему виду:

1
2
3
Disk quotas for user user1 (uid 1001):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/mapper/ubuntuserver-ftp      44076          50000          100000        170        0        0

Редактируемый файла состоит из 7-ми столбцов. В нашем случае редактировать нужно третий (soft) и четвертый (hard) столбцы, задавая размер ограничений в блоках или килобайтах (1 блок = 1 килобайт).
Далее выходим из редактора, сохраняя изменения.

Устанавливаем grace period:

1
$ sudo edquota -t

Снова попадаем в редактор где нужно изменить значение столбца Block grace period, установив его в заданные 10 минут:

1
2
3
4
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
  Filesystem             Block grace period     Inode grace period
  /dev/mapper/ubuntuserver-ftp                  10minutes                  7days

Теперь заходим на тестовый сервер с помощью ssh с учетной записью user1. И заполняем файлами домашний каталог пользователя так чтобы превысить 50 Мб. После того как объем домашнего каталога пользователя user1 будет превышать 50 Мб, можно командой quota посмотреть информацию по квотам пользователя:

1
2
3
4
5
6
$ sudo quota user1
[sudo] password for igor:
Disk quotas for user user1 (uid 1001):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
/dev/mapper/ubuntuserver-ftp
                  58128*  50000  100000   00:10     174       0       0

Видим, что лимит превышен примерно на 8 Мб, но файлы можно создавать и копировать так как еще не истекло время отсрочки. В столбце grace можно увидеть, что осталось 10 мин. до того момента как пользователь не сможет создавать файлы.

Скопировав еще несколько файлов в каталог пользователя и выполнив команду quota через 6 минут, видим, что время уменьшилось и составляет всего 4 минуты:

1
2
3
4
5
$ sudo quota user1
Disk quotas for user user1 (uid 1001):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
/dev/mapper/ubuntuserver-ftp
                  65124*  50000  100000   00:04     176       0       0

После того как с момента когда был превышен soft limit, пройдет время равное grace period - пользователь user1 при попытке записать что-то в свой каталог получит отказ:

1
2
user1@ubuntuserver:~$ mkdir dir10
mkdir: невозможно создать каталог «dir10»: Превышена дисковая квота

Чтобы пользователь user1 вновь смог создавать файлы в домашнем каталоге, ему нужно освободить свой каталог от файлов, так чтобы оставшийся объем был меньше чем soft limit.

Пользователь user1 удаляет файлы:

1
$ rm -r dir[2-8]

Проверяем, что объем занимаемых файлов теперь меньше 50 Мб:

1
2
3
4
5
$ sudo quota user1
Disk quotas for user user1 (uid 1001):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
/dev/mapper/ubuntuserver-ftp
                   7036   50000  100000              15       0       0

Пользователь user1 теперь может создавать каталоги и копировать файлы снова:

1
2
$ mkdir dir1 dir2
$ cp DSL-2640U_BRU_C_RU_1.20_20090506.zip ./dir

Такой маленький период отсрочки был выбран исключительно в тестовых целях. В реальности он может быть выражен в часах, днях, месяцах.

Еще несколько команд для работы с квотами:

repquota - показывает обобщенную информация по квотам:

1
2
3
4
5
6
7
8
$ sudo repquota -a
*** Report for user quotas on device /dev/mapper/ubuntuserver-ftp
Block grace time: 00:10; 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     --    7044   50000  100000             17     0     0

Команды quotaoff - выключение квот и quotaon - включение квот.

Несколько слов о команде quotacheck -avu. Эту команду необходимо (рекомендовано) выполнять после некорректного размонтирования файловой системы. Если выполнить эту команду для работающих квот, то получим сообщение:

1
2
3
$ sudo quotacheck -avu
quotacheck: Quota for users is enabled on mountpoint /home/ftp so quotacheck might damage the file.
Please turn quotas off or use -f to force checking.

о том, что квоты включены и команда quotacheck может повредить файл. После чего рекомендуется либо отключить квоты (команда quotaoff), либо использовать команду с ключом -f:

1
2
3
4
$ sudo quotacheck -avuf
quotacheck: Scanning /dev/mapper/ubuntuserver-ftp [/home/ftp] done
quotacheck: Old group file not found. Usage will not be substracted.
quotacheck: Checked 8 directories and 12 files

Читая различные руководства и статьи по квотам в Linux - встречал во многих из них рекомендацию выполнять команду quotacheck -avu периодически, используя cron, например, но зачем это делать - я объяснения не нашел. Возможно это связано с тем, что механизм отслеживания квот может давать сбои и нужно периодически проверять его работу.

Статьи и новости схожей тематики:

Оставьте свой отзыв