Tutorial: Speicherplatzmanagement: Die größten Dateien via SSH unter Ubuntu/Debian finden

Management Summary
Speicherplatzmanagement sorgt dafür, dass Computer und Server genügend Platz für den Betrieb behalten. Unter Ubuntu und Debian können wenige große Dateien, sehr viele kleine Dateien oder noch geöffnete gelöschte Daten die Ursache einer vollen Festplatte sein. Der Artikel erklärt die Suche über einen entfernten Textzugang. Dadurch wird sichtbar, wo der Platz verbraucht wird und welche Bereinigung sinnvoll sein könnte. Angezeigte Dateigröße und tatsächliche Belegung können abweichen; große Dateien sind nicht automatisch entbehrlich.
Inhalt
Ein fast volles Dateisystem benötigt vor dem Aufräumen eine Diagnose. Große Einzeldateien sind eine mögliche Ursache; viele kleine Dateien, geöffnete gelöschte Dateien oder Besonderheiten des Dateisystems kommen ebenfalls infrage. Die folgenden Befehle untersuchen die Belegung unter Ubuntu und Debian. Dateien werden dabei nicht gelöscht.
Zuerst das Dateisystem bestimmen
Nach der SSH-Verbindung legt ein absoluter Pfad den Prüfbereich fest. Der Beispielpfad muss durch ein vorhandenes Verzeichnis ersetzt werden. df beschreibt das Dateisystem dieses Verzeichnisses, nicht nur den Ordner selbst.
df -h -- "/pfad/zum/verzeichnis"
df -i -- "/pfad/zum/verzeichnis"df -h zeigt den Speicherplatz in lesbaren Binäreinheiten. df -i zeigt die Inode-Belegung, soweit unterstützt. Ein Inode speichert Angaben zu einer Datei, etwa Zugriffsrechte und den Speicherort der Daten. Sind alle verfügbaren Inodes belegt, kann das Anlegen einer weiteren Datei scheitern, obwohl noch Platz für Dateiinhalte frei ist.
Einzeldateien über 500 MiB finden
find "/pfad/zum/verzeichnis" -xdev -type f -size +500M -exec ls -lh -- {} +-type f wählt reguläre Dateien aus. GNU find interpretiert M als 1.048.576 Bytes. +500M bedeutet deshalb größer als 500 MiB, nicht 500 dezimale MB. Verglichen wird die logische Dateigröße. Eine Sparse-Datei enthält ausgesparte Bereiche. Beim Lesen erscheinen dort Nullen, ohne dass entsprechende Datenblöcke auf dem Datenträger liegen müssen. Die angezeigte Dateilänge kann deshalb deutlich größer sein als der tatsächlich belegte Speicher.
-xdev verhindert den Abstieg in andere Dateisysteme. -exec ls -lh -- {} + übergibt Treffer gruppenweise direkt an ls. Das zeigt Details, sortiert aber nicht nach Größe. Anführungszeichen schützen Leerzeichen im Pfad. Zugriffsfehler sind zu beachten: Nicht lesbare Verzeichnisse machen die Suche unvollständig.
Belegten Speicher mit du sortieren
du -axh -- "/pfad/zum/verzeichnis" | sort -rh | head -n 10du -a erfasst Dateien und Verzeichnisse; -h formatiert die Größen, -x bleibt im selben Dateisystem. sort -rh sortiert die lesbaren Größen absteigend, head -n 10 begrenzt die Anzeige auf zehn Zeilen. Verzeichniswerte enthalten bereits den Inhalt. Das Addieren aller angezeigten Zeilen würde deshalb Daten mehrfach zählen. Die Ausgabe enthält die zehn größten Einträge, nicht ausschließlich Einzeldateien.
Die Befehlsfolge dient der interaktiven Sichtung. Zeilenumbrüche in Dateinamen können die zeilenweise Anzeige verfälschen; automatische Verarbeitung benötigt stattdessen das NUL-Byte als Trennzeichen. Dieses Zeichen darf in Linux-Dateinamen nicht vorkommen. So wird ein ungewöhnlicher Dateiname nicht versehentlich in mehrere Einträge zerlegt. Große Suchläufe und Sortierungen kosten Zeit, Ein-/Ausgabe und gegebenenfalls temporären Speicher. Ein passendes Startverzeichnis begrenzt den Aufwand.

Wenn die Zahlen nicht zusammenpassen
df und du erfassen unterschiedliche Größen. Eine Differenz ist ein Hinweis, kein Beweis für eine einzelne Ursache. Nicht erreichbare Pfade, unterschiedliche Einhängegrenzen, Snapshots, reservierter Platz und die interne Dateisystemabrechnung können ebenfalls eine Rolle spielen.
du --inodes -x --max-depth=1 -- "/pfad/zum/verzeichnis" | sort -nr
lsof -nP +L1du --inodes hilft beim Auffinden von Verzeichnissen mit vielen Dateisystemeinträgen, auch bei zahlreichen winzigen Dateien. lsof +L1 listet offene Dateien mit weniger als einem Hardlink. Das Löschen eines Verzeichniseintrags gibt unter Linux den Speicher nicht sofort frei, solange ein Programm die Datei noch geöffnet hält. Die Daten können Platz belegen, bis der letzte offene Zugriff geschlossen ist. Die Sichtbarkeit von Prozessen hängt von Berechtigungen ab; lsof benötigt eventuell eine eigene Installation.
Fragen und Antworten
Übersieht du viele kleine Dateien?
Nein. Verzeichnissummen berücksichtigen den Inhalt; du --inodes ergänzt die Anzahl. Eine Suche nach großen Einzeldateien kann diese Ursache übersehen, die Summen der Verzeichnisse erfassen aber auch diese Dateien.
Darf jede große Datei entfernt werden?
Nein. Datenbanken, Anwendungsdateien oder Sicherungen können groß und weiterhin erforderlich sein. Zuständigkeit, Aufbewahrung und vorgesehene Anwendungsabläufe bestimmen die Bereinigung. Bei Logs ist eine eingerichtete Rotation oder ein vorgesehener Wiederöffnungsablauf sinnvoller als das wahllose Löschen aktiver Dateien.
Erklären diese Prüfungen jeden Fall einer vollen Platte?
Nein. Kontingente, Snapshots, Dateisystem-Metadaten oder ein anderes volles Dateisystem können weitere Prüfungen erfordern. Ausgangspunkt sind der tatsächlich betroffene Pfad und dessen Dateisystem.