Mit einem schnellen Internetzugang steigt bei vielen Anwendern die Download-Rate und damit zwangsläufig der Speicherverbrauch auf der eigenen Harddisk. Auch auf der Kommandozeile gibt es Programme, mit denen Sie Ihren Festplattenplatz schnell und sicher verwalten können. In dieser “Zu Befehl”-Folge geht es um Dateisysteme, um Dateien und ihre Anordnung und Eigenschaften – und um die Programme df und du. Begeben Sie sich in die Tiefen des Filesystems und finden Sie heraus, welche Dateien den Speicher vertilgen!
Unter einem Dateisystem ganz allgemein können Sie sich die Organisation von Dateien und Verzeichnissen auf einem physikalischen Gerät, z. B. Festplatte, CD-ROM oder Diskette, vorstellen. Schauen Sie sich die Struktur Ihres Linux-Systems an: Ausgehend vom Wurzelverzeichnis / (Schrägstrich – nicht zu verwechseln mit /root, dem Homeverzeichnis des Users root) gibt es Unterverzeichnisse wie /etc oder /home, die wiederum darunterliegende Verzeichnisse haben usw. Der Begriff “Dateisystem” taucht auch in einem anderen Zusammenhang auf: wenn es um einen bestimmten Typ von Dateisystem geht. Das Standarddateisystem unter Linux heißt beispielsweise ext2 (steht für “extended filesystem, Version 2”), ab Windows 95 gibt es vfat, ntfs ermöglicht Lesezugriff auf Windows NT-Partitionen, usw.
No space left on device?
Jetzt sind Sie gefragt: Tippen Sie einfach mal df (steht für “disk free”), um mehr über die Auslastung Ihres Systems zu erfahren:
huhn@asteroid:~$ df Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda2 46664 31348 12907 71% / /dev/hda5 280005 57209 208340 22% /var /dev/hda6 3937220 1499304 2237912 40% /usr /dev/hda7 5866360 367476 5200880 7% /opt /dev/hda8 19283304 6432372 11871372 35% /home /dev/hdb1 521808 521784 24 100% /mnt/c /dev/hdb5 5756032 5700228 55804 99% /mnt/d
In dieser Tabelle sehen Sie viele verschiedene Informationen auf einen Blick: /dev/hda2 ist z. B. der Name einer Partition, weiterhin sehen Sie, wie groß die Partition ist und wieviele Blöckedavon benutzt oder noch frei sind. Dahinter kommt eine Prozent-Angabe, wieviel im Verhältnis zum gesamten Platz benutzt ist, und als letzte Information der Ort, wohin das Dateisystem gemountetist. Wenn Ihnen die Darstellung in 1 kB-Blöcken zu unübersichtlich ist, probieren Sie die Option df -h (für --human-readable). Dabei wird auf- oder abgerundet in die nächstliegende Einheit: 46664 kB werden also als 46M ausgegeben oder 3937220 kB als 3.8G. Der Nachteil an dieser Variante: die Zeilen sind in unterschiedlichen Einheiten dargestellt – durch das Runden werden die Angaben ungenauer. Natürlich können Sie auch selbst entscheiden, ob die Belegung in kB oder MB angezeigt werden soll: df -k (für --kilobytes) oder df -m (für --megabytes).

df unter GNOME – gdiskfree” width=”300″ height=”86″ />
df unter GNOME – gdiskfree Viele von den mitgelieferten Optionen des Kommandos df werden Sie nicht für den Alltag am Linux-Rechner benötigen. Dazu gehören df -a (steht für --all), womit auch “Pseudo”-Filesysteme dargestellt werden wie die Prozessinformationen unter /proc, oder df -l (Langform: --local), womit aus dem Netz gemountete Dateisysteme bei der Anzeige weggelassen werden.
Das Ei-node des Kolumbus…
Es kommt vor, dass die Meldung “No space left on device” angezeigt wird, aber keineswegs eine hundertprozentige Auslastung des Dateisystems erreicht ist. Um diesem Rätsel auf die Spur zu kommen, sollten Sie einiges über die internen Organisation von Unix-Dateisystemen wissen. Eine Datei hat im wesentlichen zwei Eigenschaften: Sie belegt Platz im Dateisystem (physikalischer Speicher), und sie hat mindestens einen Namen. Verzeichnisse sind streng genommen Dateien, die Links zu anderen Dateien oder Verzeichnissen enthalten. Der Eintrag einer Datei im Verzeichnis besteht aus einem Namen und einer sogenannten “Knotennummer” – der i-node.
Jedes Dateisytem besitzt ein Inhaltsverzeichnis, in dem alle enthaltenen Dateien verzeichnet sind. Die Einträge, i-nodes genannt, enthalten Informationen über Dateien. In diesen Informationsknoten werden in 128 Bytes alle Verwaltungsinformationen der Files (mit Ausnahme des Dateinamens) gespeichert:
- Typ und Zugriffsrechte (normale Datei, Verzeichnis, Gerätedatei, Symlink, lesen, schreiben, ausführen)
- Referenzzähler (Anzahl der Namen, die auf die Datei zeigen; man kann dieselbe physikalische Datei mit mehreren Namen versehen – Hardlink)
- Dateieigentümer und Gruppenzugehörigkeit
- Größe in Bytes
- Erstellungsdatum
- Modifikationsdatum
- Datum des letzten Zugriffs
- Zeiger auf den physikalischen Datenbereich
Die Auslastung dieses “Inhaltsverzeichnisses”, der i-node Liste, erhalten Sie mit df -i:
huhn@asteroid:~$ df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hda2 12048 7333 4715 61% / /dev/hda5 72288 6314 65974 9% /var /dev/hda6 500960 131580 369380 26% /usr /dev/hda7 746304 11 746293 0% /opt /dev/hda8 2452800 14423 2438377 1% /home /dev/hdb1 0 0 0 - /mnt/c /dev/hdb5 0 0 0 - /mnt/d
Die Größe des Inhaltsverzeichnisses wird beim Erstellen des Dateisystems festgelegt, dieses Verzeichnis kann also “überlaufen”, obwohl noch Platz da ist – wenn man viele kleine Dateien hat, wie z. B. News-Artikel. Wenn Sie also wissen, dass viele kleine Dateien oder symbolische Links angelegt werden sollen, können Sie eine größere i-node-Dichte wählen.
Who<C>du<C>nnit?
Machen Sie sich auf die Suche nach den Files, die den Speicherplatz belegen – in welchem Verzeichnis des Dateisystems sitzen die Übeltäter? Das Programm du liefert Informationen über den Speicherbedarf von Dateien und Verzeichnissen. Wenn Sie in Ihrem Home-Verzeichnis einfach nur du an der Kommandozeile aufrufen, fliegen die Daten nur so über den Bildschirm – es darf also ruhig etwas gezielter sein. Ein du *.html untersucht nur die Dateien, die auf .html enden. Gezielt auf ein Verzeichnis losgelassen, werden auch alle untergeordneten Directories mit einbezogen:
huhn@asteroid:~/linux-magazin$ du zubefehl/ 48 zubefehl/zweitefolge 60 zubefehl/erstefolge 52 zubefehl/drittefolge 20 zubefehl/viertefolge 4 zubefehl/fuenftefolge/test … 2360 zubefehl
Am Schluss steht die Zusammenfassung – alle Angaben sind standardmäßig in kByte. Wie auch bei df gibt es den Parameter -h (für --human-readable). Wollen Sie nur das Endergebnis, verwenden Sie du -s verzeichnis (“-s” für --summarize: zusammenfassen). Das funktioniert allerdings nicht, wenn Dateien eines bestimmten Typs ausgewählt werden. Ein du fun/bilder/*.jpg listet zwar für alle JPGs den verbrauchten Platz auf, eine Zusammenfassung gibt es hier allerdings nur, wenn die Option -c (oder die Langform --total) verwendet wird. Die Tiefe der zu durchforstenden Verzeichnisse können Sie übrigens auch mit dem Parameter --max-depth=DEPTH (wobei DEPTH durch eine Ziffer ersetzt wird) angeben.
Natürlich ist es manchmal praktisch, ein grafisches Tool von KDE oder Gnome zum Aufstöbern von “Plattenplatzfressern” zu verwenden, der Vorteil der Kommandozeile liegt allerdings in der geschickten Kombination von Befehlen. Schauen Sie sich z. B. einmal sort an. Der Name ist Programm: Hier wird nach von Ihnen vorgegeben Kriterien sortiert. Der Parameter -n bewirkt, dass Zahlen numerisch sortiert werden. Während normalerweise 3 hinter 24 und 24 hinter 115 eingeordnet würde, da die ersten Zeichen (3, 2, 1) relevant sind, wertet sort -n die Zahlen korrekt aus. Die Option -r sortiert in umgekehrter Reihenfolge (“reverse”). Sollte Ihnen also auffallen, dass die /home-Partition fast voll ist, finden Sie den Übeltäter sehr schnell mit dem Aufruf:
asteroid:~# du -s /home/* | sort -rn 6356156 /home/user1 47304 /home/user2 18864 /home/user3 …
Sie wollen nur die zwei schlimmsten Verbraucher? Dann schalten Sie eben noch ein “| head -n 2” dahinter:
asteroid:~# du -s /home/* | sort -rn | head -n 2 6356156 /home/user1 47304 /home/user2 asteroid:~#
Versuchen Sie doch mal, ein grafisches Frontend zu finden, das genau diese Funktionalität bietet…
Glossar
-
Blöcke
-
Man sieht hier, dass Dateisysteme in Abschnitte bestimmter Größe gegliedert sind. Hier werden die Blöcke 1 kB groß dargestellt, d. h. 1024 Bytes. Wenn Sie beispielsweise wissen möchten, wieviele Bytes tatsächlich in der Partition /dev/hda2 vorhanden sind, multiplizieren Sie einfach 46664 mit 1024: 47783936 Bytes.
-
gemountet
-
Mounten bezeichnet das “Einhängen” eines Dateisystems in einen Gesamtdateibaum. Anders als unter DOS und Windows gibt es unter Unix keine Laufwerksbuchtaben, vielmehr wird jede Partition irgendwo unterhalb des sogenannten Root-Verzeichnisses (Wurzelverzeichnis) angelegt.
-
Hardlink
-
Von mehreren Stellen in Verzeichnissen wird auf denselben i-node einer Datei verwiesen. Daher haben alle Hardlinks einer Datei dieselben Besitzer, Gruppen, Zugriffsrechte usw.


