Speicherplatzprobleme gehören zu den häufigsten Server-Problemen. Mit den richtigen Tools lassen sich Speicherfresser schnell identifizieren und beseitigen.
df - Dateisystem-Übersicht
Grundbefehle
# Alle Dateisysteme
df
# Human-readable
df -h
# Nur lokale Dateisysteme
df -l
# Bestimmtes Dateisystem
df -h /
# Inode-Nutzung
df -i
# Dateisystem-Typ anzeigen
df -TAusgabe
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 100G 60G 35G 63% /
/dev/sdb1 ext4 500G 400G 75G 85% /data
tmpfs tmpfs 4.0G 0 4.0G 0% /dev/shmNützliche Kombinationen
# Sortiert nach Nutzung
df -h | sort -k5 -rn
# Ohne tmpfs etc.
df -h -x tmpfs -x devtmpfs -x squashfs
# Als Tabelle
df -h --output=source,size,used,avail,pcent,targetdu - Verzeichnisgrößen
Grundbefehle
# Aktuelles Verzeichnis
du -sh .
# Unterverzeichnisse
du -sh */
# Alle Dateien und Verzeichnisse
du -ah
# Mit Summe
du -shc */
# Bestimmte Tiefe
du -h --max-depth=1 /varGrößte Verzeichnisse finden
# Top 10 Verzeichnisse
du -h --max-depth=1 / 2>/dev/null | sort -hr | head -10
# Unter /var
du -h --max-depth=2 /var | sort -hr | head -20
# Nur Verzeichnisse > 1GB
du -h --threshold=1G --max-depth=2 /Größte Dateien finden
# Top 20 größte Dateien
find / -type f -exec du -h {} \; 2>/dev/null | sort -hr | head -20
# Schneller mit -size
find / -type f -size +100M 2>/dev/null
# Mit Details
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null
# In bestimmtem Verzeichnis
find /var -type f -size +50M -exec ls -lh {} \; 2>/dev/nullncdu - Interaktiv
Installation
apt install ncduVerwendung
# Aktuelles Verzeichnis
ncdu
# Bestimmtes Verzeichnis
ncdu /var
# Ohne Cross-Filesystem
ncdu -x /Navigation
↑/↓ Navigation
Enter Verzeichnis öffnen
d Datei/Verzeichnis löschen
n Nach Name sortieren
s Nach Größe sortieren
g Prozentbalken umschalten
q BeendenSpeicherfresser finden
Logs
# Log-Verzeichnis
du -sh /var/log/*
# Größte Logs
find /var/log -type f -size +100M -exec ls -lh {} \;
# Alte Logs komprimieren
gzip /var/log/syslog.1
# Logs rotieren
logrotate -f /etc/logrotate.confJournal
# Journal-Größe
journalctl --disk-usage
# Aufräumen (älter als 7 Tage)
journalctl --vacuum-time=7d
# Auf 500M begrenzen
journalctl --vacuum-size=500M
# Permanent begrenzen
# /etc/systemd/journald.conf
# SystemMaxUse=500MAPT-Cache
# Cache-Größe
du -sh /var/cache/apt/archives/
# Aufräumen
apt clean
apt autoclean
apt autoremoveDocker
# Docker-Speicher
docker system df
# Ungenutzte Ressourcen
docker system prune
# Alles (Vorsicht!)
docker system prune -a --volumesTemp-Dateien
# Temp-Verzeichnisse
du -sh /tmp /var/tmp
# Alte Temp-Dateien löschen
find /tmp -type f -mtime +7 -deleteGelöschte aber offene Dateien
# Platz wird nicht freigegeben, weil Prozess Datei offen hält
lsof +L1
# Größe anzeigen
lsof +L1 | awk '{print $7, $1, $9}'
# Prozess neustarten oder killen
systemctl restart serviceAutomatisches Aufräumen
Cleanup-Script
#!/bin/bash
# /usr/local/bin/cleanup.sh
echo "=== Disk Cleanup ==="
# Alte Logs
find /var/log -type f -name "*.log" -mtime +30 -delete
find /var/log -type f -name "*.gz" -mtime +60 -delete
# Journal
journalctl --vacuum-time=14d
# APT Cache
apt clean
# Alte Kernels (Debian)
apt autoremove --purge
# Temp
find /tmp -type f -mtime +7 -delete
find /var/tmp -type f -mtime +30 -delete
# Docker (wenn installiert)
if command -v docker &> /dev/null; then
docker system prune -f
fi
echo "=== Fertig ==="
df -h /Als Cron-Job
# /etc/cron.weekly/cleanup
0 3 * * 0 /usr/local/bin/cleanup.shMonitoring
Disk-Space-Alert
#!/bin/bash
# /usr/local/bin/disk-alert.sh
THRESHOLD=90
ALERT_EMAIL="admin@example.de"
df -h | awk -v threshold=$THRESHOLD 'NR>1 {
gsub(/%/, "", $5);
if ($5 > threshold) {
print $6 " is " $5 "% full"
}
}' | while read line; do
echo "$line" | mail -s "Disk Space Alert: $(hostname)" $ALERT_EMAIL
donePrometheus-Metriken
# node_exporter liefert automatisch:
# node_filesystem_avail_bytes
# node_filesystem_size_bytes
# node_filesystem_free_bytesZusammenfassung
| Befehl | Funktion | |--------|----------| | df -h | Dateisystem-Übersicht | | du -sh | Verzeichnisgröße | | du -h --max-depth=1 | Unterverzeichnisse | | ncdu | Interaktive Analyse | | find -size +100M | Große Dateien | | lsof +L1 | Gelöschte offene Dateien |
| Aufräumen | Befehl | |-----------|--------| | APT Cache | apt clean | | Journal | journalctl --vacuum-time=7d | | Alte Logs | find /var/log -mtime +30 -delete | | Docker | docker system prune |
| Verzeichnis | Typischer Inhalt | |-------------|------------------| | /var/log | Logs | | /var/cache | Caches | | /tmp | Temporäre Dateien | | /var/lib/docker | Docker-Daten |
Fazit
Regelmäßige Speicherplatzanalyse verhindert Probleme. ncdu ist das beste Tool für interaktive Analyse. Automatisierte Cleanup-Scripts halten das System sauber. Logs und Docker sind häufige Speicherfresser. Monitoring mit Alerts verhindert Überraschungen.