Zum Inhalt springen

Ext4: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
 
Zeile 15: Zeile 15:
* In Linux 4.3 wurde der Code des nativen Treibers für ext3 endgültig entfernt
* In Linux 4.3 wurde der Code des nativen Treibers für ext3 endgültig entfernt
* Der ext4-Treiber unterstützt zukünftig weiterhin ext3
* Der ext4-Treiber unterstützt zukünftig weiterhin ext3
<ref>{{Internetquelle |url=http://www.golem.de/news/betriebssysteme-in-linux-4-3-fehlt-der-ext3-treiber-1509-116294.html |titel=In Linux 4.3 fehlt der Ext3-Treiber |autor=Jörg Thoma |werk=[[Golem.de]] |datum=2015-09-15 |abruf=2015-09-15}}</ref>
 
<ref>{{Internetquelle |url=http://article.gmane.org/gmane.linux.kernel/2031297 |titel=Re: &#x5B;GIT PULL&#x5D; Ext3 removal, quota & udf fixes |autor=[[Linus Torvalds]] |werk=[[Gmane]].linux.kernel |datum=2015-09-02 |abruf=2015-09-15 |offline=ja |archiv-url=https://web.archive.org/web/20170220095125/http://article.gmane.org/gmane.linux.kernel/2031297 |archiv-datum=2017-02-20}}</ref>
 


== Technische Eigenschaften ==
== Technische Eigenschaften ==
''ext4'' benutzt 48 [[Bit]] große Blocknummern (ext3 hatte 32 Bit) und unterstützt so [[Partition (Datenträger)|Partitionen]] oder {{lang|en|[[Volume (Datenspeicher)|Volumes]]}}, die bis zu 1&nbsp;[[Yobibyte|YiB]]<ref name=kerneldoc /> groß sind ({{lang|en|Volumes}} größer als 16&nbsp;[[Tebibyte|TiB]] erst ab [[e2fsprogs]] Version 1.42 vom 29
''ext4'' benutzt 48 [[Bit]] große Blocknummern (ext3 hatte 32 Bit) und unterstützt so [[Partition (Datenträger)|Partitionen]] oder {{lang|en|[[Volume (Datenspeicher)|Volumes]]}}, die bis zu 1&nbsp;[[Yobibyte|YiB]] groß sind ({{lang|en|Volumes}} größer als 16&nbsp;[[Tebibyte|TiB]] erst ab [[e2fsprogs]] Version 1.42 vom 29
* November 2011), im Gegensatz zu [[ext3]], das nur 32&nbsp;[[Tebibyte|TiB]] zulässt (abhängig von der Größe einer [[Speicherseite]] in der jeweiligen Maschinenarchitektur, bei [[IA-32]] zum Beispiel sind nur maximal 2<sup>32</sup> · 4&nbsp;[[Kibibyte|KiB]] = 16&nbsp;TiB möglich)
* November 2011), im Gegensatz zu [[ext3]], das nur 32&nbsp;[[Tebibyte|TiB]] zulässt (abhängig von der Größe einer [[Speicherseite]] in der jeweiligen Maschinenarchitektur, bei [[IA-32]] zum Beispiel sind nur maximal 2<sup>32</sup> · 4&nbsp;[[Kibibyte|KiB]] = 16&nbsp;TiB möglich)
* Auch kann die Adressierung von Dateien über ''Extents'' erfolgen, wobei Speichereinheiten zu einem zusammenhängenden Block zusammengefasst werden
* Auch kann die Adressierung von Dateien über ''Extents'' erfolgen, wobei Speichereinheiten zu einem zusammenhängenden Block zusammengefasst werden
* Dies führt zu einer Reduzierung des Zusatzaufwands ([[Random-Access Memory|RAM]], [[Eingabe und Ausgabe|E/A]]-Zugriffe und [[Transaktion (Informatik)|Transaktionen]]) für große Dateien, weil nur die Nummer des ersten Blocks und deren Anzahl gespeichert werden muss (und nicht jeder Block einzeln) und kann die Leistung im Betrieb steigern
* Dies führt zu einer Reduzierung des Zusatzaufwands ([[Random-Access Memory|RAM]], [[Eingabe und Ausgabe|E/A]]-Zugriffe und [[Transaktion (Informatik)|Transaktionen]]) für große Dateien, weil nur die Nummer des ersten Blocks und deren Anzahl gespeichert werden muss (und nicht jeder Block einzeln) und kann die Leistung im Betrieb steigern


Seit Veröffentlichung im Kernel 2.6.19 sind folgende Verbesserungen implementiert worden:<ref name="man_Ext4(5)">{{Internetquelle |titel=EXT4(5) File Formats Manual |datum=2023-12-22 |url=http://man7.org/linux/man-pages/man5/ext4.5.html |abruf=2024-03-12 |sprache=en}}</ref>
Seit Veröffentlichung im Kernel 2.6.19 sind folgende Verbesserungen implementiert worden:


* ab Kernel 2.6.23: mehr als 32.000 [[Verzeichnisstruktur|Unterverzeichnisse]] (Verzeichnisse: <code>dir_nlink</code>, Dateien: <code>large_dir</code>)
* ab Kernel 2.6.23: mehr als 32.000 [[Verzeichnisstruktur|Unterverzeichnisse]] (Verzeichnisse: <code>dir_nlink</code>, Dateien: <code>large_dir</code>)
Zeile 42: Zeile 42:
* ab Kernel 4.13: Maximale Anzahl und Größe von erweiterten Attributen pro Datei erhöht (<code>ea_inode</code>)
* ab Kernel 4.13: Maximale Anzahl und Größe von erweiterten Attributen pro Datei erhöht (<code>ea_inode</code>)
* ab Kernel 4.13: Maximale Anzahl von Dateien per Verzeichnis erhöht (<code>large_dir</code>)
* ab Kernel 4.13: Maximale Anzahl von Dateien per Verzeichnis erhöht (<code>large_dir</code>)
* ab Kernel 5.2: [[Case sensitivity]] kann nun optional ausgeschaltet werden (<code>casefold</code>)<ref name="heiseonline_4424484">{{Heise online |ID=4424484 |Titel=Kernel-Log: Linux 5.2 |Autor=Thorsten Leemhuis |Datum=2019-06-28 |Artikelseite=2 |Seitentitel=Ext4-Dateisystem kann jetzt Groß- und Kleinschreibung ignorieren |SeitenURL=https://www.heise.de/ct/artikel/Linux-5-2-Performance-zurueckgewinnen-und-selbstbeschreibender-Kernel-4424484.html?seite=2 |Zugriff=2019-06-30 |Zitat=Entwickler haben dieses "Casefold Feature"-Feature entwickelt, um es bei Android einzusetzen – bislang nutzt das Mobilbetriebssystem einen eher uneleganten Hack in Form einer "Wrapfs" genannten Zwischenschicht, um Case Insensitivity mit Ext4 zu erzielen.}}</ref>
* ab Kernel 5.2: [[Case sensitivity]] kann nun optional ausgeschaltet werden (<code>casefold</code>)
* ab Kernel 5.4: Unterstützung von mit ''verity'' geschützten Dateien (<code>verity</code>)
* ab Kernel 5.4: Unterstützung von mit ''verity'' geschützten Dateien (<code>verity</code>)
* ab Kernel 5.5: Unterstützung von als ''stable'' markierten ''inode'' Nummern und ''UUIDs'' (<code>stable_inodes</code>)
* ab Kernel 5.5: Unterstützung von als ''stable'' markierten ''inode'' Nummern und ''UUIDs'' (<code>stable_inodes</code>)


Jede dieser Verbesserungen in einer neuen ext4-Version im Linux-Kernel bringt es mit sich, dass damit formatierte {{lang|en|Volumes}}, z.&nbsp;B
Jede dieser Verbesserungen in einer neuen ext4-Version im Linux-Kernel bringt es mit sich, dass damit formatierte {{lang|en|Volumes}}, z.&nbsp;B
* auf (Wechsel-)datenträgern, auf einem anderen System mit älterer Version des Kernels nicht gelesen werden können,<ref name="Example_01">{{Internetquelle |titel=Lesen eines Datenträgers wegen neuer Funktionen von Ext4 nicht möglich |werk=[[Stack Exchange]] |datum=2017-04-14 |url=https://unix.stackexchange.com/questions/287159/linux-couldnt-mount-rdwr-because-of-unsupported-optional-features-400 |abruf=2020-04-28 |sprache=en}}</ref> sofern man auf dem Datenträger die neu hinzugekommenen Funktionen nicht zuvor abschaltet, wofür Hilfsprogramme zur Verfügung stehen.<ref name="man_tune2fs">{{Internetquelle |titel=tune2fs(8) - Linux man page |datum=2020-04-30 |url=http://man7.org/linux/man-pages/man8/tune2fs.8.html |abruf=2020-05-01 |sprache=en}}</ref> Die meisten Distributionen verwenden beim Formatieren Voreinstellungen, die bestimmte neuere Funktionen automatisch aktivieren.<ref name="man_mke2fs.conf">{{Internetquelle |titel=mke2fs.conf(5) - Linux man page |datum=2020-04-30 |url=http://man7.org/linux/man-pages/man5/mke2fs.conf.5.html |abruf=2020-05-01 |sprache=en}}</ref>
* auf (Wechsel-)datenträgern, auf einem anderen System mit älterer Version des Kernels nicht gelesen werden können,


Weitere Verbesserungen gegenüber [[ext3]]/[[ext2]]
Weitere Verbesserungen gegenüber [[ext3]]/[[ext2]]
Zeile 54: Zeile 54:
: Die wichtigste Neuerung in ext4
: Die wichtigste Neuerung in ext4
* Andere Dateisysteme wie z.&nbsp;B. [[Journaled File System|JFS]] oder [[XFS (Dateisystem)|XFS]] bieten diese Funktion schon lange
* Andere Dateisysteme wie z.&nbsp;B. [[Journaled File System|JFS]] oder [[XFS (Dateisystem)|XFS]] bieten diese Funktion schon lange
* Es bringt Geschwindigkeitsvorteile bei der Verwaltung großer Dateien und beugt der Fragmentierung vor.<ref>[https://ext4.wiki.kernel.org/index.php/Ext4_Howto#Extents Ext4 Wiki: Extents]</ref><ref>[https://www.heise.de/ct/artikel/Das-Linux-Dateisystem-Ext4-221262.html Das Linux-Dateisystem Ext4]</ref><ref>[http://kernelnewbies.org/Ext4#head-7c5fd53118e8b888345b95cc11756346be4268f4 Linux Kernel Newbies - ext4]</ref>
* Es bringt Geschwindigkeitsvorteile bei der Verwaltung großer Dateien und beugt der Fragmentierung vor.
:Funktionsspezifische [[mount (Unix)|mount]]-Optionen: extent.<ref>[http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob_plain;h=6a4adcae9f9a699d624a0bb114f8e0d5f86161c5;f=Documentation/filesystems/ext4.txt Kerneldoc zu ext4]{{Toter Link|date=2018-04 |url=http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git%3Ba%3Dblob_plain%3Bh%3D6a4adcae9f9a699d624a0bb114f8e0d5f86161c5%3Bf%3DDocumentation%2Ffilesystems%2Fext4.txt}}</ref> Diese Option ist nicht in der [[Manpage]] gelistet, da sie standardmäßig genutzt wird, wenn eine entsprechende ext4-Partition damit eingerichtet wurde oder eine bestehende ext3-Partition zu einer ext4-Partition mit der <code>tune2fs</code> Option <code>-O extent</code> konvertiert wurde
:Funktionsspezifische [[mount (Unix)|mount]]-Optionen: extent. Diese Option ist nicht in der [[Manpage]] gelistet, da sie standardmäßig genutzt wird, wenn eine entsprechende ext4-Partition damit eingerichtet wurde oder eine bestehende ext3-Partition zu einer ext4-Partition mit der <code>tune2fs</code> Option <code>-O extent</code> konvertiert wurde


; Verbesserte [[Zeitstempel]]
; Verbesserte [[Zeitstempel]]
: ext4 bietet Zeitstempel auf [[Nanosekunde]]n-Basis.<ref>[http://kernelnewbies.org/Ext4#head-c212d1622081e592caa73b9e14511cee45fb989b Linux Kernel Newbies - ext4]</ref> Des Weiteren Unterstützung für Datei-Erzeugt-Datumsstempel (crtime)
: ext4 bietet Zeitstempel auf [[Nanosekunde]]n-Basis. Des Weiteren Unterstützung für Datei-Erzeugt-Datumsstempel (crtime)


; Online-[[Defragmentierung]]
; Online-[[Defragmentierung]]
: Defragmentierung, während die Partition eingehängt ist
: Defragmentierung, während die Partition eingehängt ist
* Funktion derzeit noch nicht fertiggestellt.<ref>[https://ext4.wiki.kernel.org/index.php/Ext4_Howto#Online_defragmentation Ext4 Wiki: Ext4 Howto – Online defragmentation]</ref>
* Funktion derzeit noch nicht fertiggestellt.


; Journal mit [[Prüfsumme]]nunterstützung
; Journal mit [[Prüfsumme]]nunterstützung
: Diese Funktion ist abwärtskompatibel zu älteren Kernelversionen und wird von diesen ignoriert
: Diese Funktion ist abwärtskompatibel zu älteren Kernelversionen und wird von diesen ignoriert
: Funktionsspezifische mount-Optionen: journal_checksum<ref name="mount-man-page">[http://man.he.net/man8/mount man-page zu mount - ext4 mount options]</ref>
: Funktionsspezifische mount-Optionen: journal_checksum


; Mehrfache Voraballokation von Dateiblöcken und Inodes
; Mehrfache Voraballokation von Dateiblöcken und Inodes
: Resultiert in effizienteren Schreibvorgängen.<ref>Proceedings of the Linux Symposium 2008 ''{{Webarchiv|url=http://ols.fedoraproject.org/OLS/Reprints-2008/kumar-reprint.pdf |wayback=20100331074732 |text=PDF}}'' Kapitel 2.3, 2.4</ref>
: Resultiert in effizienteren Schreibvorgängen.
: Funktionsspezifische mount-Optionen: nomballoc, mballoc (beide nicht in man-pages gelistet),<ref>Proceedings of the Linux Symposium 2008 ''{{Webarchiv|url=http://ols.fedoraproject.org/OLS/Reprints-2008/kumar-reprint.pdf |wayback=20100331074732 |text=PDF}}'' Kapitel 1</ref> oldalloc, orlov (default)
: Funktionsspezifische mount-Optionen: nomballoc, mballoc (beide nicht in man-pages gelistet), oldalloc, orlov (default)


; Zeitverzögerte [[Allokation (Informatik)|Allokation]] von Dateiblöcken und Inodes
; Zeitverzögerte [[Allokation (Informatik)|Allokation]] von Dateiblöcken und Inodes
: Derzeit nur im „data=writeback“-Journaling-Modus, spätere Versionen sollen auch den „data=ordered“-Modus unterstützen
: Derzeit nur im „data=writeback“-Journaling-Modus, spätere Versionen sollen auch den „data=ordered“-Modus unterstützen
* Resultiert in weniger CPU-Last und weniger Fragmentierung.<ref>Proceedings of the Linux Symposium 2008 ''{{Webarchiv|url=http://ols.fedoraproject.org/OLS/Reprints-2008/kumar-reprint.pdf |wayback=20100331074732 |text=PDF}}'' Kapitel 3, 4</ref>
* Resultiert in weniger CPU-Last und weniger Fragmentierung.
: Funktionsspezifische mount-Optionen: nodelalloc, delalloc<ref name="mount-man-page" />
: Funktionsspezifische mount-Optionen: nodelalloc, delalloc


; [[Trim (Befehl)|TRIM]]-Unterstützung
; [[Trim (Befehl)|TRIM]]-Unterstützung
: Seit Kernel 2.6.33 kann über die Mountoption discard/nodiscard festgelegt werden, ob ext4 das Freiwerden von Speicherbereichen per TRIM-Befehl an das eingehängte Gerät meldet; unterstützt wird dies von [[Solid-State-Drive|SSDs]] und dem [[Device Mapper]] (bei „thin provisioning“).<ref>[http://www.mjmwired.net/kernel/Documentation/filesystems/ext4.txt Ext4 in der Kerneldokumentation]</ref>
: Seit Kernel 2.6.33 kann über die Mountoption discard/nodiscard festgelegt werden, ob ext4 das Freiwerden von Speicherbereichen per TRIM-Befehl an das eingehängte Gerät meldet; unterstützt wird dies von [[Solid-State-Drive|SSDs]] und dem [[Device Mapper]] (bei „thin provisioning“).


Bei bestehenden ext3-Partitionen können einige der ext4-Features ohne [[Formatierung|Neuformatierung]] aktiviert werden.<ref>Thorsten Leemhuis: ''[https://www.heise.de/ct/artikel/Die-wichtigsten-Neuerungen-von-Linux-2-6-19-222007.html Drei Dateisysteme dazu]'' auf heise open, 30
Bei bestehenden ext3-Partitionen können einige der ext4-Features ohne [[Formatierung|Neuformatierung]] aktiviert werden.<ref>Thorsten Leemhuis: ''[https://www.heise.de/ct/artikel/Die-wichtigsten-Neuerungen-von-Linux-2-6-19-222007.html Drei Dateisysteme dazu]'' auf heise open, 30
* November 2006</ref><ref>Linux Kernel Newbies ''[http://kernelnewbies.org/Ext4#head-3891522e0601162aab24c73c1f148a1e28c6a9d4 Migrate existing Ext3 filesystems to Ext4]''</ref>
* November 2006</ref>
ext2- und ext3-Partitionen können [[Mounten|eingehängt]] werden, als wären sie ext4-Partitionen
ext2- und ext3-Partitionen können [[Mounten|eingehängt]] werden, als wären sie ext4-Partitionen
* Daraus ergeben sich durch Optimierung im ext4-Treiber bereits kleine Leistungsgewinne
* Daraus ergeben sich durch Optimierung im ext4-Treiber bereits kleine Leistungsgewinne
Zeile 87: Zeile 87:
== Transparente Verschlüsselung ==
== Transparente Verschlüsselung ==
Seit Kernel 4.1 unterstützt ext4 Verschlüsselung
Seit Kernel 4.1 unterstützt ext4 Verschlüsselung
* Diese wurde zunächst von Google entwickelt<ref>{{Internetquelle |url=http://kernsec.org/files/lss2014/Halcrow_EXT4_Encryption.pdf |titel=EXT4 Encryption Harder, Better, Faster, Stronger |hrsg=Google |abruf=2018-06-19 |sprache=en}}</ref> und in ext4 direkt eingebaut; seit Kernel 4.6 ist die Verschlüsselung unter dem Namen [[fscrypt]] eine eigene Bibliothek im Linux-Kernel,<ref name=":0">{{Internetquelle |url=https://www.kernel.org/doc/html/latest/filesystems/fscrypt.html |titel=Filesystem-level encryption (fscrypt) — The Linux Kernel documentation |abruf=2018-06-19 |sprache=en}}</ref> welche über Hooks in Dateisystemen genutzt werden kann
* Diese wurde zunächst von Google entwickelt welche über Hooks in Dateisystemen genutzt werden kann
* Neben ext4 haben derzeit [[F2FS]] und [[UBIFS]] Unterstützung für fscrypt implementiert.<ref name=":0" /> Das Keyhandling wird über den Kernelkeyring gemanagt
* Neben ext4 haben derzeit [[F2FS]] und [[UBIFS]] Unterstützung für fscrypt implementiert. Das Keyhandling wird über den Kernelkeyring gemanagt


Mit e4crypt existiert eine Referenzimplementation für ein Userspace-Tool zum Anlegen von Schlüsseln und Aktivieren der Verschlüsselung für Verzeichnisse
Mit e4crypt existiert eine Referenzimplementation für ein Userspace-Tool zum Anlegen von Schlüsseln und Aktivieren der Verschlüsselung für Verzeichnisse
* Eine alternative Implementation sind die Tools fscryptctl und fscrypt.<ref>{{Internetquelle |url=https://github.com/google/fscryptctl |titel=google/fscryptctl |abruf=2018-06-19 |sprache=en}}</ref><ref>{{Internetquelle |url=https://github.com/google/fscrypt |titel=google/fscrypt |abruf=2018-06-19 |sprache=en}}</ref>
* Eine alternative Implementation sind die Tools fscryptctl und fscrypt.


Voraussetzungen
Voraussetzungen

Aktuelle Version vom 6. September 2025, 02:01 Uhr

Ext4

Beschreibung

ext4 (fourth extended filesystem)

Geschichte

ext4 wurde 2006 von Andrew Morton vorgestellt

  • Ab der Version 2.6.19 war eine vorläufige Testversion offizieller Bestandteil des Linux-Kernels

[1] Mit dem Erscheinen von Linux 2.6.28 am 24. Dezember 2008 verließ ext4 das Haupt­entwicklungs­stadium[2] und gilt als stabil

  • In Linux 4.3 wurde der Code des nativen Treibers für ext3 endgültig entfernt
  • Der ext4-Treiber unterstützt zukünftig weiterhin ext3


Technische Eigenschaften

ext4 benutzt 48 Bit große Blocknummern (ext3 hatte 32 Bit) und unterstützt so Partitionen oder Vorlage:Lang, die bis zu 1 YiB groß sind (Vorlage:Lang größer als 16 TiB erst ab e2fsprogs Version 1.42 vom 29

  • November 2011), im Gegensatz zu ext3, das nur 32 TiB zulässt (abhängig von der Größe einer Speicherseite in der jeweiligen Maschinenarchitektur, bei IA-32 zum Beispiel sind nur maximal 232 · 4 KiB = 16 TiB möglich)
  • Auch kann die Adressierung von Dateien über Extents erfolgen, wobei Speichereinheiten zu einem zusammenhängenden Block zusammengefasst werden
  • Dies führt zu einer Reduzierung des Zusatzaufwands (RAM, E/A-Zugriffe und Transaktionen) für große Dateien, weil nur die Nummer des ersten Blocks und deren Anzahl gespeichert werden muss (und nicht jeder Block einzeln) und kann die Leistung im Betrieb steigern

Seit Veröffentlichung im Kernel 2.6.19 sind folgende Verbesserungen implementiert worden:

  • ab Kernel 2.6.23: mehr als 32.000 Unterverzeichnisse (Verzeichnisse: dir_nlink, Dateien: large_dir)
  • ab Kernel 2.6.25: maximale Dateigröße so groß wie das gesamte Dateisystem (huge_file)
  • ab Kernel 2.6.28: ext4 gilt als stabil
  • ab Kernel 2.6.33: TRIM-Unterstützung (u. a
  • Parameter discard beim Einhängen)
  • ab Kernel 3.0: multiple mount protection (mmp)
  • ab Kernel 3.2: clustered block allocation (bigalloc)
  • ab Kernel 3.6: quota inodes in superblock (quota)
  • ab Kernel 3.8: data stored in inode and extended attribute area (inline_data)
  • ab Kernel 3.16: more extreme version of sparse_super (sparse_super2)
  • ab Kernel 3.18: metadata checksumming (metadata_csum)
  • ab Kernel 4.1: support for file-system level encryption (encrypt)
  • ab Kernel 4.4: store the metadata checksum seed in the superblock (metadata_csum_seed)
  • ab Kernel 4.5: project quota (project)
  • ab Kernel 4.13: Maximale Anzahl und Größe von erweiterten Attributen pro Datei erhöht (ea_inode)
  • ab Kernel 4.13: Maximale Anzahl von Dateien per Verzeichnis erhöht (large_dir)
  • ab Kernel 5.2: Case sensitivity kann nun optional ausgeschaltet werden (casefold)
  • ab Kernel 5.4: Unterstützung von mit verity geschützten Dateien (verity)
  • ab Kernel 5.5: Unterstützung von als stable markierten inode Nummern und UUIDs (stable_inodes)

Jede dieser Verbesserungen in einer neuen ext4-Version im Linux-Kernel bringt es mit sich, dass damit formatierte Vorlage:Lang, z. B

  • auf (Wechsel-)datenträgern, auf einem anderen System mit älterer Version des Kernels nicht gelesen werden können,

Weitere Verbesserungen gegenüber ext3/ext2

Extents
Die wichtigste Neuerung in ext4
  • Andere Dateisysteme wie z. B. JFS oder XFS bieten diese Funktion schon lange
  • Es bringt Geschwindigkeitsvorteile bei der Verwaltung großer Dateien und beugt der Fragmentierung vor.
Funktionsspezifische mount-Optionen: extent. Diese Option ist nicht in der Manpage gelistet, da sie standardmäßig genutzt wird, wenn eine entsprechende ext4-Partition damit eingerichtet wurde oder eine bestehende ext3-Partition zu einer ext4-Partition mit der tune2fs Option -O extent konvertiert wurde
Verbesserte Zeitstempel
ext4 bietet Zeitstempel auf Nanosekunden-Basis. Des Weiteren Unterstützung für Datei-Erzeugt-Datumsstempel (crtime)
Online-Defragmentierung
Defragmentierung, während die Partition eingehängt ist
  • Funktion derzeit noch nicht fertiggestellt.
Journal mit Prüfsummenunterstützung
Diese Funktion ist abwärtskompatibel zu älteren Kernelversionen und wird von diesen ignoriert
Funktionsspezifische mount-Optionen: journal_checksum
Mehrfache Voraballokation von Dateiblöcken und Inodes
Resultiert in effizienteren Schreibvorgängen.
Funktionsspezifische mount-Optionen: nomballoc, mballoc (beide nicht in man-pages gelistet), oldalloc, orlov (default)
Zeitverzögerte Allokation von Dateiblöcken und Inodes
Derzeit nur im „data=writeback“-Journaling-Modus, spätere Versionen sollen auch den „data=ordered“-Modus unterstützen
  • Resultiert in weniger CPU-Last und weniger Fragmentierung.
Funktionsspezifische mount-Optionen: nodelalloc, delalloc
TRIM-Unterstützung
Seit Kernel 2.6.33 kann über die Mountoption discard/nodiscard festgelegt werden, ob ext4 das Freiwerden von Speicherbereichen per TRIM-Befehl an das eingehängte Gerät meldet; unterstützt wird dies von SSDs und dem Device Mapper (bei „thin provisioning“).

Bei bestehenden ext3-Partitionen können einige der ext4-Features ohne Neuformatierung aktiviert werden.[3] ext2- und ext3-Partitionen können eingehängt werden, als wären sie ext4-Partitionen

  • Daraus ergeben sich durch Optimierung im ext4-Treiber bereits kleine Leistungsgewinne

Transparente Verschlüsselung

Seit Kernel 4.1 unterstützt ext4 Verschlüsselung

  • Diese wurde zunächst von Google entwickelt welche über Hooks in Dateisystemen genutzt werden kann
  • Neben ext4 haben derzeit F2FS und UBIFS Unterstützung für fscrypt implementiert. Das Keyhandling wird über den Kernelkeyring gemanagt

Mit e4crypt existiert eine Referenzimplementation für ein Userspace-Tool zum Anlegen von Schlüsseln und Aktivieren der Verschlüsselung für Verzeichnisse

  • Eine alternative Implementation sind die Tools fscryptctl und fscrypt.

Voraussetzungen

  • Blocksize des ext4-Dateisystems muss zur Pagesize des Systems passen
  • Kernel ab 4.1 notwendig

Eigenschaften

  • Transparente Verschlüsselung
  • D. h
  • kein extra Softwarelayer wird auf das Dateisystem aufgesetzt wie z. B
  • bei ecryptfs
  • Es lassen sich einzelne Ordner oder das ganze Dateisystem verschlüsseln
  • Keyhandling über Keyring des Kernels
  • Verschlüsselung erfolgt Ordnerweise: Es wird ein leeres Verzeichnis erstellt und diesem anschließend eine Policy (ein Key) vergeben
  • Danach kann man in dieses Verzeichnis Dateien kopieren und Ordner anlegen, die in Folge alle verschlüsselt sind
  • Ein verschlüsseltes Verzeichnis kann nur verschlüsselte Dateien enthalten
  • Verschlüsselung kann bei Erstellung des ext4-Dateisystems oder nachträglich aktiviert werden
  • Salt und Passphrasenhash werden im Superblock des ext4-Dateisystems abgelegt
  • Daraus wird der Key gebildet
  • Es können mehrere Keys für verschiedene Verzeichnisse verwendet werden

Nachteile

  • Dateiattribute wie Datum und Größe bleiben weiter unverschlüsselt
  • Lediglich der Inhalt der Datei und ihr Name werden verschlüsselt
  • Das Verzeichnis '/' darf nicht verschlüsselt werden, beim Versuch dies zu tun, wird ab Kernel 4.13 eine Fehlermeldung generiert
  • Unverschlüsselte Dateien können nicht nachträglich verschlüsselt werden, dazu müssen sie in einen verschlüsselten Ordner kopiert werden

Nachteile

Zeitverzögerte Allokation von Dateiblöcken und Inodes erhöht das Risiko von Datenverlust bei Abstürzen oder Stromausfall

  • In Kernel Version 2.6.30 wurde dieses Problem gegenüber früheren Versionen entschärft

Siehe auch

Weblinks

Quelle

  1. https://de.wikipedia.org/wiki/Ext4
  1. Linux-Dateisystem ext4 im Kernel 2.6.19 auf heise.de, 12
    • Oktober 2006
  2. Linux-Kernel 2.6.28 erschienen auf heise open, 25
    • Dezember 2008
  3. Thorsten Leemhuis: Drei Dateisysteme dazu auf heise open, 30
    • November 2006