Disk Quotas begrenzen den Speicherplatz, den einzelne Benutzer oder Gruppen auf einem Dateisystem verwenden können. Dies verhindert, dass einzelne Benutzer den gesamten Speicher belegen.
Quota-Konzepte
Arten von Limits
| Limit | Beschreibung | |-------|--------------| | Soft Limit | Warnung, temporär überschreitbar | | Hard Limit | Absolutes Maximum | | Grace Period | Zeit für Soft-Limit-Überschreitung |
Block vs. Inode Quotas
Block Quota: Begrenzt Speicherplatz (KB, MB, GB)
Inode Quota: Begrenzt Anzahl der DateienInstallation
Pakete installieren
# Debian/Ubuntu
apt install quota quotatool
# CentOS/RHEL
dnf install quotaKernel-Unterstützung prüfen
grep -i quota /boot/config-$(uname -r)
# CONFIG_QUOTA=y
# CONFIG_QUOTACTL=yQuota aktivieren
fstab anpassen
# /etc/fstab
# Für ext4 (User und Group Quota)
/dev/sda1 /home ext4 defaults,usrquota,grpquota 0 2
# Für XFS
/dev/sda1 /home xfs defaults,uquota,gquota 0 2
# Nur User Quota
/dev/sda1 /home ext4 defaults,usrquota 0 2Dateisystem remounten
# Remount
mount -o remount /home
# Oder Neustart
reboot
# Prüfen
mount | grep quotaQuota-Dateien erstellen (ext4)
# Quota-Dateien erstellen
quotacheck -cug /home
# Bestehende prüfen und aktualisieren
quotacheck -avug
# Optionen:
# -c Erstellen
# -u User Quota
# -g Group Quota
# -a Alle Dateisysteme
# -v VerboseQuota aktivieren
# Quota einschalten
quotaon /home
# Alle aktivieren
quotaon -a
# Status prüfen
quotaon -p /homeBenutzer-Quota setzen
Mit edquota
# Quota für Benutzer bearbeiten
edquota -u username
# Editor öffnet sich:
Disk quotas for user username (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/sda1 0 500000 1000000 0 10000 15000Werte erklärt
blocks: Aktuell verwendet (in KB)
soft: Soft Limit (in KB) - 500MB
hard: Hard Limit (in KB) - 1GB
inodes: Aktuelle Dateianzahl
soft: Soft Limit Dateien
hard: Hard Limit DateienMit setquota
# Quota setzen (Block soft/hard, Inode soft/hard)
setquota -u username 500000 1000000 10000 15000 /home
# Nur Block-Quota
setquota -u username 500000 1000000 0 0 /home
# In MB/GB (quotatool)
quotatool -u username -bq 500M -l 1G /homeQuota kopieren
# Von einem Benutzer auf andere kopieren
edquota -p template_user user1 user2 user3
# Auf alle Benutzer anwenden
edquota -p template_user $(awk -F: '$3 >= 1000 {print $1}' /etc/passwd)Gruppen-Quota
Quota für Gruppe setzen
# Mit edquota
edquota -g groupname
# Mit setquota
setquota -g groupname 5000000 10000000 50000 100000 /homeGruppen-Quota prüfen
# Quota einer Gruppe
quota -g groupname
# Alle Gruppen
repquota -g /homeGrace Period
Anzeigen
edquota -t
# Editor zeigt:
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 7daysSetzen
# Mit setquota
setquota -t 604800 604800 /home # 7 Tage in Sekunden
# Oder mit edquota -t interaktivQuota überwachen
Benutzer-Quota anzeigen
# Eigene Quota
quota
# Bestimmter Benutzer
quota -u username
# Verbose
quota -v -u usernameAlle Quotas anzeigen
# Alle User auf /home
repquota /home
# Alle Dateisysteme
repquota -a
# Nur User über Limit
repquota -a | grep -E "^\+"
# Schön formatiert
repquota -s /homeBeispiel-Ausgabe
*** Report for user quotas on device /dev/sda1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 50000 0 0 1000 0 0
user1 -- 250000 500000 1000000 5000 10000 15000
user2 +- 550000 500000 1000000 6days 8000 10000 15000XFS-spezifische Quotas
XFS Project Quotas
# /etc/fstab
/dev/sda1 /data xfs defaults,uquota,gquota,pquota 0 2Project-Quota einrichten
# Projekt-Verzeichnis definieren
echo "1:/data/projekt1" >> /etc/projects
echo "projekt1:1" >> /etc/projid
# Projekt initialisieren
xfs_quota -x -c 'project -s projekt1' /data
# Limit setzen
xfs_quota -x -c 'limit -p bsoft=1g bhard=2g projekt1' /dataXFS-Quota verwalten
# Status
xfs_quota -x -c 'report -h' /data
# User-Quota
xfs_quota -x -c 'limit -u bsoft=500m bhard=1g username' /data
# Freier Speicher
xfs_quota -x -c 'free' /dataQuota-Warnungen
Mail bei Überschreitung
# /etc/warnquota.conf
MAIL_CMD = "/usr/sbin/sendmail -t"
FROM = "quota@server.de"
SUBJECT = Disk Quota Warnung
CC_TO = "admin@server.de"
MESSAGE = Sie haben Ihr Speicherlimit überschritten.|Bitte löschen Sie Dateien.
SIGNATURE = --| Ihr Admin-TeamWarnquota ausführen
# Manuell
warnquota
# Als Cronjob
echo "0 6 * * * root /usr/sbin/warnquota" >> /etc/crontabSystemd Timer
# /etc/systemd/system/warnquota.timer
[Unit]
Description=Quota warning timer
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target# /etc/systemd/system/warnquota.service
[Unit]
Description=Check disk quotas and warn users
[Service]
Type=oneshot
ExecStart=/usr/sbin/warnquotaQuota-Skripte
Quota-Übersicht
#!/bin/bash
# quota-report.sh
echo "=== Quota-Report $(date) ==="
echo
for user in $(awk -F: '$3 >= 1000 && $3 < 65534 {print $1}' /etc/passwd); do
usage=$(quota -u "$user" 2>/dev/null | tail -1 | awk '{print $2}')
limit=$(quota -u "$user" 2>/dev/null | tail -1 | awk '{print $4}')
if [ -n "$usage" ] && [ -n "$limit" ] && [ "$limit" != "0" ]; then
percent=$((usage * 100 / limit))
printf "%-20s %8s KB / %8s KB (%3d%%)\n" "$user" "$usage" "$limit" "$percent"
fi
doneBenutzer über Limit
#!/bin/bash
# over-quota.sh
repquota -a 2>/dev/null | while read line; do
if echo "$line" | grep -q "^[a-z].*+-"; then
user=$(echo "$line" | awk '{print $1}')
echo "WARNUNG: $user ist über dem Soft-Limit!"
fi
if echo "$line" | grep -q "^[a-z].*++"; then
user=$(echo "$line" | awk '{print $1}')
echo "KRITISCH: $user ist über dem Hard-Limit!"
fi
doneQuota automatisch setzen
#!/bin/bash
# set-default-quota.sh
DEFAULT_SOFT=500000 # 500 MB
DEFAULT_HARD=1000000 # 1 GB
INODE_SOFT=10000
INODE_HARD=15000
for user in $(awk -F: '$3 >= 1000 && $3 < 65534 {print $1}' /etc/passwd); do
current=$(quota -u "$user" 2>/dev/null | tail -1 | awk '{print $3}')
if [ "$current" == "0" ]; then
echo "Setze Quota für $user"
setquota -u "$user" $DEFAULT_SOFT $DEFAULT_HARD $INODE_SOFT $INODE_HARD /home
fi
doneBest Practices
Empfohlene Limits
# Standard-Benutzer
setquota -u user 500000 1000000 10000 15000 /home
# 500 MB Soft, 1 GB Hard, 10k/15k Dateien
# Power-User
setquota -u poweruser 2000000 5000000 50000 75000 /home
# 2 GB Soft, 5 GB Hard
# Entwickler
setquota -u developer 5000000 10000000 100000 150000 /home
# 5 GB Soft, 10 GB HardGrace Period
# 7 Tage sind Standard und sinnvoll
setquota -t 604800 604800 /home
# Kürzere Grace Period für striktere Kontrolle
setquota -t 86400 86400 /home # 1 TagTroubleshooting
Quota funktioniert nicht
# Kernel-Support prüfen
grep QUOTA /boot/config-$(uname -r)
# Mount-Optionen prüfen
mount | grep quota
# Quota-Dateien neu erstellen
quotaoff /home
rm -f /home/aquota.user /home/aquota.group
quotacheck -cug /home
quotaon /home"Disk quota exceeded"
# Benutzer-Nutzung prüfen
quota -u username
# Große Dateien finden
find /home/username -type f -size +10M -exec ls -lh {} \;
# Temporäres Limit erhöhen
setquota -u username 1000000 2000000 0 0 /homeQuota nicht aktuell
# Quota-Statistik aktualisieren
quotacheck -avug
# Bei XFS
xfs_quota -x -c 'off' /data
xfs_quota -x -c 'on' /dataZusammenfassung
| Befehl | Funktion | |--------|----------| | quotaon | Quota aktivieren | | quotaoff | Quota deaktivieren | | edquota -u | User-Quota bearbeiten | | setquota | Quota per Kommando setzen | | quota -u | User-Quota anzeigen | | repquota | Quota-Report | | quotacheck | Quota-Dateien aktualisieren | | warnquota | Warnmails versenden |
| Limit-Typ | Beschreibung | |-----------|--------------| | Soft Limit | Warnung, Grace Period | | Hard Limit | Absolutes Maximum | | Block Quota | Speicherplatz | | Inode Quota | Dateianzahl |
| Dateisystem | Mount-Option | |-------------|--------------| | ext4 | usrquota, grpquota | | XFS | uquota, gquota, pquota |
Fazit
Disk Quotas sind essentiell für Shared-Hosting und Multi-User-Systeme. Die Kombination aus Soft- und Hard-Limits mit Grace Period bietet Flexibilität bei gleichzeitiger Kontrolle. Regelmäßige Reports und Warnmails helfen Benutzern, ihren Speicherverbrauch im Blick zu behalten. XFS bietet mit Project Quotas zusätzliche Möglichkeiten für Verzeichnis-basierte Limits.