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.
df -hFilesystem 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% /runWichtigste Optionen
Die folgende Tabelle deckt die Optionen ab, die im Alltag relevant sind. Alles weitere findest du in der Manpage.
| Option | Wirkung | Typischer Einsatz |
|---|---|---|
-h | Größen menschenlesbar (Basis 1024) | Default-Aufruf für Menschen |
-H | Menschenlesbar in SI-Einheiten (Basis 1000) | Wenn Hersteller-Angaben verglichen werden |
-T | Filesystem-Typ als zusätzliche Spalte | ext4, xfs, btrfs auf einen Blick |
-i | Inodes statt Bytes anzeigen | Inode-Knappheit prüfen |
-x TYPE | Filesystem-Typ ausschließen | tmpfs, squashfs, devtmpfs ausblenden |
--total | Zusatz-Zeile mit Summe aller Mounts | Gesamtüberblick eines Systems |
-a | Auch Pseudo-Filesysteme (size 0) | Debugging, normalerweise verzichtbar |
--output=... | Spalten explizit wählen | Saubere Skript-Ausgaben |
Output verstehen
Die Default-Ausgabe von df -h hat sechs Spalten. Wer sie liest, weiß sofort, ob ein System Platz braucht.
| Spalte | Bedeutung |
|---|---|
| Filesystem | Block-Device oder logischer Name des Filesystems (/dev/sda1, tmpfs, 192.168.1.10:/export) |
| Size | Gesamtgröße des Filesystems |
| Used | Belegter Platz (inkl. Reservierung für root, siehe unten) |
| Avail | Verfügbar für normale Nutzer — nicht zwingend Size − Used |
| Use% | Prozentuale Belegung, gerundet |
| Mounted on | Pfad, 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.
df -ihFilesystem Inodes IUsed IFree IUse% Mounted on
/dev/nvme0n1p2 30M 1.2M 29M 4% /
/dev/nvme0n1p1 256K 16 256K 1% /boot/efiWenn 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.
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.
df -h /homeMit 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.
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.
df -h -x tmpfs -x devtmpfs -x squashfsMehrere -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.
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
- df(1) – Manpage (man7.org) — Vollständige Optionsreferenz des GNU-
df - GNU Coreutils: df invocation — Detaillierte Erklärung mit Beispielen
- duf – Disk Usage/Free Utility — Hübscher Ersatz mit Farben und Tabellen
- Arch Wiki: ext4 – tune2fs — Reservierte Blöcke und Filesystem-Tuning
Verwandte Artikel
- du – Speicherverbrauch ermitteln — Komplementär: Datei-Ebene statt Mount-Ebene
- Linux Dateisystem — Wie Mounts und der VFS-Baum funktionieren
- Linux Verzeichnisstruktur — FHS und Standard-Mountpoints
- find – Dateien suchen — Große Dateien gezielt aufspüren
- ls – Dateien auflisten — Datei-Ebene mit Größenangabe