Дисковая квота на сервере: настройка, учет и контроль хранения

Дисковая квота на сервере: настройка, учет и контроль хранения авг, 17 2026

Однажды в 3 часа ночи телефон зазвонил. На основном продакшен-сервере закончилось место на диске. Сервис упал, база данных перестала писать логи, а пользователи начали жаловаться на ошибки. Причина оказалась банальной: один пользователь выгрузил туда 50 ГБ старых бэкапов, которые никто не удалял. Если бы была настроена дисковая квота, проблема решалась бы заранее.

Дисковая квота - это механизм файловой системы, который ограничивает количество места (в блоках) или файлов (inodes), которое может занять конкретный пользователь или группа. Это не просто «совет» системе, а жесткое или мягкое ограничение, которое предотвращает переполнение раздела и помогает рационально распределять ресурсы между пользователями.

Как работает ограничение пространства

В Linux-системах квоты работают на уровне файловой системы. Два основных формата поддерживают эту функцию нативно: XFS и файловая система с поддержкой квот через расширение quota. Также широко используется ext4 с включенными опциями квотирования при монтировании.

Существует два типа ограничений:

  • Soft limit (мягкий лимит): Пользователь может превысить этот объем, но только на определенное время (grace period). По умолчанию он составляет 7 дней. После истечения этого срока soft limit превращается в hard limit.
  • Hard limit (жесткий лимит): Максимальный объем, который нельзя превысить ни при каких обстоятельствах. Попытка записи сверх этого объема приводит к ошибке ENOSPC (No space left on device).

Кроме объема данных, контролируется количество файлов (inode quota). Это важно для случаев, когда диск пустой по объему, но заполнен миллионами мелких файлов, что также мешает работе системы.

Настройка квот на XFS и ext4

Процесс настройки немного отличается в зависимости от файловой системы, но логика остается схожей. Давайте разберем на примере XFS.

  1. Убедитесь, что квоты включены. В XFS квоты должны быть включены при создании раздела командой mkfs.xfs -q. Для существующего раздела проверить можно через xfs_info /mnt/disk.
  2. Смонтируйте раздел с опцией usrquota. Добавьте в /etc/fstab строку вида: /dev/sdb1 /data xfs defaults,usrquota 0 0. Затем перезапустите сервис mount или перемонтируйте раздел.
  3. Запустите сбор информации о квотах. Выполните команду xfs_quota -x -c 'enable' /data. Это создаст файлы квот в корневом каталоге раздела.
  4. Назначьте лимиты. Используйте утилиту xfs_quota -x -c 'limit -u username bsoft=10g bhard=12g isoft=100k ihard=120k' /data. Здесь bsoft/bhard - блоки (объем), isoft/ihard - иноды (количество файлов).

Для ext4 процесс аналогичен, но используются другие утилиты. Нужно установить пакет quota и использовать команды quotacheck, setquota и edquota. Монтирование выполняется с опциями usrquota,grpquota.

Концептуальная 3D-иллюстрация куба с блоками данных и лимитами

Учет и мониторинг использования

Настроить квоту - полдела. Главное - знать, кто сколько занимает. Без регулярного мониторинга вы можете обнаружить проблему слишком поздно, когда grace period уже истек и пользователь заблокирован от записи.

Основная команда для просмотра текущего использования в XFS:

xfs_quota -x -c 'report -h' /data

Эта команда выводит таблицу с именами пользователей, использованным объемом, установленными лимитами и статусом (OK, WARN, EXCEED). Статус WARN означает, что пользователь превысил soft limit, но еще находится в grace period.

Для автоматизации стоит настроить cron-задачу, которая еженедельно отправляет отчет администратору. Пример скрипта:

  1. Получить список пользователей со статусом WARN или EXCEED.
  2. Отфильтровать тех, у кого осталось менее 24 часов до блокировки.
  3. Отправить письмо на почту [email protected] с деталями.

Также полезно интегрировать данные о квотах в систему мониторинга, например, в Prometheus через node_exporter. Это позволит строить графики трендов потребления и прогнозировать исчерпание ресурсов за несколько недель до фактического события.

Типичные ошибки и как их избежать

Многие администраторы совершают одни и те же ошибки при внедрении квотирования. Вот самые частые из них:

  • Некорректное назначение лимитов группам. Если у пользователя есть квота и он состоит в группе с квотой, действуют более строгие из двух значений. Это часто вызывает путаницу. Лучше назначать квоты только пользователям, а группы использовать для общих каталогов без индивидуальных ограничений.
  • Игнорирование inode квот. Ограничение только по блокам оставляет лазейку. Пользователь может создать миллион файлов по 1 байт, забивая inode пространство. Всегда устанавливайте лимиты и на блоки, и на иноды.
  • Отсутствие grace period уведомления. Пользователи часто не знают, что у них есть «мягкий» лимит. Они думают, что могут писать сколько угодно, пока не получат ошибку. Настройте автоматические письма при превышении soft limit.
  • Применение квот к системным каталогам. Не ставьте квоты на /var/log или /tmp, если там пишут сервисы под разными UID. Это может сломать работу приложений. Квоты лучше применять к домашним каталогам (/home) или отдельным разделам для пользовательских данных.
Рабочее место системного администратора с клавиатурой и планшетом

Сравнение механизмов квотирования

Сравнение поддержки квот в популярных файловых системах Linux
Файловая система Поддержка квот Основные утилиты Особенности
XFS Нативная xfs_quota Быстрая работа, масштабируется на большие диски, квоты включаются при создании ФС
ext4 Через расширение quota setquota, edquota, repquota Требует запуска quotacheck после изменения лимитов, широкое распространение
Btrfs Через subvolumes btrfs quota Квоты применяются к подтомам, гибкая структура, но сложнее в управлении
ZFS Через dataset properties zfs set Quota и reservation - разные вещи, требует понимания модели ZFS

Выбор файловой системы влияет на сложность администрирования. XFS считается самым простым для работы с квотами благодаря единой утилите xfs_quota, которая выполняет все операции: включение, настройку, просмотр и изменение лимитов. В ext4 приходится комбинировать несколько инструментов, что повышает риск ошибок.

Практические советы для продуктивной среды

Если вы управляете сервером с десятками или сотнями пользователей, следуйте этим рекомендациям:

  1. Разделяйте данные по разделам. Выделите отдельный LVM-том для /home. Так, если один пользователь зальет весь диск, остальные части системы останутся работоспособными.
  2. Автоматизируйте создание аккаунтов. При добавлении нового пользователя сразу назначайте стандартную квоту. Например, 10 ГБ soft / 12 ГБ hard. Это исключит человеческий фактор.
  3. Регулярно чистите старые данные. Напишите скрипт, который будет искать файлы старше 90 дней в домашних каталогах и отправлять уведомление владельцу. Часто проблема не в новых записях, а в накоплении мусора.
  4. Документируйте политику. Разместите в корпоративном wiki информацию о том, какие лимиты установлены, что происходит при их превышении и как запросить увеличение. Прозрачность снижает нагрузку на поддержку.

Правильно настроенная дисковая квота - это не про наказание пользователей, а про предсказуемость инфраструктуры. Когда вы знаете, что ни один пользователь не сможет случайно или намеренно остановить сервис, вы спите спокойнее, а служба поддержки получает меньше тикетов.

Что произойдет, если пользователь превысит hard limit?

Запись новых данных станет невозможной. Команды создания файлов или копирования вернут ошибку No space left on device. Существующие файлы можно читать и удалять, но изменить их размер в большую сторону не получится, пока лимит не будет увеличен или часть данных удалена.

Можно ли временно отключить квоты для конкретного пользователя?

Да. В XFS это делается командой xfs_quota -x -c 'limit -u username bsoft=0 bhard=0 isoft=0 ihard=0' /mountpoint. Ноль означает отсутствие ограничения. Однако помните, что такое действие делает пользователя потенциальной угрозой для всего раздела, поэтому используйте этот метод осторожно и временно.

Влияют ли права root на дисковые квоты?

По умолчанию пользователь root (UID 0) не ограничен квотами, даже если они заданы. Это сделано для того, чтобы администратор мог выполнять обслуживание системы, даже если диск заполнен. Но можно включить проверку квот для root с помощью опции -u в некоторых версиях xfs_quota или параметром при монтировании, хотя это не рекомендуется для продакшена.

Как быстро обновляется информация об использовании места?

Информация обновляется в реальном времени при каждой операции записи. Команда xfs_quota report показывает актуальные данные на момент вызова. Задержки возникают только при чтении статистики из кеша ОС, но они измеряются миллисекундами и практически незаметны для администратора.

Стоит ли ставить квоты на виртуальных машинах?

Да, особенно если VM используют общий хранилище (SAN/NAS). Внутри гостевой ОС квоты помогают контролировать потребление каждым пользователем. На уровне гипервизора (например, KVM или VMware) также можно ограничить размер виртуального диска, но это грубый инструмент. Дисковая квота внутри ОС дает более точный контроль.