ext4

Großes Dateisystem Das ext4-Dateisystem kann Volumes mit einer Größe von bis zu 1 Exbibyte (EiB) und einzelne Dateien mit einer Größe von bis zu 16 Tebibyte (TiB) mit der Standardblockgröße von 4 KiB unterstützen. Die maximale Datei-, Verzeichnis- und Dateisystemgröße wächst mindestens proportional mit der Blockgröße des Dateisystems bis zur maximalen Blockgröße von 64 KiB, die auf ARM- und PowerPC/Power ISA-CPUs verfügbar ist. Extents Extents ersetzen das traditionelle Blockzuordnungsschema, das von ext2 und ext3 verwendet wird. Ein Extent ist ein Bereich von zusammenhängenden physischen Blöcken, der die Leistung großer Dateien verbessert und die Fragmentierung reduziert. Ein einzelner Extent in ext4 kann bis zu 128 MiB zusammenhängenden Speicherplatz mit einer Blockgröße von 4 KiB abbilden. Es können vier Extents direkt in der Inode gespeichert werden. Wenn mehr als vier Extents zu einer Datei gehören, werden die restlichen Extents in einem Baum indiziert. Abwärtskompatibilität ext4 ist abwärtskompatibel zu ext3 und ext2, wodurch es möglich ist, ext3 und ext2 als ext4 zu mounten. Dies führt zu einer leichten Verbesserung der Leistung, da bestimmte neue Funktionen der ext4-Implementierung auch mit ext3 und ext2 verwendet werden können, wie z. B. der neue Blockzuweisungsalgorithmus, ohne das Format auf der Festplatte zu beeinflussen. ext3 ist teilweise vorwärtskompatibel mit ext4. Praktisch wird ext4 nicht als ext3-Dateisystem eingehängt, es sei denn, bestimmte neue Funktionen werden bei der Erstellung deaktiviert, wie ^extent, ^flex_bg, ^huge_file, ^uninit_bg, ^dir_nlink und ^extra_isize. Dauerhafte Vorabzuweisung ext4 kann Speicherplatz auf der Festplatte für eine Datei vorab zuweisen. Bei den meisten Dateisystemen würden dazu bei der Erstellung Nullen in die Datei geschrieben werden. In ext4 (und einigen anderen Dateisystemen wie XFS) kann fallocate(), ein neuer Systemaufruf im Linux-Kernel, verwendet werden. Der zugewiesene Speicherplatz wäre garantiert und wahrscheinlich zusammenhängend. Diese Situation kann für Medien-Streaming und Datenbanken genutzt werden. Verzögerte Zuweisung ext4 verwendet eine Leistungstechnik namens allocate-on-flush, auch bekannt als verzögerte Zuweisung. Das heißt, ext4 verzögert die Blockzuweisung, bis die Daten auf die Festplatte geschrieben werden. (Im Gegensatz dazu weisen einige Dateisysteme Blöcke sofort zu, selbst wenn die Daten in einen Schreibcache gehen.) Die verzögerte Zuweisung verbessert die Leistung und verringert die Fragmentierung, da effektiv größere Datenmengen auf einmal zugewiesen werden. Unbegrenzte Anzahl von Unterverzeichnissen ext4 begrenzt die Anzahl von Unterverzeichnissen in einem einzelnen Verzeichnis nicht, außer durch die inhärente Größenbegrenzung des Verzeichnisses selbst. (In ext3 kann ein Verzeichnis maximal 32.000 Unterverzeichnisse haben.) Um größere Verzeichnisse zu ermöglichen und die Leistung aufrechtzuerhalten, schaltet ext4 in Linux 2.6.23 und später standardmäßig HTree-Indizes (eine spezialisierte Version eines B-Baums) ein, wodurch Verzeichnisse mit bis zu 10-12 Millionen Einträgen im zweistufigen HTree-Index gespeichert werden können und die Verzeichnisgröße auf 2 GB bei einer Blockgröße von 4 KiB begrenzt wird, abhängig von der Länge des Dateinamens. In Linux 4.12 und später ermöglichte das largedir-Feature einen 3-Ebenen-HTree und Verzeichnisgrößen über 2 GB, was etwa 6 Milliarden Einträge in einem einzigen Verzeichnis erlaubte. Journal-Prüfsummen ext4 verwendet Prüfsummen im Journal, um die Zuverlässigkeit zu erhöhen, da das Journal eine der am häufigsten verwendeten Dateien auf der Festplatte ist. Diese Funktion hat einen Nebeneffekt: Sie kann eine I/O-Wartezeit auf der Platte während des Journalings vermeiden, was die Leistung leicht verbessert. Die Journal-Prüfsummenbildung wurde von einem Forschungsartikel der University of Wisconsin mit dem Titel IRON File Systems inspiriert (insbesondere Abschnitt 6 mit dem Titel „Transaktionsprüfsummen“), mit Änderungen innerhalb der Implementierung von zusammengesetzten Transaktionen, die vom IRON-Dateisystem durchgeführt werden (ursprünglich von Sam Naghshineh auf dem RedHat-Gipfel vorgeschlagen). Metadaten-Prüfsummenbildung Seit Linux-Kernel 3.5 aus dem Jahr 2012 Schnellere Dateisystemprüfung In ext4 werden nicht zugewiesene Blockgruppen und Abschnitte der Inode-Tabelle als solche markiert. Dadurch kann e2fsck diese komplett überspringen und die Zeit für die Überprüfung des Dateisystems erheblich verkürzen. Linux 2.6.24 implementiert diese Funktion.

fsck-Zeitabhängigkeit von der Inode-Anzahl (ext3 vs. ext4)

Multiblock-Allokator Wenn ext3 an eine Datei anhängt, ruft es den Block-Allokator auf, einmal für jeden Block. Folglich können Dateien bei mehreren gleichzeitigen Schreibvorgängen leicht auf der Festplatte fragmentiert werden. ext4 verwendet jedoch eine verzögerte Zuweisung, die es ermöglicht, Daten zu puffern und Gruppen von Blöcken zuzuweisen. Folglich kann der Multiblock-Allokator bessere Entscheidungen über die zusammenhängende Zuordnung von Dateien auf der Festplatte treffen. Der Multiblock-Allokator kann auch verwendet werden, wenn Dateien im O_DIRECT-Modus geöffnet werden. Diese Funktion hat keinen Einfluss auf das Plattenformat. Verbesserte Zeitstempel Da Computer im Allgemeinen schneller werden und Linux immer häufiger für unternehmenskritische Anwendungen eingesetzt wird, ist die Granularität von sekundenbasierten Zeitstempeln nicht mehr ausreichend. Um dieses Problem zu lösen, bietet ext4 Zeitstempel, die in Nanosekunden gemessen werden. Außerdem werden 2 Bits des erweiterten Zeitstempelfeldes zu den höchstwertigen Bits des Sekundenfeldes der Zeitstempel hinzugefügt, um das Jahr 2038-Problem um weitere 408 Jahre zu verschieben. ext4 bietet auch Unterstützung für Zeitstempel zum Zeitpunkt der Erstellung. Aber wie Theodore Ts’o anmerkt, ist es zwar einfach, ein zusätzliches Feld für das Erstellungsdatum in die Inode einzufügen (und damit die Unterstützung für diese Zeitstempel in ext4 technisch zu ermöglichen), aber es ist schwieriger, die notwendigen Systemaufrufe wie stat() (was wahrscheinlich eine neue Version erfordern würde) und die verschiedenen Bibliotheken, die von ihnen abhängen (wie glibc), zu ändern oder hinzuzufügen. Diese Änderungen werden die Koordination vieler Projekte erfordern. Daher ist das von ext4 gespeicherte Erstellungsdatum derzeit nur für Benutzerprogramme unter Linux über diestatx()API verfügbar. Projektkontingente Die Unterstützung für Projektkontingente wurde in Linux-Kernel 4.4 am 8. Januar 2016 hinzugefügt. Diese Funktion ermöglicht die Zuweisung von Festplatten-Quota-Limits zu einer bestimmten Projekt-ID. Die Projekt-ID einer Datei ist eine 32-Bit-Nummer, die in jeder Datei gespeichert ist und an alle Dateien und Unterverzeichnisse vererbt wird, die unter einem übergeordneten Verzeichnis mit einer zugewiesenen Projekt-ID erstellt wurden. Dies ermöglicht die Zuweisung von Quota-Limits für einen bestimmten Unterverzeichnisbaum unabhängig von den Dateizugriffsrechten auf die Datei, wie z. B. Benutzer- und Projektquotas, die von der UID und GID abhängig sind. Der Hauptunterschied besteht darin, dass die gleiche Projekt-ID mehreren Verzeichnissen der obersten Ebene zugewiesen werden kann und nicht streng hierarchisch ist. Transparente Verschlüsselung Die Unterstützung für transparente Verschlüsselung wurde im Linux-Kernel 4.1 im Juni 2015 hinzugefügt. Lazy initialization Die lazyinit-Funktion ermöglicht es, Inode-Tabellen im Hintergrund zu bereinigen, was die Initialisierung beim Erstellen eines neuen ext4-Dateisystems beschleunigt. Sie ist seit 2010 in der Linux-Kernel-Version 2.6.37 verfügbar. Schreibsperren ext4 aktiviert standardmäßig Schreibsperren. Dadurch wird sichergestellt, dass die Metadaten des Dateisystems korrekt auf die Festplatte geschrieben und geordnet werden, selbst wenn die Schreib-Caches an Leistung verlieren. Dies geht mit Leistungseinbußen einher, insbesondere bei Anwendungen, die fsync stark nutzen oder viele kleine Dateien erstellen und löschen. Bei Festplatten mit einem batteriegepufferten Schreibcache kann das Deaktivieren von Barrieren (Option ‚barrier=0‘) die Leistung sicher verbessern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.