Wenn eine Linux-Festplatte voll ist, gehen Sie in dieser Reihenfolge vor. Führen Sie df -h aus, um zu sehen, welches Dateisystem bei 100 % steht. Führen Sie dann du -sh * | sort -h aus, um sich Verzeichnis für Verzeichnis nach unten zu arbeiten, bis Sie den Verursacher finden, und nutzen Sie ncdu, um ihn interaktiv zu durchsuchen. Schaffen Sie zum Schluss Platz mit journalctl --vacuum-size und docker system prune.
df -h: welches Dateisystem voll ist und ob die Inodes ausgegangen sind
df -h gibt für jedes eingehängte Dateisystem Größe, Belegung, verfügbaren Platz und Nutzung in Prozent aus, in gut lesbaren Einheiten (K, M, G). Der Befehl kommt zuerst, weil er die Frage beantwortet, die vor allem anderen zählt: Welche Partition ist voll? /home aufzuräumen ist sinnlos, wenn /var diejenige ist, die bei 100 % steht.
df -h
df -h /var
df -iWenn df -h freien Platz anzeigt, Schreibvorgänge aber trotzdem mit „No space left on device“ fehlschlagen, prüfen Sie df -i. Möglicherweise sind Ihnen wegen Millionen winziger Dateien die Inodes ausgegangen: Caches, Sessions oder Mail-Warteschlangen. In diesem Fall spielt die Größe keine Rolle. Das Problem ist die Anzahl der Dateien, suchen Sie also nach dem Verzeichnis mit den meisten Einträgen, nicht nach dem schwersten.
du -sh * | sort -h: das Verzeichnis finden, das die Festplatte füllt
du -sh * | sort -h summiert jeden Eintrag im aktuellen Verzeichnis und sortiert die Ergebnisse vom kleinsten zum größten. Der größte Übeltäter landet in der letzten Zeile, direkt über dem Prompt – mehr müssen Sie auf einem kleinen Bildschirm nicht lesen.
cd /var
sudo du -sh * | sort -h
# from root, without crossing into other filesystems
sudo du -xh --max-depth=1 / 2>/dev/null | sort -h
# include hidden files and directories
du -sh .[!.]* * | sort -hBeachten Sie drei Details. Der Glob * überspringt Dotfiles, deshalb gibt es die letzte Zeile. -x bleibt auf dem Ausgangsdateisystem und ignoriert /proc sowie Netzwerk-Mounts. 2>/dev/null blendet das Rauschen durch „Permission denied“ aus. Wiederholen Sie den Befehl jedes Mal eine Ebene tiefer, bis Sie bei der Datei angekommen sind. Alle anderen Flags sind in der Manpage von du dokumentiert.
Auf großen Festplatten kann du minutenlang laufen. Starten Sie es innerhalb von tmux: Bricht die Verbindung ab, läuft der Scan weiter, und das Ergebnis wartet auf Sie, wenn Sie sich wieder anhängen.
ncdu: eine volle Festplatte interaktiv durchsuchen
ncdu -x / scannt das Dateisystem einmal und zeigt dann einen navigierbaren, nach Größe sortierten Baum, sodass Sie du nicht mehr auf jeder Ebene erneut ausführen müssen. Installieren Sie es mit dem Paketmanager Ihrer Distribution (apt install ncdu, dnf install ncdu).
sudo ncdu -x /
sudo ncdu -x /var/libIn ncdu verwenden Sie diese Tasten:
- die Pfeiltasten, um sich zu bewegen;
- Enter, um ein Verzeichnis zu öffnen;
- den Pfeil nach links, um eine Ebene zurückzugehen;
d, um zu löschen (mit Rückfrage);q, um zu beenden.
Auf dem Smartphone hängt alles davon ab, Pfeiltasten und Esc griffbereit zu haben. Die eigene Tastatur von termi1 enthält sie, dazu Strg, Tab und Bild↑/Bild↓, um durch lange Listen zu blättern.
Gelöschte Dateien, die die Festplatte weiter füllen: lsof +L1
Liegt die Summe von du deutlich unter dem, was df als belegt meldet, hält ein Prozess eine gelöschte Datei offen. Der klassische Fall ist ein Log, das mit rm entfernt wurde, während der Dienst noch hineinschrieb. Der Platz wird erst freigegeben, wenn dieser Dateideskriptor geschlossen wird.
sudo lsof +L1
# restart the service holding it, or empty the descriptor:
sudo truncate -s 0 /proc/PID/fd/NDie Regel ist einfach: Um ein Log zu leeren, das in Gebrauch ist, verwenden Sie truncate -s 0 file, nicht rm.
journalctl --vacuum: systemd-Logs verkleinern, die /var füllen
journalctl --disk-usage meldet, wie viel Platz das systemd-Journal belegt. Die Optionen --vacuum-size und --vacuum-time löschen die ältesten archivierten Journal-Dateien, bis das von Ihnen gesetzte Limit eingehalten wird.
journalctl --disk-usage
sudo journalctl --vacuum-size=500M
sudo journalctl --vacuum-time=2weeksEin Vacuum ist eine einmalige Maßnahme. Damit das Problem nicht wiederkehrt, setzen Sie SystemMaxUse= in /etc/systemd/journald.conf und starten systemd-journald neu.
docker system prune: den von Docker belegten Platz zurückgewinnen
docker system df schlüsselt den Platz auf, den Images, Container, Volumes und Build-Cache belegen. Führen Sie es aus, bevor Sie irgendetwas löschen, damit Sie wissen, wo der Großteil tatsächlich liegt.
docker system df
docker system prune
docker system prune -a --volumesOhne Flags entfernt docker system prune gestoppte Container, ungenutzte Netzwerke, verwaiste (dangling) Images und den Build-Cache. -a entfernt zusätzlich jedes Image, das von keinem Container verwendet wird. --volumes löscht ungenutzte Volumes, und deren Daten gleich mit. Lesen Sie auf Produktionshosts die Ausgabe von docker system df -v, bevor Sie dieses Flag hinzufügen.
df vs. du vs. ncdu zur Diagnose einer vollen Festplatte
| Werkzeug | Was es misst | Wann man es einsetzt | Einschränkung |
|---|---|---|---|
df -h | Belegung pro eingehängtem Dateisystem | Erster Schritt: herausfinden, welche Partition voll ist | Zeigt nicht, welches Verzeichnis den Platz belegt |
du -sh * | sort -h | Größe jedes Eintrags im aktuellen Verzeichnis | Server ohne zusätzliche Pakete; leicht lesbare Ausgabe | Muss pro Ebene wiederholt werden; überspringt Dotfiles |
ncdu -x / | Vollständiger, nach Größe sortierter Baum | Interaktives Durchsuchen und Löschen mit Bestätigung | Muss installiert werden; benötigt Pfeiltasten |
lsof +L1 | Gelöschte, aber noch offen gehaltene Dateien | Wenn df und du nicht übereinstimmen | Findet sie nur; gibt keinen Platz frei |
Eine volle Festplatte vom Smartphone aus mit termi1 aufräumen
Alarme wegen voller Festplatten schlagen gern zu ungünstigen Zeiten an, daher lohnt es sich, sie sicher vom Smartphone aus zu beheben. Bevor Sie ein Log kürzen, das Sie später noch brauchen könnten, laden Sie es per SFTP herunter: termi1 hat SFTP integriert, ohne dass Sie die Sitzung verlassen müssen. Mosh hält die Verbindung aufrecht, wenn Sie vom WLAN zu mobilen Daten wechseln, und tmux lässt ein langes du weiterlaufen, auch wenn Sie die App schließen.
Die KI von termi1 verwandelt einen Satz wie „welche Verzeichnisse in /var belegen den meisten Platz“ in den passenden Befehl und tippt ihn am Prompt ein, ohne Enter zu drücken. Bei als Produktion markierten Verbindungen hält Production Guard alles zurück, was löscht, etwa docker system prune oder journalctl --vacuum-size, bevor es den Prompt erreicht. Das Terminal ist kostenlos als SSH-Terminal bei Google Play erhältlich. Weitere Anleitungen finden Sie im technischen Blog von termi1.
Häufig gestellte Fragen
Warum melden df und du unterschiedliche Größen?
df und du weichen ab, weil df die Belegung des Dateisystems ausliest, während du die Dateien addiert, die es finden kann. Hält ein Prozess eine gelöschte Datei offen, zählt df sie mit, du jedoch nicht. Führen Sie sudo lsof +L1 aus, um sie zu finden, und starten Sie den Dienst neu, der sie festhält.
Ist docker system prune auf einem Server sicher?
docker system prune ohne Flags entfernt nur gestoppte Container, ungenutzte Netzwerke, verwaiste Images und den Build-Cache. Riskant wird es mit -a, das Images ohne Container löscht, und vor allem mit --volumes, das die Daten in ungenutzten Volumes vernichtet. Prüfen Sie zuerst docker system df.
Wie beziehe ich versteckte Dateien in du -sh ein?
Damit du -sh versteckte Dateien einbezieht, ergänzen Sie den Glob um das Muster .[!.]*: du -sh .[!.]* * | sort -h. Das Sternchen der Shell expandiert keine Namen, die mit einem Punkt beginnen, daher können Verzeichnisse wie .cache oder .local in den Summen fehlen und unbemerkt bleiben.
Wie verhindere ich, dass journald die Festplatte erneut füllt?
Um journald dauerhaft zu begrenzen, setzen Sie SystemMaxUse= in /etc/systemd/journald.conf auf die gewünschte Maximalgröße und starten anschließend systemd-journald neu. journalctl --vacuum-size räumt nur einmal auf; das Limit in der Konfigurationsdatei verhindert, dass das Journal erneut unkontrolliert wächst.