Disk quota - это механизм ядра Linux, позволяющий ограничивать использование дискового пространства на уровне файловой системы. Она может:
Похоже на "тарифный план" для пользователей:
"Вы можете использовать до 10 ГБ, а если превысите - получите предупреждение или блокировку".
quota| Функция | Описание |
|---|---|
| User quota | Ограничение на пользователя |
| Group quota | Ограничение на группу |
| Soft limit | Мягкий лимит: можно превысить на время (с grace period) |
| Hard limit | Жёсткий лимит: нельзя превысить ни при каких условиях |
| Block quota | Ограничение по объёму (в килобайтах) |
| Inode quota | Ограничение по количеству файлов |
quotaУстановка Ubuntu/Debian:
sudo apt install quota quotatool -y
Установка CentOS/RHEL/Fedora:
sudo yum install quota -y # или sudo dnf install quota -y
quotatool - удобная утилита для управления лимитами.
/etc/fstabОткрой файл:
sudo nano /etc/fstab
Найди строку с нужной файловой системой, например:
/dev/sda1 /home ext4 defaults 0 2
Добавь опции:
/dev/sda1 /home ext4 defaults,usrquota,grpquota 0 2
usrquota - включает пользовательские квотыgrpquota - включает групповые квотыОбычно квоты включают на
/home,/var, или отдельный раздел.
sudo mount -o remount /home
sudo quotacheck -cug /home
-c - создать новые файлы-u - пользовательские квоты-g - групповые квотыСоздастся:
aquota.user - для пользователейaquota.group - для группНа XFS используй
xfs_quota- отличается синтаксис.
sudo quotaon /home
Проверить:
sudo quotaon -p /home
Например, выделим пользователю alice лимит 5 ГБ файлового пространства на сервере
sudo edquota -u alice
Когда запускаем команду edquota -u username или смотрим repquota, то видим такую таблицу:
Filesystem blocks soft hard inodes soft hard
/dev/sda1 123456 4000000 5000000 800 0 0
Расшифровка таблицы
| Колонка | Что означает |
|---|---|
Filesystem | На каком разделе действует квота |
blocks | Сколько КБ уже используется |
soft (1) | Мягкий лимит по объёму (в КБ) |
hard (1) | Жёсткий лимит по объёму (в КБ) |
inodes | Сколько файлов уже создано |
soft (2) | Мягкий лимит по количеству файлов |
hard (2) | Жёсткий лимит по количеству файлов |
| Поле | Значение | Описание |
|---|---|---|
blocks | 123456 | Сколько килобайт сейчас использует пользователь |
soft | 4000000 | Мягкий лимит - 4 ГБ (в килобайтах) |
hard | 5000000 | Жёсткий лимит - 5 ГБ (в килобайтах) |
1 блок = 1 КБ - это единица измерения в системе квот (не путать с блоками ФС).
То есть:
4000000блоков = 4 000 000 КБ ≈ 4 ГБ5000000блоков = 5 000 000 КБ ≈ 5 ГБ
| Поле | Значение | Описание |
|---|---|---|
inodes | 800 | Сколько файлов и директорий пользователь создал |
soft | 0 | Мягкий лимит на количество inodes (0 = не ограничен) |
hard | 0 | Жёсткий лимит на количество inodes (0 = не ограничен) |
aliceХочу, чтобы alice:
Шаг 1: Запускаем редактор
sudo edquota -u alice
Шаг 2: Вводим значения
Disk quotas for user alice (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sda1 0 4000000 5000000 0 10000 12000
Разбор:
blocks: 0 - сейчас ничего не используетsoft: 4 000 000 КБ = 4 ГБhard: 5 000 000 КБ = 5 ГБinodes: 0 - пока нет файловsoft: 10 000 - мягкий лимит на количество файловhard: 12 000 - жёсткий лимит на количество файловПревысила soft limit по диску (4 ГБ):
Warning: You are over quota...Превысила hard limit (5 ГБ):
No space left on device (даже если место есть у других).Превысила inodes (12 000 файлов):
Disk quota exceeded или No space left on device.setquota (без редактора)Гораздо понятнее и удобнее для скриптов.
sudo setquota -u alice \ 4000000 5000000 \ # soft и hard по блокам (в КБ) 10000 12000 \ # soft и hard по inodes /home
# Показать квоту текущего пользователя quota # Показать всех пользователей repquota /home
Пример вывода repquota:
User usage limit limit time left count limit limit
blocks inodes
alice 3.2G 4.0G 5.0G 8500 10000 12000
setquota вместо edquota, если не любишь vi.soft + grace period - это дружелюбнее к пользователям.repquota -a - лучший способ увидеть всё сразу.Для пользователя:
quota -u alice
Для текущего пользователя:
quota
Для всех на смонтированный раздел:
repquota /home
Если пользователь превысил soft limit, у него есть время (по умолчанию 7 дней), чтобы освободить место.
Команда:
sudo edquota -t
Открывает редактор для настройки grace period (льготного периода) времени, в течение которого пользователь может превышать soft limit, не получая ошибки записи.
Grace period действует только для soft limit.
Как только grace period истекает - пользователь не сможет писать, пока не освободит место.
Запусти команду
sudo edquota -t
Откроется редактор (обычно vi, но может быть nano, зависит от системы).
Видишь примерно такой текст:
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/sda1 7days 7days
Измени значения на 3 дня. Измени строки:
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/sda1 3days 3days
Ты просто меняешь
7daysна3days
Можно писать:3 days,3day,3d- но лучше3days(без пробела, как в оригинале)
Сохрани и выйди
Если используется vi (стандартный редактор):
Esc:wq и нажми Enter => сохранит и выйдетЕсли используется nano:
Ctrl+O => Enter (сохранить)Ctrl+X => выйтиЧто изменилось? Теперь:
sudo quota -T
Или просто:
repquota -a
Вывод будет включать grace period:
Block grace time: 3days; Inode grace time: 3days
setquota -tМожно задать grace period без редактора:
sudo setquota -t 3days 3days /home
Формат:
setquota -t <block_grace> <inode_grace> <filesystem>
Это намного проще и понятнее, особенно в скриптах.
setquota# Установить grace period 3 дня для блоков и inodes на /home sudo setquota -t 3days 3days /home
Проверка:
repquota -a
Вывод команды:
Block grace time: 3days; Inode grace time: 3days
| Что | Как |
|---|---|
| Редактировать grace period | sudo edquota -t |
| Где менять? | В строке Block grace period и Inode grace period - меняй 7days на 3days |
Сохранить в vi | Esc => :wq => Enter |
Сохранить в nano | Ctrl+O, Enter, Ctrl+X |
| Проще - без редактора | sudo setquota -t 3days 3days /home |
Рекомендация Используй
setquota -t- он проще, понятнее и не зависит от редактора.
sudo quotaoff /home
На XFS используется xfs_quota, а не классические quota:
xfs_quota -x -c 'limit bsoft=4g bhard=5g alice' /home xfs_quota -c 'report' /home
xfs_quota- отдельная система, но цель та же.
| Команда | Назначение |
|---|---|
quotaon /dir | Включить квоты |
quotaoff /dir | Выключить |
quotacheck -cug /dir | Проверить и создать файлы квоты |
edquota -u user | Редактировать квоту пользователя |
setquota user soft hard isoft ihard /dir | Установить квоту |
quota | Показать свою квоту |
repquota /dir | Отчёт по всем квотам |
xfs_quota | Для XFS |
quota на /home, /var, или выделенных разделах.repquota /home/, если не уверен - лучше выделить отдельный раздел.