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 -T

Ausgabe

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/shm

Nü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,target

du - 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 /var

Größ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/null

ncdu - Interaktiv

Installation

apt install ncdu

Verwendung

# Aktuelles Verzeichnis
ncdu

# Bestimmtes Verzeichnis
ncdu /var

# Ohne Cross-Filesystem
ncdu -x /
↑/↓       Navigation
Enter     Verzeichnis öffnen
d         Datei/Verzeichnis löschen
n         Nach Name sortieren
s         Nach Größe sortieren
g         Prozentbalken umschalten
q         Beenden

Speicherfresser 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.conf

Journal

# 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=500M

APT-Cache

# Cache-Größe
du -sh /var/cache/apt/archives/

# Aufräumen
apt clean
apt autoclean
apt autoremove

Docker

# Docker-Speicher
docker system df

# Ungenutzte Ressourcen
docker system prune

# Alles (Vorsicht!)
docker system prune -a --volumes

Temp-Dateien

# Temp-Verzeichnisse
du -sh /tmp /var/tmp

# Alte Temp-Dateien löschen
find /tmp -type f -mtime +7 -delete

Gelö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 service

Automatisches 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.sh

Monitoring

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
done

Prometheus-Metriken

# node_exporter liefert automatisch:
# node_filesystem_avail_bytes
# node_filesystem_size_bytes
# node_filesystem_free_bytes

Zusammenfassung

| 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.