Command Builder · Storage & Benchmark
fio Command Builder
fio ist das Standardwerkzeug, um Platten ehrlich zu vermessen — und sein Befehl ist berüchtigt lang. Hier wählst du ein Preset, passt die Parameter an und bekommst den fertigen Befehl erklärt. Wichtig: Schreibtests überschreiben ihr Ziel, der Builder warnt dich deshalb deutlich.
Vorlage übernehmen:
Eine Testdatei ist sicher; ein Blockgerät wie /dev/sdb nur angeben, wenn darauf keine Daten liegen.
Optionen
Erweiterte Optionen▾
Generierter Befehl
fio \
--name=random-read \
--filename=/tmp/fio-test \
--size=10G \
--rw=randread \
--bs=4k \
--iodepth=32 \
--numjobs=4 \
--runtime=60 \
--time_based --direct=1Das bedeuten die Parameter
--name- Frei wählbarer Name des Test-Jobs — erscheint in der Ergebnis-Ausgabe.
--filename- Ziel des Tests — eine Datei (wird angelegt) oder ein Blockgerät. Eine Datei wie /tmp/fio-test kann nach dem Test einfach gelöscht werden. Achtung: /tmp liegt oft im RAM (tmpfs) — für echte Platten-Werte einen Pfad auf dem zu testenden Laufwerk wählen, z. B. /mnt/tank/fio-test.
--size- Größe der Testdatei bzw. Datenmenge pro Job. Deutlich größer wählen als den RAM-Cache des Geräts, sonst misst du den Cache statt der Platte.
--rw- Viele kleine Lesezugriffe an zufälligen Positionen — so arbeiten Datenbanken und VMs.
--bs- Größe pro Zugriff: 4k für IOPS-Tests, 1M für Durchsatz-Tests.
--iodepth- Wie viele I/O-Anfragen gleichzeitig in der Warteschlange liegen dürfen. Wirkt nur mit einer asynchronen I/O-Engine (libaio oder io_uring) wirklich.
--numjobs- Anzahl paralleler Test-Prozesse — simuliert mehrere gleichzeitige Nutzer.
--runtime- Testdauer in Sekunden — wirkt zusammen mit „Zeitbasiert“.
--time_based- Testet exakt die angegebene Laufzeit, auch wenn die Datenmenge vorher durch wäre.
--direct=1- Umgeht den Seiten-Cache des Kernels — du misst die Platte statt den RAM.
IOPS oder Durchsatz — was willst du wissen?
Die Blockgröße entscheidet, was du misst: Mit --bs=4k und zufälligem Zugriff (randread/randwrite) testest du IOPS — das, was VMs, Container und Datenbanken fordern und woran HDDs scheitern. Mit --bs=1M und sequenziellem Zugriff misst du Durchsatz in MB/s — relevant fürs Kopieren großer Dateien und für Backups. --direct=1 sorgt dabei dafür, dass du die Platte misst und nicht den RAM-Cache des Kernels.
Sicher benchmarken
Lesetests sind harmlos, Schreibtests nicht: Sie überschreiben ihr Ziel. Benchmarke deshalb immer gegen eine Testdatei auf dem Laufwerk, das dich interessiert — etwa /mnt/tank/fio-test — und niemals gegen ein Blockgerät mit Daten darauf. Zwei Fallstricke: /tmp liegt oft im RAM (tmpfs), dort misst du also gar nicht deine Platte; und die Testgröße sollte deutlich größer sein als der Cache des Geräts, sonst sehen die Werte besser aus, als sie sind.
Alle Optionen im Überblick
| Option | Bedeutung | Erklärung |
|---|---|---|
--name | Job-Name | Frei wählbarer Name des Test-Jobs — erscheint in der Ergebnis-Ausgabe. |
--filename | Zieldatei / Gerät | Ziel des Tests — eine Datei (wird angelegt) oder ein Blockgerät. Eine Datei wie /tmp/fio-test kann nach dem Test einfach gelöscht werden. Achtung: /tmp liegt oft im RAM (tmpfs) — für echte Platten-Werte einen Pfad auf dem zu testenden Laufwerk wählen, z. B. /mnt/tank/fio-test. |
--size | Größe | Größe der Testdatei bzw. Datenmenge pro Job. Deutlich größer wählen als den RAM-Cache des Geräts, sonst misst du den Cache statt der Platte. |
--rw | Zugriffsmuster (Read/Write Mode) | Bestimmt das Zugriffsmuster des Tests. |
--rw=read | Sequenzielles Lesen | Liest am Stück — wie beim Abspielen oder Kopieren großer Dateien. |
--rw=write | Sequenzielles Schreiben | Schreibt am Stück — wie beim Kopieren großer Dateien auf das Ziel. ⚠ Schreibtests überschreiben den Inhalt des Ziels. Auf einem Blockgerät (/dev/…) oder in einer bestehenden Datei gehen Daten unwiederbringlich verloren. |
--rw=randread | Zufälliges Lesen | Viele kleine Lesezugriffe an zufälligen Positionen — so arbeiten Datenbanken und VMs. |
--rw=randwrite | Zufälliges Schreiben | Viele kleine Schreibzugriffe — der härteste Alltagstest für SSDs. ⚠ Schreibtests überschreiben den Inhalt des Ziels. Auf einem Blockgerät (/dev/…) oder in einer bestehenden Datei gehen Daten unwiederbringlich verloren. |
--rw=randrw | Gemischt (Lesen + Schreiben) | Zufälliges Lesen und Schreiben gemischt — nah am VM- und Container-Alltag. ⚠ Schreibtests überschreiben den Inhalt des Ziels. Auf einem Blockgerät (/dev/…) oder in einer bestehenden Datei gehen Daten unwiederbringlich verloren. |
--bs | Blockgröße | Größe pro Zugriff: 4k für IOPS-Tests, 1M für Durchsatz-Tests. |
--iodepth | IO Depth | Wie viele I/O-Anfragen gleichzeitig in der Warteschlange liegen dürfen. Wirkt nur mit einer asynchronen I/O-Engine (libaio oder io_uring) wirklich. |
--numjobs | Parallele Jobs | Anzahl paralleler Test-Prozesse — simuliert mehrere gleichzeitige Nutzer. |
--runtime | Laufzeit | Testdauer in Sekunden — wirkt zusammen mit „Zeitbasiert“. |
--time_based | Zeitbasiert | Testet exakt die angegebene Laufzeit, auch wenn die Datenmenge vorher durch wäre. |
--direct=1 | Direct I/O | Umgeht den Seiten-Cache des Kernels — du misst die Platte statt den RAM. |
--rwmixread | Leseanteil | Anteil der Lesezugriffe beim gemischten Test — der Rest wird geschrieben. |
--ioengine | IO Engine | Wie fio die I/O-Anfragen absetzt — für iodepth > 1 libaio oder io_uring wählen. |
--ioengine=libaio | libaio | Asynchrone I/O unter Linux — Standardwahl, damit iodepth wirkt. |
--ioengine=io_uring | io_uring | Die modernste und schnellste Engine (Kernel ab 5.1). |
Häufige Fragen
Ist fio gefährlich für meine Daten?
Lesetests sind harmlos. Schreibtests überschreiben aber den Inhalt des Ziels: Gegen eine eigene Testdatei (z. B. /mnt/tank/fio-test) sind sie unkritisch — gegen ein Blockgerät wie /dev/sda vernichten sie alle Daten darauf. Der Builder warnt deshalb bei jedem Schreibtest.
Warum sind meine gemessenen Werte unrealistisch hoch?
Meist misst du einen Cache statt der Platte: /tmp liegt oft im RAM (tmpfs), und ohne Direct I/O bedient der Kernel-Cache viele Zugriffe. Direct I/O aktivieren, eine Testgröße deutlich über dem RAM wählen und die Testdatei auf das zu messende Laufwerk legen.
Passende Tools
Passende Guides
Hardware
Alten PC als Homeserver nutzen: Was er taugt und was er wirklich kostet
Der ausgemusterte Office-PC oder All-in-One als erster Homeserver: wann sich das lohnt, wann der Stromverbrauch die Ersparnis auffrisst und wie du sinnvoll startest.
Selfhosting
Unraid vs. Proxmox vs. TrueNAS: Welches System für deinen Homeserver?
Die drei großen Homeserver-Systeme im ehrlichen Vergleich: Stärken, Schwächen, Storage-Philosophie und eine klare Empfehlung je nach Einsatzzweck.
Security
Backup-Strategie für zuhause: Die 3-2-1-Regel praktisch umgesetzt
RAID ist kein Backup: Wie du mit der 3-2-1-Regel, Versionierung und einer Offsite-Kopie deine Daten wirklich absicherst — mit konkretem Setup fürs Homelab.
Proxmox
Proxmox VE installieren: Schritt für Schritt zum ersten Hypervisor
Proxmox VE von der ISO bis zur ersten VM: Installation, Dateisystem-Wahl, No-Subscription-Repository, Updates und die ersten sinnvollen Einstellungen.