Если постоянно не контролировать свободное пространство на дисках сервера, то рано или поздно диски переполнятся. В результате перестанут работать сервисы, и даже может получиться так, что вы не сможете подключиться к консоли сервера через SSH. Конечно, стандартные шаблоны мониторинга Zabbix для операционных систем содержат триггеры, которые сработают при опасном уменьшении свободного пространства на диске.  Однако на серверах лучше ограничивать использование файловой системы для пользователей с помощью дисковых квот. Это предотвратит переполнение всего диска, если один из пользователей запишет на диск слишком много файлов. Такая ситуация бывает, например, на серверах хостинга интернет-магазинов, импортирующих крупные каталоги товаров. В этой статье мы расскажем про настройку квот файловой системы Linux, а также про то, как организован мониторинг квот на хостинговых серверах SAAS-сервиса интернет-магазинов. Проще всего настроить использование квот, если на сервере установлена какая-нибудь панель управления, например ISPmanager или Hestia Control Panel. Если же никакая панель не используется, можно настроить квоты вручную. Если на вашем сервере установлена панель управления ISPmanager, то для включение дисковых квот достаточно установить флажок Дисковые квоты на странице Конфигурация ПО, доступную в меню Настройки (рис. 1). Возможно, вам будет полезна документация разработчика панели по настройке квот. В бесплатной панели управления Hestia Control Panel для включения квот нужно использовать плагин File System Disk Quota. Чтобы его включить, щелкните значок шестеренки справа вверху, затем щелкните кнопку Configure и раскройте блок Plugins (рис. 2). Убедитесь, что в меню File System Disk Quota выбрана строка Yes. Чтобы задавать различные квоты для разных пользователей, нужно создать необходимое количество пакетов (Package), указав в них нужные значения квот. Для добавления пакета откройте список пользователей при помощи кнопки USERS, щелкните кнопку Packages, а затем — кнопку Add Package. При добавлении пакета укажите нужное значение квоты в поле Quota (рис. 3). Далее щелкните кнопку Save для сохранения изменений. Прежде всего, обновите пакеты и установите пакет quota: Проверьте версию установленного пакета: Далее отредактируйте файл /etc/fstab при помощи любого текстового редактора, например vim: Найдите в этом файле строку раздела /, для которого нужно добавить квоты: Затем добавьте «,usrquota,grpquota» без пробела, как это показано ниже:  Сохраните файл /etc/fstab и перемонтируйте файловую систему: Убедитесь, что при монтировании файловой системы добавились нужные нам опции: Далее запустите команду quotacheck, которая создаст файлы /aquota.user и /aquota.group, предназначенные для хранения информации об ограничениях и использовании файловой системы: Проверьте, что файлы создались: Если все хорошо, включите квоты: Чтобы установить квоты, например, для пользователя quotausr, введите такую команду: Эта команда установит для пользователя quotausr квоту 100 Мбайт и лимит 120 Мбайт. Проверьте, что квота и лимит были установлены: Более подробное руководство по настройке квот вы найдете здесь. При включении квот командой quotaon на консоли может появиться следующее сообщение: Оно говорит, что вам нужно настроить так называемые журналируемые квоты. Они хороши тем, что после аварийного завершения работы ОС не нужно запускать проверку квот вручную. Для настройки журналируемых квот добавьте в файл /etc/fstab строку (без пробелов) «,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0»: Если ранее были созданы файлы /aquota.user и /aquota.group, удалите их: Перемонтируйте корневой раздел и запустите проверку квот:: При первом запуске вы получите предупреждающие сообщения, которые можно игнорировать: Далее включите квоты: Опять игнорируйте предупреждающие сообщения, но убедитесь, что квоты включены: Далее, как и при работе с обычными квотами, установите квоты для пользователя и проверьте, что они успешно установились: Вы можете также обратиться к следующей инструкции. Однако не создавайте вручную файлы  /aquota.user и /aquota.group, как там рекомендуется. Эти файлы будут созданы автоматически командой quotacheck. Чтобы проверить использование квот вручную, используйте команду repquota: Параметр -s указывает программе включить в отчет использованное дисковое пространство, а также количество индексных узлов inode. Второй параметр указывает файловую систему, для которой нужно проверить использование квот. Обратите внимание, что здесь выводятся значения для так называемой мягкой (soft) и жесткой (hard) квот.  Если будет превышено значение мягкой квоты, пользователь получит предупреждающе сообщение. Что же касается жесткой квоты, то ее значение пользователь превысить не сможет — сработает ограничение.  Команда repquota с параметрами -v и -g показывают все квоты, в том числе для групп, даже если квоты не используются: Если добавить параметр -p, то команда repquota будет показывать период времени grace, в течение которого система будет предупреждать пользователя о переполнении квоты, но не ограничивать его: Параметр -c включит кэширование. Более подробное описание параметров программы repquota можно найти здесь. Чтобы автоматически контролировать использование дисковых квот с помощью Zabbix, мы подготовили программу check_quota.pl. Эта программа не пытается отслеживать квоты для каждого пользователя. Вместо этого она получает общий список квот и определяет максимальное использование квоты в процентах по всей файловой системе. Предполагается, что если какой-либо пользователь приблизился к переполнению жесткой квоты, то системный администратор получает сообщение об этом от Zabbix. Далее он вручную с помощью панели ISPmanager проверяет "провинившегося" пользователя и увеличивает ему квоту, чтобы сайт продолжил свою работу. Если оказалось, что какой-либо сайт интернет-магазина стал занимать слишком много места на диске сервера, то нужно решить, повышать ли ему тариф за использование дискового пространства или попросить клиента удалить ненужную информацию. Возможно, придется перенести сайт на другой сервер.  Практика показала, что этот способ вполне себя оправдывает. Автоматическая обработка  переполнения квоты едва ли возможна, так как необходимо обсуждение возникшей ситуации с клиентом. В процессе инициализации программа check_quota.pl получает параметры командной строки, определяет версию ОС (Linux или FreeBSD), пути для запуска утилит zabbix_sender и repquota, а также задает параметры запуска для repquota: Для получения информации об использовании квот программа запускает утилиту repquota: Результаты обрабатываются в цикле: Максимальное значение использованной квоты, выраженной в процентах, сохраняется в переменной max_quota_use. Чтобы отправить результат, а именно максимальное значение использованной квоты на серверы Zabbix, программа запускает в цикле утилиту zabbix_sender: Отправка выполняется на серверы, адреса IP которых были заданы в командной строке при запуске программы. Программу check_quota.pl нужно запускать периодически как задание crontab с правами пользователя root: Здесь программа запускается каждые 11 минут. Вы, конечно, можете задать другой график запуска программы в зависимости от ваших потребностей. В качестве параметров программе передается список адресов IP серверов Zabbix, разделенных запятой, а также имя хоста, как оно определено на серверах Zabbix. Для программы check_quota.pl мы подготовили шаблон, который можно загрузить по этому адресу. В шаблоне определен один ключ quota.key (рис. 4). Также в этом шаблоне определены два триггера (рис. 5). Первый из этих триггеров срабатывает, когда максимальное использование квоты достигло 90% или более. Этот триггер отмечен как серьезный (High), так как переполнение квоты требует срочного вмешательства системного администратора. Второй триггер срабатывает, если данные о текущем использовании квот не поступают полтора часа или дольше. Как правило, такое бывает при неправильной настройке задания crontab или при наличии других ошибок в настройке сервера. Здесь важность не так велика (Warning), и системный администратор может действовать в плановом, а не срочном порядке.  Автор: Александр Фролов. НЛО прилетело и оставило здесь промокод для читателей нашего блога: — 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.    Маркетолог