12 Das richtige Dateisystem für MongoDB

Das Dateisystem ist die Basis, auf der MongoDB operiert. Es bestimmt, wie Daten physisch geschrieben und gelesen werden, wie Metadaten verwaltet werden und wie das System sich bei Crashes verhält. Eine Datenbank ist nur so gut wie das Dateisystem darunter – eine Erkenntnis, die oft erst schmerzhaft gelernt wird, wenn Performance-Probleme oder Datenverluste auf suboptimale Filesystem-Wahl zurückzuführen sind.

MongoDB stellt spezifische Anforderungen an das Dateisystem. Es erzeugt viele Schreiboperationen, sowohl sequentiell als auch random. Große Dateien sind die Norm, nicht die Ausnahme – ein produktiver MongoDB-Server kann Hunderte Gigabytes oder Terabytes in einzelnen Dateien speichern. Die WiredTiger Storage Engine nutzt intensiv Memory-Mapped I/O und Journaling, was vom Filesystem effizient unterstützt werden muss. Die Wahl des richtigen Dateisystems ist deshalb keine triviale Entscheidung, sondern hat messbare Auswirkungen auf Performance und Zuverlässigkeit.

12.1 Linux: XFS und ext4 als bewährte Standards

In der Linux-Welt hat sich die Diskussion weitgehend auf zwei Dateisysteme konzentriert: XFS und ext4. Beide sind ausgereift, gut dokumentiert und in Millionen Produktionssystemen bewährt. Die Frage ist nicht, ob sie funktionieren, sondern welches für spezifische MongoDB-Workloads besser geeignet ist.

ext4 ist das Standard-Dateisystem vieler Linux-Distributionen und der direkte Nachfolger von ext3. Es unterstützt Dateien bis 16 TB und Dateisysteme bis 1 Exabyte, was für praktisch alle MongoDB-Deployments mehr als ausreichend ist. Das Journaling von ext4 protokolliert Metadaten-Änderungen, was nach Crashes schnelle Recovery ermöglicht und Dateisystem-Konsistenz sicherstellt. Die Performance ist solide für gemischte Workloads – weder außergewöhnlich schnell noch besonders langsam, sondern verlässlich ausgewogen.

Der große Vorteil von ext4 ist seine Verbreitung. Praktisch jeder Linux-Administrator kennt es, Tools und Dokumentation sind umfassend, und potenzielle Probleme sind meist schon von anderen gelöst worden. Für MongoDB-Installationen mit moderater Last – Entwicklungsumgebungen, kleinere Produktionssysteme, Deployments mit ein paar hundert GB Daten – ist ext4 eine solide Wahl. Es erfordert keine speziellen Tunings und funktioniert out-of-the-box gut.

XFS hingegen wurde speziell für große Dateien und hohe Performance designed. Entwickelt ursprünglich von Silicon Graphics für IRIX, ist es seit den 2000ern auf Linux portiert und hat sich als bevorzugtes Dateisystem für Datenbanken etabliert. Red Hat nutzt XFS als Standard seit RHEL 7, MongoDB Inc. empfiehlt es explizit für Produktionsumgebungen mit WiredTiger.

Die Architektur von XFS ist grundlegend anders als ext4. Metadaten-Management ist paralleler – mehrere Threads können gleichzeitig verschiedene Teile des Dateisystems modifizieren, ohne sich zu blockieren. Die Allokationsstrategie ist optimiert für große, sequentielle Writes, wie sie bei Datenbank-Checkpoints typisch sind. Das Extent-basierte Design minimiert Fragmentierung selbst bei intensiver Nutzung über lange Zeiträume.

In Benchmarks zeigt XFS konsistent bessere Performance für MongoDB-typische Workloads. Besonders bei vielen parallelen Schreiboperationen – mehrere Verbindungen, die gleichzeitig Dokumente einfügen oder updaten – übertrifft XFS ext4 oft um 20-30%. Bei großen sequentiellen Writes, wie sie beim Sharding oder bei Backups vorkommen, ist der Unterschied noch deutlicher.

Ein praktisches Beispiel verdeutlicht die Unterschiede. Ein MongoDB-Replica-Set mit intensiver Schreib-Last auf ext4 könnte Durchsätze um 10.000 Inserts pro Sekunde erreichen. Dasselbe Setup auf XFS erreicht 12.000-13.000 Inserts – ein signifikanter Unterschied für produktive Systeme. Die Latenz-Perzentile verbessern sich ebenfalls – P99-Latenz könnte von 50ms auf 35ms fallen.

Diese Vorteile kommen nicht ohne Trade-offs. XFS ist komplexer als ext4, was Troubleshooting erschweren kann. Die Recovery nach schweren Filesystem-Corruptions ist weniger intuitiv. Und während ext4 seit Jahren extrem stabil ist, hatte XFS in der Vergangenheit vereinzelt Bugs bei Edge Cases. Diese sind mittlerweile behoben, aber die Historie erklärt, warum manche Administratoren konservativer bleiben.

12.2 Windows: NTFS ohne Alternative

Auf Windows-Systemen stellt sich die Frage nicht – NTFS ist die einzige praktikable Option für MongoDB. Das Dateisystem ist seit Windows NT 3.1 (1993) verfügbar und über Jahrzehnte gereift. Es unterstützt große Dateien, Journaling, Kompression und Verschlüsselung. MongoDB ist explizit für NTFS optimiert und nutzt dessen APIs effizient.

Die Performance von NTFS ist für MongoDB-Zwecke adäquat, erreicht aber typischerweise nicht die Werte von XFS auf Linux. Dies liegt teilweise am Dateisystem selbst, größtenteils aber am Windows-Kernel, der I/O anders scheduled und priorisiert als Linux. Für Entwicklungsumgebungen oder kleinere Produktionssysteme ist dies meist irrelevant. Für hochperformante Deployments mit tausenden Transaktionen pro Sekunde zeigen sich die Limitierungen.

Eine Besonderheit von NTFS ist die Fragmentierung. Während moderne Dateisysteme wie XFS oder ext4 Fragmentierung aggressiv vermeiden, neigt NTFS dazu, über Zeit zu fragmentieren, besonders bei intensiver Nutzung. Regelmäßige Defragmentierung kann notwendig sein – etwas, das auf Linux-Dateisystemen praktisch nie erforderlich ist.

Die Konfigurationsmöglichkeiten sind limitierter als auf Linux. Mount-Optionen wie noatime existieren nicht in dieser Form. Windows-spezifische Optimierungen wie das Deaktivieren von 8.3-Dateinamen oder das Tuning der NTFS-Master-File-Table können helfen, aber die Verbesserungen sind marginal verglichen mit einem Wechsel von NTFS zu XFS durch Migration nach Linux.

12.3 Spezial-Dateisysteme: ZFS und Btrfs

ZFS und Btrfs sind moderne Copy-on-Write-Dateisysteme mit erweiterten Features wie Snapshots, Checksumming und integriertem RAID. Beide sind technisch beeindruckend und für bestimmte Anwendungsfälle hervorragend geeignet. Für MongoDB sind sie allerdings nur bedingt empfehlenswert.

ZFS, ursprünglich von Sun Microsystems für Solaris entwickelt, ist extrem robust und datenintegritätsbesessen. Jeder Block hat eine Checksum, Silent Data Corruption wird erkannt und korrigiert. Snapshots sind instant und platzsparend. Das integrierte RAID (RAIDZ) ist flexibler als Hardware-RAID. Diese Features sind verlockend, besonders für Backup-Szenarien.

Der Haken: ZFS ist I/O-intensiv. Copy-on-Write bedeutet, dass Änderungen nie in-place geschrieben werden, sondern neue Blöcke allokiert werden. Dies fragmentiert über Zeit und erzeugt Write Amplification – eine Änderung führt zu mehreren physischen Writes. Für MongoDB, das bereits intensiv schreibt, ist dies suboptimal. In Benchmarks liegt ZFS Performance oft 10-20% unter XFS.

Ein weiteres Problem ist der RAM-Hunger. ZFS nutzt ARC (Adaptive Replacement Cache) als eigenen Cache-Layer. Dies konkurriert mit WiredTiger’s Cache um RAM. Ein System muss sorgfältig konfiguriert werden, um beide Caches zu balancieren – sonst verschwendet man Speicher oder leidet unter thrashing.

Btrfs, oft als “Linux-ZFS” bezeichnet, verfolgt ähnliche Ziele mit anderem Design. Es ist in den Linux-Kernel integriert, was Lizenzprobleme vermeidet (ZFS ist CDDL-lizensiert, inkompatibel mit GPL). Die Features sind ähnlich: Copy-on-Write, Snapshots, Checksums. Die Stabilität ist aber umstritten. Während große Unternehmen wie Facebook Btrfs produktiv nutzen, gibt es immer noch Reports von Datenverlust unter bestimmten Bedingungen.

Für MongoDB empfiehlt sich Btrfs nicht als erste Wahl. Die Performance ist inkonsistent – manchmal auf Par mit ext4, manchmal deutlich schlechter, abhängig von Workload und Konfiguration. Die Copy-on-Write-Semantik ist ungünstig für Datenbanken mit vielen In-Place-Updates. Facebook nutzt Btrfs trotzdem, aber mit massivem Engineering-Aufwand für Tuning und Monitoring – nichts, was typische Deployments rechtfertigt.

Dateisystem Vorteile Nachteile MongoDB-Eignung
XFS Beste Performance, stabil, gut skalierend Etwas komplexer als ext4 Hervorragend (empfohlen)
ext4 Sehr stabil, weit verbreitet, einfach Etwas langsamere Performance Gut (für moderate Workloads)
NTFS Standard auf Windows, stabil Performance unter Linux-Systemen Akzeptabel (Windows-Standard)
ZFS Hohe Datenintegrität, Snapshots Write Amplification, RAM-hungrig Bedingt (nur für spezielle Fälle)
Btrfs Moderne Features, Linux-integriert Stabilitätsbedenken, inkonsistente Performance Nicht empfohlen

12.4 Konfiguration und Tuning: Mount-Optionen

Das Dateisystem zu wählen ist nur der erste Schritt. Die Konfiguration, speziell Mount-Optionen, beeinflusst Performance erheblich. Die wichtigste Option für MongoDB ist noatime.

Standardmäßig aktualisiert Linux bei jedem Lesezugriff auf eine Datei deren Access-Time. Dies bedeutet: Jeder Read triggert einen Write der Metadaten. Für eine Datenbank, die kontinuierlich liest, ist dies absurd ineffizient. Die Option noatime deaktiviert dieses Verhalten. Reads bleiben Reads, keine versteckten Writes.

Die Messung des Impacts ist simpel: Ein MongoDB-Server unter Last generiert ohne noatime 20-30% mehr Schreiboperationen als mit. Diese unnötigen Writes belasten Disks, erhöhen Latenz und verschwenden I/O-Kapazität. noatime ist eine der einfachsten und wirkungsvollsten Optimierungen für MongoDB auf Linux.

Die Konfiguration erfolgt in /etc/fstab:

UUID=xxx  /var/lib/mongodb  xfs  defaults,noatime  0 2

Nach einem Remount mit mount -o remount /var/lib/mongodb ist die Änderung aktiv. Ein mount | grep mongodb verifiziert, dass noatime gesetzt ist.

Für ext4 gibt es zusätzliche relevante Optionen. barrier=1 erzwingt, dass Write-Barriers respektiert werden – der Kernel stellt sicher, dass Daten physisch auf Disk sind, bevor er “committed” signalisiert. Dies ist kritisch für Datenintegrität, kostet aber Performance. Für MongoDB mit WiredTiger, das selbst Journaling macht, könnte man argumentieren, dass Filesystem-Barriers redundant sind. In der Praxis: Lieber sicher gehen und aktiviert lassen, außer Benchmarks zeigen, dass der Performance-Hit untragbar ist.

Für SSDs ist discard oder fstrim relevant. SSDs benötigen TRIM-Befehle, um gelöschte Blöcke zurückzugewinnen und als “frei” zu markieren. Ohne TRIM füllt sich die SSD über Zeit mit “stale data”, was Write Amplification erhöht und Performance degradiert. Die Mount-Option discard sendet TRIM-Befehle synchron bei jeder Delete-Operation. Dies ist sicher, kostet aber Performance.

Die Alternative: Ein periodischer fstrim via Cron, etwa wöchentlich. Dies batcht TRIM-Operationen, minimiert Performance-Impact, erfordert aber, dass die SSD temporär mit stale data umgehen kann. Moderne SSDs kommen damit gut zurecht. Für MongoDB ist wöchentliches fstrim typischerweise die bessere Wahl als continuous discard.

12.5 Hardware-Überlegungen: SSDs vs. HDDs

Das Dateisystem interagiert eng mit der darunterliegenden Hardware. SSDs und HDDs haben fundamental unterschiedliche Charakteristiken, was Dateisystem-Wahl und -Konfiguration beeinflusst.

HDDs haben bewegliche Teile und sind optimiert für sequentielle Zugriffe. Random Reads/Writes sind langsam – jeder Zugriff erfordert Seek-Time und Rotational Latency. Für MongoDB auf HDDs ist es kritisch, dass das Dateisystem Random-I/O minimiert. XFS’ Allokationsstrategie hilft hier, indem sie zusammengehörige Daten clustert. Ext4 tut dies ebenfalls, aber weniger aggressiv.

Die Blockgröße sollte auf HDDs größer sein – 16 KB oder mehr statt der typischen 4 KB. Dies reduziert Overhead und verbessert sequentielle Performance. MongoDB mit WiredTiger nutzt intern Seiten von 4-32 KB; eine Filesystem-Blockgröße von 16 KB matched dies gut.

SSDs eliminieren Seek-Time – Random I/O ist fast so schnell wie Sequential. Dies ändert das Spiel. Dateisystem-Fragmentierung ist weniger kritisch. Blockgrößen können kleiner sein, weil kein Overhead für Seeks anfällt. Moderne NVMe-SSDs erreichen Latencies unter 100 Mikrosekunden – schneller als viele Netzwerk-Roundtrips.

Für MongoDB auf SSDs ist XFS immer noch empfohlen, aber die Vorteile über ext4 sind kleiner als auf HDDs. Der Hauptgewinn von SSDs liegt nicht im Dateisystem-Tuning, sondern in der Hardware selbst. Eine MongoDB-Installation, die auf HDDs mit 200 IOPS kämpft, fliegt auf SSDs mit 50.000 IOPS.

Ein praktischer Tipp: Raid nicht vergessen. Ein einzelnes SSD-Laufwerk ist ein Single Point of Failure. RAID-1 (Mirroring) oder RAID-10 (Striped Mirrors) bieten Redundanz. Software-RAID mit mdadm funktioniert gut und vermeidet Hardware-RAID-Controller mit ihren Cache-Problemen bei Stromausfall. ZFS mit RAIDZ ist eine Alternative, aber wie erwähnt mit Performance-Caveats.

12.6 Capacity Planning und Dateisystem-Größe

Die Dimensionierung des Dateisystems erfordert Planung. MongoDB-Datenbanken wachsen, oft schneller als ursprünglich angenommen. Ein Dateisystem, das voll läuft, ist ein produktionskritisches Problem. Die Reaktion – Dateisystem vergrößern – ist unter Last riskant und oft downtime-intensiv.

Die Faustregel: Planung für 2-3x die erwartete Datenmenge. Eine Datenbank, die 100 GB Daten halten soll, sollte mindestens 200-300 GB Dateisystem haben. Dies klingt verschwenderisch, ist aber pragmatisch. Der Overhead für WiredTiger-Journal, Checkpoints, temporäre Dateien während Builds und unerwartetes Datenwachstum summiert sich schnell.

XFS und ext4 können online vergrößert werden, was hilft. Ein xfs_growfs oder resize2fs kann ein gemountetes Dateisystem erweitern, wenn darunter liegendes Volume wächst (etwa in Cloud-Umgebungen oder mit LVM). Dies ist eleganter als Downtime für Resize. Schrumpfen ist komplizierter – XFS unterstützt es gar nicht, ext4 nur offline.

Monitoring ist essentiell. Ein Alert bei 70% Dateisystem-Nutzung gibt Zeit zu reagieren, bevor das System kritisch wird. Bei 90% ist es dringend, bei 95% akut. Tools wie df, du oder Monitoring-Systeme wie Prometheus können dies automatisieren.

Die Wahl des richtigen Dateisystems für MongoDB ist keine akademische Übung, sondern hat messbare Konsequenzen für Performance, Zuverlässigkeit und operative Komplexität. Für die meisten Produktionssysteme ist die Empfehlung klar: Linux mit XFS, konfiguriert mit noatime und bei Bedarf periodischem fstrim. Für moderate Workloads oder bei bestehender ext4-Expertise ist ext4 ebenfalls solide. Windows nutzt NTFS, weil es keine Alternative gibt. Spezial-Dateisysteme wie ZFS sollten nur bei sehr spezifischen Anforderungen in Betracht gezogen werden, und selbst dann mit dem Bewusstsein, dass sie Komplexität und potenzielle Performance-Trade-offs mitbringen.