Der Befehl df (kurz für „disk free”) zeigt, wie voll die gemounteten Dateisysteme eines Linux-Systems sind. Im Gegensatz zu du, das einzelne Pfade ausmisst, arbeitet df auf Filesystem-Ebene: eine Zeile pro Mount, mit Gesamtgröße, belegt, frei und prozentualer Auslastung. Damit ist df der erste Griff, wenn ein System „voll” meldet.

Was df macht

df fragt direkt das Kernel-Subsystem ab, das die Mount-Tabelle und die Belegung jedes Filesystems verwaltet — die Werte stammen aus den Filesystem-Metadaten, nicht aus einer Verzeichnis-Traversierung. Das ist der entscheidende Unterschied zu du: df antwortet in Millisekunden, weil es nichts durchsuchen muss, und sieht auch Daten, die durch gelöschte aber noch geöffnete Dateien belegt sind.

Ohne weitere Argumente listet df jedes Filesystem mit Größe, Belegung und Mountpoint auf. Mit einem Pfad-Argument zeigt df nur das Filesystem, auf dem dieser Pfad liegt — praktisch, um schnell zu sehen, ob das Home oder das Root-Volume das Problem ist.

Bash Standardaufruf mit menschenlesbaren Größen
df -h
Output
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme0n1p2  468G  312G  133G  71% /
/dev/nvme0n1p1  511M  6.1M  505M   2% /boot/efi
tmpfs           7.7G  120M  7.6G   2% /run

Wichtigste Optionen

Die folgende Tabelle deckt die Optionen ab, die im Alltag relevant sind. Alles weitere findest du in der Manpage.

OptionWirkungTypischer Einsatz
-hGrößen menschenlesbar (Basis 1024)Default-Aufruf für Menschen
-HMenschenlesbar in SI-Einheiten (Basis 1000)Wenn Hersteller-Angaben verglichen werden
-TFilesystem-Typ als zusätzliche Spalteext4, xfs, btrfs auf einen Blick
-iInodes statt Bytes anzeigenInode-Knappheit prüfen
-x TYPEFilesystem-Typ ausschließentmpfs, squashfs, devtmpfs ausblenden
--totalZusatz-Zeile mit Summe aller MountsGesamtüberblick eines Systems
-aAuch Pseudo-Filesysteme (size 0)Debugging, normalerweise verzichtbar
--output=...Spalten explizit wählenSaubere Skript-Ausgaben

Output verstehen

Die Default-Ausgabe von df -h hat sechs Spalten. Wer sie liest, weiß sofort, ob ein System Platz braucht.

SpalteBedeutung
FilesystemBlock-Device oder logischer Name des Filesystems (/dev/sda1, tmpfs, 192.168.1.10:/export)
SizeGesamtgröße des Filesystems
UsedBelegter Platz (inkl. Reservierung für root, siehe unten)
AvailVerfügbar für normale Nutzer — nicht zwingend Size − Used
Use%Prozentuale Belegung, gerundet
Mounted onPfad, unter dem das Filesystem im VFS-Baum hängt

Die Differenz zwischen Size − Used und Avail ist kein Rundungsfehler: ext-Filesysteme reservieren standardmäßig 5 % für root, damit das System auch bei vollem Volume noch atmen kann. Diese Reservierung erscheint als „belegt” im Sinne von „nicht verfügbar”, obwohl sie noch leer ist. Mit tune2fs -m 0 /dev/sdXY lässt sich die Reservierung anpassen — auf großen Daten-Volumes sinnvoll, auf dem Root-Filesystem meist nicht.

Inode-Knappheit

Ein Filesystem kann zwei voneinander unabhängige Ressourcen erschöpfen: Bytes und Inodes. Jede Datei und jedes Verzeichnis belegt genau einen Inode — die Datenstruktur, die Metadaten und Block-Zeiger trägt. Klassisches ext4 legt die Anzahl beim Anlegen des Filesystems fest und kann sie später nicht mehr ändern.

Bash Inode-Auslastung prüfen
df -ih
Output
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/nvme0n1p2   30M  1.2M   29M    4% /
/dev/nvme0n1p1  256K    16  256K    1% /boot/efi

Wenn df -h viel freien Platz meldet, das System aber „No space left on device” zurückgibt, sind in der Regel die Inodes alle. Typische Auslöser sind Mailserver mit Maildir-Strukturen (eine Datei pro Mail), Cache-Verzeichnisse mit Millionen winziger Files, oder schlecht konfigurierte Backup-Systeme. df -i zeigt das Problem in Sekunden. Modernere Filesysteme wie xfs und btrfs allokieren Inodes dynamisch und sind damit weniger anfällig.

Praxis

Drei Aufrufe decken den Großteil der täglichen Arbeit ab.

Bash Empfohlener Standard mit Filesystem-Typ
df -hT

-h für menschenlesbare Größen, -T ergänzt die Type-Spalte. So erkennst du auf einen Blick, ob ein Mount ext4, xfs, btrfs, nfs oder etwas Exotisches ist — relevant, wenn etwa Quotas oder Snapshot-Verhalten zu klären sind.

Bash Belegung eines bestimmten Pfads
df -h /home

Mit Pfad-Argument zeigt df nur das Filesystem, das diesen Pfad enthält. Ideal, um in einem Skript zu prüfen, ob ein bestimmtes Verzeichnis noch genug Platz hat — unabhängig davon, ob es auf einem eigenen Mount liegt oder Teil des Root-Filesystems ist.

Bash Spalten frei kombinieren
df -h --output=source,size,used,avail,target

--output wählt die gewünschten Spalten explizit und ist deutlich robuster als awk-Pipelines auf der Default-Ausgabe — Spaltenbreite und Trennzeichen variieren je nach Locale und Filesystem-Namen.

tmpfs, devtmpfs und Snap-Mounts ausblenden

Auf modernen Distributionen ist df -h voll mit Pseudo-Filesystemen: tmpfs für /run, /dev/shm und User-Sessions, devtmpfs für /dev, dazu pro installiertem Snap-Paket ein squashfs-Mount. Auf einem Ubuntu-Desktop mit zwanzig Snaps ergibt das schnell vierzig Zeilen Rauschen.

Bash Pseudo-Filesysteme ausblenden
df -h -x tmpfs -x devtmpfs -x squashfs

Mehrere -x-Flags lassen sich kombinieren. Das Ergebnis ist die Liste der „echten” Filesysteme — also persistenter Mounts, die auch wirklich Platz brauchen. Wer das oft tippt, baut sich einen Alias.

Bash Alias für die saubere Ausgabe
alias dfh='df -hT -x tmpfs -x devtmpfs -x squashfs -x overlay'

overlay schließt zusätzlich Container-Layer aus, die df auf Hosts mit Docker oder Podman ebenfalls einblendet.

Besonderheiten

ext4 reserviert standardmäßig 5 % für root

Auf ext-Filesystemen sind 5 % der Kapazität für den root-Benutzer reserviert — sichtbar als Differenz zwischen Size − Used und Avail. Das soll verhindern, dass System-Dienste bei vollem Volume keinen Platz mehr für Logs oder Lock-Files finden. Mit tune2fs -m 1 /dev/sdXY lässt sich der Wert auf 1 % reduzieren — bei großen Daten-Volumes empfehlenswert, auf dem Root-Mount nicht.

df und du melden unterschiedliche Werte

Beide messen Disk-Belegung, aber von verschiedenen Seiten. df liest Filesystem-Metadaten und sieht auch gelöschte Dateien, die noch von Prozessen offen gehalten werden — du nur Dateien im Verzeichnisbaum. Klassisches Symptom: df meldet Volume zu 95 % voll, du -sh / findet nur 60 %. Lösung: lsof +L1 zeigt offene Dateien ohne Verzeichniseintrag.

BSD-df ist nicht GNU-df

macOS und FreeBSD bringen ein eigenes df mit anderen Flags: kein -T, kein —output, -h bedeutet Basis 1024 wie bei GNU, aber -H existiert nicht. Wer Skripte zwischen Linux und macOS portieren will, sollte sich auf POSIX-Optionen beschränken oder Coreutils nachinstallieren (brew install coreutils liefert gdf).

Mount-Points mit Leerzeichen und Bind-Mounts

Spaltenausgabe von df ist nicht maschinenlesbar — Mount-Points können Leerzeichen oder Sonderzeichen enthalten, was simple awk {print $6}-Pipelines in falsche Felder wirft. Robust ist df —output=target. Außerdem: Bind-Mounts erscheinen mehrfach mit identischer Source aber verschiedenen Targets — das ist korrekt, kein Bug.

ZFS-Datasets vs. Pool-Größe

Bei ZFS zeigt df jedes Dataset einzeln — und alle teilen sich denselben Pool-Speicher. Der freie Platz wird darum bei jedem Dataset gleich angezeigt: der gesamte freie Pool. Snapshots, Reservierungen und Quotas verzerren das Bild zusätzlich. Für eine ehrliche Übersicht ist zfs list oder zpool list das richtige Werkzeug, nicht df.

duf als hübscher Ersatz

Das Go-Tool duf liefert dieselben Informationen wie df, aber mit Farben, sauberen Spalten und Gruppierung nach Local, Network, Special, Loops. Auf Workstations und Servern ein angenehmer Drop-in-Ersatz für die interaktive Nutzung. duf —hide loops,special entspricht ungefähr dem oben gezeigten df-Alias.

Weiterführende Ressourcen

Externe Quellen

/ Weiter

Zurück zu Dateisystem

Zur Übersicht