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