Привіт! Я Kernelka. Сьогодні покажу, як увімкнути й налаштувати квоти диска в Linux для користувачів і цілих проєктів (каталогів) на XFS та EXT4, а ще — як додати автоматичну перевірку та оповіщення, щоб ви завжди тримали використання диска під контролем. Менше ручної рутини — більше спокою 🧠
Що таке квоти і навіщо вони вам
Квоти обмежують місце, яке може займати користувач, група або проєктний каталог. Ви задаєте soft-ліміт (попередження) і hard-ліміт (жорстка заборона), а також граційний період для перевищень. Це рятує сервер від випадкового «з’їдання» всього сховища одним активним акаунтом або CI-пайплайном.
Підготовка системи
1) Перевірте тип файлової системи
df -T
Нижче два сценарії — XFS і EXT4. Оберіть свій.
2) Встановіть утиліти
Debian/Ubuntu:
sudo apt update
sudo apt install -y quota quotatool xfsprogs mailutils
RHEL/CentOS/Fedora:
sudo dnf install -y quota xfsprogs mailx
Arch Linux:
sudo pacman -S --needed quota xfsprogs s-nail
Увімкнення квот у /etc/fstab
XFS
Додайте потрібні опції (для користувацьких/групових/проєктних квот відповідно): uquota, gquota, pquota. Приклад:
/dev/sdb1 /home xfs defaults,uquota,gquota,pquota 0 0
sudo mount -o remount /home
На XFS додаткова індексація не потрібна — все рахуються онлайн.
EXT4
Додайте в опції монтування usrquota,grpquota,prjquota:
/dev/sdc1 /srv/data ext4 defaults,usrquota,grpquota,prjquota 0 2
sudo mount -o remount /srv/data
Ініціалізуйте облік квот (після першого вмикання):
sudo quotacheck -cugm /srv/data
sudo quotaon -v /srv/data
Налаштування користувацьких і групових квот
XFS (xfs_quota)
Приклади для каталогу /home і групи розробників:
# користувач alice: м'який ліміт 5G, жорсткий 6G
sudo xfs_quota -x -c 'limit bsoft=5G bhard=6G user alice' /home
# група devs: м'який 20G, жорсткий 25G
sudo xfs_quota -x -c 'limit bsoft=20G bhard=25G group devs' /srv/data
EXT4 (setquota/edquota)
Ті самі обмеження на /home та /srv/data:
# користувач alice (блокові ліміти), inode-ліміти 0 = без обмеження
sudo setquota -u alice 5G 6G 0 0 /home
# група devs
sudo setquota -g devs 20G 25G 0 0 /srv/data
Перевірити звіт по квотах:
sudo repquota -as
Проєктні квоти (каталоги) на XFS та EXT4
Проєктні квоти зручно обмежують цілі каталоги незалежно від власників файлів. Працює на XFS і EXT4 (з prjquota).
# 1) Описуємо каталог-проєкт у системних файлах
echo "1001:/srv/projects/projA" | sudo tee -a /etc/projects
echo "projA:1001" | sudo tee -a /etc/projid
# 2) Ініціалізуємо проєкт (встановлює projectID і спадкування)
sudo xfs_quota -x -c 'project -s projA' /srv/projects
# 3) Задаємо ліміти для проєкту projA (50G / 60G)
sudo xfs_quota -x -c 'limit -p bsoft=50G bhard=60G projA' /srv/projects
Для нових підкаталогів у projA ліміти успадковуються автоматично.
Автоматична перевірка та оповіщення
Зробимо невеликий інструмент: скрипт перевіряє квоти та, якщо знайдені перевищення (мітки «+» у звіті), надсилає e-mail і/або Telegram-сповіщення. Це класика про автоматизація задач і дуже зручно реалізується через cron та systemd timers.
1) Скрипт моніторингу квот
sudo tee /usr/local/sbin/quota-watch.sh >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
ADMIN_EMAIL="admin@example.com" # змініть на свій e-mail
TELEGRAM_TOKEN="" # опціонально
TELEGRAM_CHAT_ID="" # опціонально
TS=$(date -Is)
REPORT=$(repquota -as 2>/dev/null || true)
# Шукаємо перевищення: позначки '+' у числах використання/лімітів
ISSUES=$(echo "$REPORT" | grep -E '[0-9]+[KMGTP]?\+' || true)
if [[ -z "$ISSUES" ]]; then
exit 0
fi
SUBJ="[quota] Перевищення квот на $(hostname) @ $TS"
BODY="Виявлено перевищення квот (див. нижче):\n\n$REPORT"
# e-mail (mail/mailx/mailutils)
if command -v mail >/dev/null; then
echo -e "$BODY" | mail -s "$SUBJ" "$ADMIN_EMAIL"
fi
# Telegram (якщо задані токен і чат)
if [[ -n "$TELEGRAM_TOKEN" && -n "$TELEGRAM_CHAT_ID" ]]; then
MSG="$(printf '%s' "$SUBJ"; printf '\n'; printf '%s' "$ISSUES" | head -n 30)"
curl -fsS -X POST \
-H 'Content-Type: application/json' \
-d "{\"chat_id\":\"$TELEGRAM_CHAT_ID\",\"text\":\"${MSG//"/\\"}\",\"disable_notification\":false}" \
"https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" >/dev/null || true
fi
EOF
sudo chmod +x /usr/local/sbin/quota-watch.sh
2) Запуск через cron
echo '15 * * * * root /usr/local/sbin/quota-watch.sh' | sudo tee /etc/cron.d/quota-watch
sudo systemctl restart cron 2>/dev/null || sudo systemctl restart crond 2>/dev/null || true
3) Або запуск через systemd timers
# unit
sudo tee /etc/systemd/system/quota-watch.service >/dev/null <<'EOF'
[Unit]
Description=Quota watch
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/quota-watch.sh
EOF
# timer (щогодини)
sudo tee /etc/systemd/system/quota-watch.timer >/dev/null <<'EOF'
[Unit]
Description=Run quota watch hourly
[Timer]
OnBootSec=5m
OnUnitActiveSec=1h
Persistent=true
[Install]
WantedBy=timers.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now quota-watch.timer
Альтернативні способи
- edquota — інтерактивне редагування квот у вашому $EDITOR. Зручно, якщо ви любите ручне налаштування.
- warnquota — відсилає e-mail користувачам, які перевищили квоту. Додайте у cron для щоденної розсилки.
- Окремі FS: у Btrfs можна використовувати qgroup, але це інша історія.
GUI-спосіб (Webmin)
Якщо вам комфортніше в браузері, Webmin має модуль Disk Quotas.
- Встановіть Webmin (Debian/Ubuntu):
wget -qO - http://www.webmin.com/jcameron-key.asc | sudo apt-key add -
echo 'deb http://download.webmin.com/download/repository sarge contrib' | sudo tee /etc/apt/sources.list.d/webmin.list
sudo apt update && sudo apt install -y webmin
- Зайдіть на https://<IP>:10000 → System → Disk Quotas, оберіть файлову систему, увімкніть та задайте ліміти для користувачів/груп/проєктів.
FAQ
1) repquota показує «No filesystems with quotas»
Перевірте опції монтування у /etc/fstab (XFS: uquota/gquota/pquota; EXT4: usrquota/grpquota/prjquota). Перемонтуйте файлову систему.
2) EXT4: quotacheck дуже довго рахує
Це очікувано на великих томах при першій ініціалізації. Заплануйте поза піковими годинами або використайте «швидкі квоти» (mount з prjquota/usrquota/grpquota на сучасних ядрах).
3) «Operation not supported»/«XFS quota not enabled»
На XFS завжди потрібні опції uquota/gquota/pquota. Перевірте dmesg і /proc/mounts.
4) Проєктні квоти на EXT4 не працюють
Переконайтеся, що додано prjquota, встановлено свіжий пакет xfsprogs (утиліта xfs_quota потрібна навіть для EXT4), і каталог ініціалізований командою project -s.
5) Чи працюють квоти всередині Docker-контейнерів?
Зазвичай ні: overlay2 не використовує класичні квоти FS. Налаштовуйте квоти на хості або використовуйте інші механізми ізоляції/лімітів.
6) Як подивитися швидкий звіт по XFS?
Спробуйте: xfs_quota -x -c "report -h" /mountpoint.
Порада від Kernelka
Зробіть невеликий дашборд або текстовий звіт, який надсилається щотижня: це 10 хвилин праці та нуль сюрпризів. Для цього якраз ідеальні bash скрипти + автоматизація задач через cron та systemd timers. Так ви завжди бачитимете тенденції використання диска і встигатимете розширювати сховище завчасно 🚨
Підсумок
- Увімкніть квоти у /etc/fstab (XFS: u/g/pquota; EXT4: usr/grp/prjquota).
- Для EXT4 один раз запустіть quotacheck і quotaon.
- Користувацькі/групові ліміти: xfs_quota (XFS) або setquota (EXT4).
- Проєктні квоти: /etc/projects, /etc/projid та xfs_quota project/limit.
- Автоматичні оповіщення: quota-watch.sh + cron або systemd timer.
- GUI-альтернатива: Webmin Disk Quotas.

Прокоментувати
На сайті відображається лише твоє ім'я та коментар. Електронна пошта зберігається виключно для зв'язку з тобою за потреби та в жодному разі не передається стороннім особам.