titel_df.jpg

Das richtige Maß

Zu Befehl: df, du

01.01.2004
Programme wie df ("disk free") und du ("disk usage") geben Auskunft über die Auslastung des Dateisystems. Dabei verrät df, wieviel Platz auf den Partitionen verfügbar ist, und du gibt an, wieviele Blöcke tatsächlich belegt sind. Wir zeigen, wie Sie mit diesen beiden Tools "Speicherfressern" auf die Schliche kommen.

Zu Befehl

Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, in denen es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.

Kein Grund zur Panik, aber dringender Handlungsbedarf besteht, wenn die Meldung "No space left on device" der einzige Hinweis darauf ist, dass es irgendwo im System Platzprobleme gibt. Linux bietet auf der Kommandozeile die beiden Programme df und du, die Ihnen zeigen, wo etwas "überläuft". Finden Sie mehr über belegte Blöcke, die prozentuale Belegung von Partitionen und die i-Node-Liste heraus und kombinieren Sie die Ausgabe geschickt mit anderen Befehlen, um die Übeltäter aufzuspüren.

Dateisysteme

Dateisysteme organisieren die Struktur von Dateien und Verzeichnissen auf physikalischen Geräten wie z. B. Festplatten oder CD-ROMs. Linux kann gleich mit mehreren Dateisystemen umgehen. Während vor einigen Jahren noch ext2 ("extended filesystem, version 2") als Standard galt, hat sich mittlerweile die nächste Generation mit ext3, ReiserFS, XFS oder JFS durchgesetzt.

Letztere sind Journaling-Dateisysteme: In einem Journal werden Änderungen am Dateisystem protokolliert. Dies passiert unmittelbar vor dem eigentlichen schreibenden Zugriff – der entsprechende Eintrag wird wieder entfernt, wenn die Änderung erfolgt ist. Bei einem unvorhergesehenen Systemabsturz muss nicht mehr die gesamte Platte auf eventuelle Fehler untersucht werden, stattdessen wird nur noch anhand des Journals überprüft, ob die letzten Änderungen wirklich durchgeführt wurden, und notfalls der Zustand vor dem Schreiben der Datei(en) wiederhergestellt.

Darüber hinaus kann Linux auch mit vfat (Windows 95, 98, Me) und NTFS (Windows NT, 2000, XP) umgehen. Der Befehl mount verrät, welche Dateisysteme gerade "eingehängt" sind:

huhn@asteroid:~$ mount
/dev/hda12 on / type ext3 (rw)
proc on /proc type proc (rw)
devpts on /dev/pts type devpts (rw,mode=0620,gid=5)
/dev/hda7 on /boot type ext2 (rw)
/dev/hda13 on /home type ext3 (rw)
/dev/hdb1 on /mnt/c type vfat (rw,gid=102,umask=007)
/dev/hdb5 on /mnt/d type vfat (rw,gid=102,umask=007)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
/dev/hdd on /media/dvd type udf (ro,nosuid,nodev,unhide,user=huhn)

Alle Festplattenpartitionen und sonstige Datenträger (z. B. CD-ROM- oder DVD-Laufwerke) werden über Gerätedateien im Verzeichnis /dev angesprochen. Die Ausgabe des mount-Befehls zeigt nicht nur den Namen der Partition, sondern auch welches Dateisystem verwendet wird.

Freier Platz

Um etwas über die Auslastung der Partitionen zu erfahren, verwenden Sie den Befehl df (Kasten 1). In der ersten Tabellenspalte sehen Sie jeweils den Namen der Partition, in der zweiten Spalte die Anzahl der 1-KB-Blöcke, die auf der Partition vorhanden sind. Danach folgen Hinweise, wieviele davon bereits belegt sind und wieviele noch zur Verfügung stehen. Die Angabe in Prozent dahinter gestaltet das ganze etwas übersichtlicher. Zuletzt verrät das Kommando den Mount-Point.

Kasten 1: Ausgabe von df

huhn@asteroid:~$ df
Filesystem           1K-Blöcke   Benutzt Verfügbar Ben% Eingehängt auf
/dev/hda12             7882560   5214756   2267388  70% /
/dev/hda7               101086      4445     91422   5% /boot
/dev/hda13            82470800  41990020  36291432  54% /home
/dev/hdb1               521808    508080     13728  98% /mnt/c
/dev/hdb5              5756032   4933016    823016  86% /mnt/d
/dev/hdd               7392734   7392734         0 100% /media/dvd

Wer noch mehr wissen möchte, verwendet die Option -a (--all). Hier tauchen in der Ausgabe auch "Pseudo"-Dateisysteme wie die Prozessinformationen unter /proc auf. Die Option -T zeigt in einer zusätzlichen Spalte den Dateisystemtyp an, z. B. ext3 oder vfat.

Sind zusätzlich Dateisysteme aus dem Netz gemountet und sollen diese nicht in der Anzeige auftauchen, hilft der Parameter -l (--local). Weiter "beschränken" lässt sich die Ausgabe mit angehängter Option -h (--human-readable) – df rundet jetzt auf die nächstliegende Einheit auf oder ab (Kasten 2, oben). Anstelle von 1-KB-Blöcken wird nun in GB oder MB gezählt. Dabei tauchen die Angaben allerdings schonmal in unterschiedlichen Maßeinheiten auf, so dass die Spalte MB und GB einfach mischt. Außerdem sind die Angaben durch das Runden etwas ungenauer. Entscheiden Sie einfach selbst, ob Sie die Infos in KB (default, oder df -k) oder MB (df -m) sehen.

i-Nodes

Es kann passieren, dass Sie die Meldung "No space left on device" erhalten, obwohl noch lange keine hundertprozentige Auslastung des Dateisystems erreicht ist. In dem Fall lohnt sich ein Blick auf die i-Node-Liste mit angehängtem Parameter -i (oder --inode, Kasten 2, unten).

Kasten 2: "df -h" und "df -i"

huhn@asteroid:~$ df -h
Filesystem           Größe Benut  Verf Ben% Eingehängt auf
/dev/hda12            7,6G  5,0G  2,2G  70% /
/dev/hda7              99M  4,4M   90M   5% /boot
/dev/hda13             79G   41G   35G  54% /home
/dev/hdb1             510M  497M   13M  98% /mnt/c
/dev/hdb5             5.5G  4.8G  803M  86% /mnt/d
/dev/hdd              7,1G  7,1G     0 100% /media/dvd
huhn@asteroid:~$ df -i
Filesystem            INodes   IBenut.   IFrei IBen% Eingehängt auf
/dev/hda12           1001920  267205    734715   27% /
/dev/hda7              26104      36     26068    1% /boot
/dev/hda13          10485760   49297  10436463    1% /home
/dev/hdb1                  0       0         0    -  /mnt/c
/dev/hdb5                  0       0         0    -  /mnt/d
/dev/hdd                  21      21         0  100% /media/dvd

Dateien haben im Wesentlichen zwei Eigenschaften: Sie belegen Platz (physikalischen Speicher) und besitzen mindestens einen Namen. Verzeichnisse sind genau genommen auch Dateien, die Inhaltseinträge zu Dateien oder weiteren Verzeichnissen enthalten. Ein Eintrag einer Datei in einem Verzeichnis besteht aus einem Namen und einer so genannten "Knotennummer" – dem i-node.

I-nodes sind Einträge im Inhaltsverzeichnis, in dem alle enthaltenen Dateien verzeichnet sind, und enthalten Informationen über Dateien. Mit Ausnahme des Dateinamens sind in diesen i-nodes in insgesamt 128 Bytes alle Verwaltungsinformationen der Dateien gespeichert. Dazu gehören beispielsweise Typ und Zugriffsrechte (ist es eine "normale" Datei, ein Verzeichnis, eine Gerätedatei, ein symbolischer Link? Wer darf schreiben, lesen oder ausführen?), die Größe in Byte, das Erstellungs- und Modifikationsdatum, das Datum des letzten Zugriffs und ein Zeiger auf den physikalischen Datenbereich.

Die Größe dieses Inhaltsverzeichnisses, der i-node-Liste, wird bereits beim Erstellen des Dateisystems festgelegt. Gibt es viele kleinere Dateien im System, wie z. B. bei News-Servern, kann dieses Verzeichnis "überlaufen", obwohl grundsätzlich noch Platz auf der Partition vorhanden ist. Administratoren, die vorher wissen, dass viele kleine Dateien oder symbolische Links angelegt werden sollen, wählen einfach eine größere i-node-Dichte.

df-Alternative di

Eine Alternative zum Tool df ist das "Disk Information Utility" di (http://www.gentoo.com/di/). Es bietet bei ähnlichen Optionen wie df ein etwas aufgeräumteres Ausgabeformat – Sie finden das kleine Hilfsprogramm auf der Heft-CD; es lässt sich mit dem klassischen Dreischritt ./configure && make && make install übersetzen und bringt auch eine eigene Man-Page mit (man di).

Abbildung 1: Grafisches df – KDiskFree

Who<C>du<C>nnit?

Das Programm df verrät nicht, welche Dateien am meisten Platz belegen. Dies finden Sie mit dem Befehl du ("disk usage") heraus. Rufen Sie du in Ihrem Home-Verzeichnis auf, arbeitet sich das Kommando rekursiv durch alle Unterverzeichnisse, und die Daten fliegen nur so über den Bildschirm – erst am Schluss erhalten Sie eine Zusammenfassung:

huhn@asteroid:~$ du
[…]
1740    ./.phoenix/default
1752    ./.phoenix
4       ./.mgp_fonts
16994640        .

Interessiert Sie nur das Endergebnis, hängen Sie die Option -s (--summarize) an. Auch für du gibt es den Parameter -h (--human-readable):

huhn@asteroid:~$ du -h
[…]
1.7M    ./.phoenix/default
1.8M    ./.phoenix
4.0k    ./.mgp_fonts
17G     .

Das Kommando kann auch gezielt auf bestimmte Dateiendungen oder einzelne Verzeichnisse losgelassen werden. Auch wenn der Aufruf du -s ~ eine Zusammenfassung für das Home-Verzeichnis ausgibt, wissen Sie immer noch nicht, wo genau der meiste Platz verbraucht wird. Eine Kombination aus mehreren Befehlen bringt Licht ins "Datendunkel":

huhn@asteroid:~$ du --max-depth=1 -m ~ | sort -rn | less
16597   /home/huhn
2748    /home/huhn/oggs
1530    /home/huhn/linuxuser
1483    /home/huhn/uni
[…]

Hier wird zunächst durch die Option --max-depth=1 festgelegt, dass nur eine weitere Unterverzeichnisstufe berücksichtigt wird. Der Parameter -m (--megabytes) bewirkt eine Ausgabe in MB. Diese wird durch das Pipe-Zeichen (|)an den Befehl sort weitergeleitet. Dessen Parameter -n bewirkt, dass Zahlen numerisch sortiert werden – normalerweise würde die Zahl 3 hinter 24 eingeordnet, da die ersten Zeichen (3 und 2) relevant sind. Durch die Option -r wird in umgekehrter Reihenfolge ("reverse") sortiert. So erscheint die größte Zahl an erster Stelle. Zum Schluss wird die Ausgabe dieser Befehlskombination an den Pager less weitergereicht, um das Ergebnis seitenweise betrachten zu können.

Abbildung 2: Wer frisst den Speicher? KDirStat hilft auch mit einer grafischen Darstellung

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Related content

Kommentare