extended filesystem
Alsextended filesystemwerden eine Reihe vonDateisystemenbezeichnet, die für dasLinux-Betriebssystementwickelt wurden. Da sie imQuelltextdesLinux-Kernelsintegriert sind, stehen sie, wie dieser, unter derGPLv2.AlsquelloffeneSoftware wurden die Dateisysteme auf zahlreiche weitere Betriebssysteme portiert.
Dasextended-Dateisystem war das erste, das auf das zu diesem Zeitpunkt in den Linux-Kernel integriertevirtuelle Dateisystem(VFS) implementiert wurde.[1]Die erste Version wurde mitextabgekürzt, alle darauffolgenden Versionen haben die fortlaufende Nummer hintan gestellt:ext2,ext3undext4.Gebräuchlich ist auch die Abkürzung fürfile systemam Ende, also z. B.ext2fs[2]oderEXT4-fs.[3]
Zum Erstellen und Warten der Dateisysteme werden diee2fsprogsbenötigt.
Versionen
BearbeitenBei der Entwicklung wurde großes Augenmerk auf erweiterbare Strukturen gelegt.[1]
ext
BearbeitenDie erste Version desextended filesystem,kurzext,war ab Kernel-Version 0.96c vom April 1992 Teil von Linux. Es wurde als Erweiterung für dasMinix-Dateisystementwickelt, das bis dahin verwendet worden war. Wie dieses basiert auchextaufInode-Tabellen, erweitert jedoch die maximale Länge vonDateinamenvon 14 auf 255 Zeichen sowie die maximale Dateigröße auf 2GiB.[1]
Das ersteextended-Dateisystem wurde komplett durchext2ersetzt und mit Version 2.1.21 aus dem Linux-Kernel entfernt.[4]
ext2
BearbeitenDateisystem | max. Größe (210) | max. Länge von Dateinamen | |
---|---|---|---|
pro Datei | proVolume | ||
Minix | 32 MiB | 32 MiB | 30 Zeichen |
ext | 2 GiB | 2 GiB | 255 Zeichen |
Xia | 32 MiB | 2 GiB | 248 Zeichen |
ext2 | 2 GiB | 4 TiB | 255 Zeichen |
Bereits im Januar 1993 gab es die erste Alpha-Version dessecond extended filesystem,kurzext2,das das bestehendeextended-Dateisystem um zusätzliche Fähigkeiten erweiterte. Als Vorbild diente dasUnix File System(UFS),[5]das z. B. auch von vielenBSD-Derivaten genutzt (und verbessert) wurde. So wurde die maximale Größe des Dateisystems auf 2 TiB erhöht (was später abermals erhöht wurde) und auch dieZeitstempelwurden umModification, Access, Changeerweitert.
Es gab zur gleichen Zeit, Anfang 1993, mitXiabzw.xiafs(benannt nach dessen Entwickler Frank Xia)[5]einen weiteren Ansatz, der bereits stabiler war alsext2,jedoch nicht so leicht erweiterbar. DasXia-Dateisystem basierte direkt auf dem Minix-Dateisystem und war nebenext2in den Kernel integriert worden. Boten anfangs beide Dateisysteme dieselben Fähigkeiten, so wurdeext2durch die aktive Weiterentwicklung nicht nur stabiler (und damitxiafsebenbürtig), auch konnten aufgrund des erweiterbaren Designs neue Funktionen und Fähigkeiten relativ einfach hinzugefügt werden. 2002 warext2das erste Linux-Dateisystem, auf dem diePOSIXACLsimplementiert wurden.[6](„xiafs “wurde mit Kernel-Version 2.1.21 aus Linux entfernt, gemeinsam mit dem erstenextended filesystem„ext “.)
Die Limits wurden später erweitert und hängen auch mit Beschränkungen im Kernel selbst zusammen, denn vor Linux-Kernel 2.4 wurden auf keinem Dateisystem Dateien mit über 2 GiB Größe unterstützt.[7]Die maximale Dateisystemgröße (Volume-Größe) vonext2hängt zusätzlich von der verwendeten Blockgröße ab – bei 8-KB-Blöcken darf das Dateisystem max. 32 TiB groß sein.[8]
Dassecond extended filesystemwar lange Zeit das Standard-Dateisystem von Linux. Die originale ext2-Implementierung wurde mit Kernel 6.9 2024 alsveraltetmarkiert, weil sie nicht weiterentwickelt wird und u. a. vomJahr-2038-Problembetroffen ist.[9]
ext3
BearbeitenMit demthird extended filesystemoderext3wurde 2001Journalingeingeführt. Der Treiber fürext3wurde mit Kernel 4.3 entfernt, daext4alle nötigen Funktionen mitbringt.
ext4
BearbeitenDasfourth extended filesystemoderext4wird seit 2006 entwickelt und ist das aktuelle Dateisystem der Familie. Es wurde als Modernisierung fürext2/3in Linux-Kernel 2.6.19 aufgenommen und gilt seit Version 2.6.28 von Ende 2008 als stabil.[10]
Kompatibilität
BearbeitenDer Dateisystemtreiber fürext4kann seit Kernel-Version 2.6.27 auchext2- undext3-Dateisystemeeinhängen,ohne die Strukturen zu verändern.[11]Dabei bleibt das Dateisystem auf demVolumeunverändert im jeweiligen Format, sodass es auch von älteren Dateisystemtreibern fürext2oderext3weiterhin uneingeschränkt verwendet werden kann.
Da die Dateisysteme aufbauend gestaltet sind, kann immer einUpgradeeines bestehendenextended-Dateisystems durchgeführt werden. Um beispielsweise aus einemext2- einext3-Dateisystem zu machen, muss lediglich einJournalhinzugefügt werden:
tune2fs -j /dev/DEV
Dabei werden jedoch neuere Funktionen nur teilweise umgesetzt. So bleibt z. B. in jedem Fall das Größenlimit desVolumesbei der Erstellung erhalten, auch wenn das Dateisystem in eine neuere Version mit eigentlich erweiterten Limits konvertiert wurde.
Umgekehrt kann durch Entfernen des Journals aus einemext3- wieder einext2-Dateisystem gemacht werden, wenn es ursprünglich alsext2-Dateisystem erstellt wurde bzw. wenn die weiteren aktivierten Funktionen und Strukturen dies gestatten:
tune2fs -O ^has_journal /dev/DEV
Dertune2fs-Parameter-O
gibt an, welche Fähigkeit hinzugefügt werden soll; einZirkumflex,^
,bedeutet, dass die Fähigkeit entfernt bzw. ausgeschaltet werden soll.
Um ein bestehendesextended-Dateisystem zu einemext4-Dateisystem zu machen, müssen dessen Grundfunktionen aktiviert werden:
tune2fs -O extent,uninit_bg,dir_index,has_journal /dev/DEV
Durch die Aktivierung vonExtentserhalten neu erstellte Dateien immer diese neue Fähigkeit, sodass ein Rückkonvertieren anschließend nicht mehr möglich ist. Bestehende Dateien nutzen hingegen keineExtents,was jedoch mit einem Durchlauf vone2fsck
nachgeholt werden kann.[11]
Da das Dateisystem ständig weiterentwickelt wird und neue Fähigkeiten bzw. Funktionen hinzugefügt werden, können neuere Dateisysteme teilweise nicht von älteren Treibern verwendet werden. Der Linux-Kernel gibt dann eine Fehlermeldung aus, mit demFlagder inkompatiblen Funktion in Klammern:
EXT4-fs (DEV): couldn't mount RDWR because of unsupported optional features (400)
In diesem Beispiel bedeutet die Kernel-Meldung (die mittelsdmesg
angezeigt werden kann), dass das Dateisystem nicht beschreibbar ist, (RDWR
steht fürread-write,also Lesen und Schreiben), wegen der Funktion mit der Kennung0x400.In der Dokumentation ist herauszufinden, dass dies die 2012 eingeführte Funktionmetadata_csum
ist.[12]Wenn man diese nun abschaltet, kann man das Dateisystem auch auf älteren Kernel-Versionen einsetzen. Diese Vorgehensweise funktioniert jedoch nicht bei allen Funktionen.
tune2fs -O ^metadata_csum /dev/DEV
Gegengleich kann man damit auf älteren Dateisystemen neuere Funktionen aktivieren. Dies geschieht aus gutem Grund nicht automatisch, denn nur so bleibt die Kompatibilität gewahrt. So wird z. B. eineext4-Partition auf einer externen Festplatte, die auf einem sehr modernen System eingehängt und beschrieben wird, auch weiterhin mit dem älteren System funktionieren, auf dem sie ursprünglich formatiert wurde. Das Programmdumpe2fs
gibt Aufschluss darüber, welche Funktionen aktuell auf einemVolumemitextended-Dateisystem aktiviert sind:
dumpe2fs -h /dev/DEV
Jahr-2038-Problem
BearbeitenAllen Versionen bis inklusiveext4ist gemein, dass sie grundsätzlich vomJahr-2038-Problembetroffen sind bzw. im Fall vonext4betroffen waren, da die Speicherung derZeitstempel2007[13]mit Kernel 2.6.23 von 32 auf 34 Bits erweitert wurde.[14]Dabei war allerdings ein Fehler bei der Konvertierung der ursprünglichen 32-Bit-Unixzeitin 64-Bit (denn die Verarbeitung von 34 Bits erfolgt als 64-Bit-Wert) passiert, der zwischen 2014 und 2016[15][16]und schließlich mit Linux-Kernel 4.3.6 vom 19. Februar 2016[17]korrigiert wurde.
Voraussetzung ist eine Inode-Größe von mindestens 256 Bits (der ursprüngliche Standard beiext2waren 128 Bits) und angepasstee2fsprogs,die ab Version 1.40extra_isize
unterstützen.[18]Mit Version 1.43.x (2016) und neuer kanne2fsckdie fehlerhaften 34-Bit-Zeitstempel auch korrigieren.
Wird einext2- oderext3-Dateisystem um die Extra-Inode, mit oder ohne die um 2 Bits vergrößerten Zeitstempel, erweitert, lässt es sich fortan allerdings nur noch alsext4-Dateisystem einhängen:
#mount -t ext2 /dev/sda1 /boot
#mount | grep "sda1" /dev/sda1 on /boot type ext2 (rw,errors=remount-ro,user_xattr,acl)
#dmesg -t | tail -n1 ext2 filesystem being mounted at /boot supports timestamps until 2038 (0x7fffffff)
#umount /dev/sda1
#dumpe2fs -h /dev/sda1 | grep "features" dumpe2fs 1.45.5 (07-Jan-2020) Filesystem features: ext_attr resize_inode dir_index filetype sparse_super large_file
#dumpe2fs -h /dev/sda1 | grep "Inode size" dumpe2fs 1.45.5 (07-Jan-2020) Inode size: 128
#e2fsck -f /dev/sda1
#tune2fs -O extra_isize /dev/sda1
#tune2fs -I 256 /dev/sda1
#dumpe2fs -h /dev/sda1 | grep "features" dumpe2fs 1.45.5 (07-Jan-2020) Filesystem features: ext_attr resize_inode dir_index filetype sparse_super large_file extra_isize
#dumpe2fs -h /dev/sda1 | grep "Inode size" dumpe2fs 1.45.5 (07-Jan-2020) Inode size: 256
#mount -t ext2 /dev/sda1 /boot mount: /boot: Falscher Dateisystemtyp, ungültige Optionen, der Superblock von /dev/sda1 ist beschädigt, fehlende Kodierungsseite oder ein anderer Fehler.
#dmesg -t | tail -n1 EXT2-fs (sda1): error: couldn't mount RDWR because of unsupported optional features (40)
#mount -t ext4 /dev/sda1 /boot
#dmesg -t | tail -n1 EXT4-fs (sda1): mounted filesystem without journal. Opts: errors=remount-ro
Weblinks
Bearbeiten- Udo Seidel:The ext filesystem – a four-generation retrospective.In:Linux Magazine.November 2013 (englisch).
Einzelnachweise
Bearbeiten- ↑abc Rémy Card, Theodore Ts'o, Stephen Tweedie:Design and Implementation of the Second Extended Filesystem.Abgerufen am 14. Mai 2020(englisch).
- ↑ https:// freebsd.org/doc/handbook/filesystems-linux.html
- ↑ EXT4-fs error: bad header/extent
- ↑ https://linux.die.net/man/5/filesystems
- ↑abc Udo Seidel:The ext filesystem – a four-generation retrospective.In:Ausgabe 156/2013.Linux Magaxine,abgerufen am 17. Mai 2020(englisch).
- ↑ Ext2.In:Glossar.DiskInternals,abgerufen am 14. Mai 2020(englisch): „Features such as POSIX ACLs and extended attributes were generally implemented first on ext2 because it was relatively simple to extend and its internals were well-understood. “
- ↑ Andreas Jaeger:Large File Support in Linux.15. Februar 2005,abgerufen am 17. Mai 2020(englisch).
- ↑ The Second Extended Filesystem.In:The Linux Kernel documentation.Abgerufen am 17. Mai 2020(englisch).
- ↑Boris Mayer:Linux-Kernel 6.9 veröffentlicht.In:golem.de.13. Mai 2024,abgerufen am 14. Mai 2024:„Als deprecated markiert wurde EXT2, da es für das mehr als 30 Jahre alte Dateisystem keinen Fix für das Jahr-2038-Problem geben wird. Noch kann es zwar benutzt werden, die Linux-Kernel-Entwickler raten allerdings davon ab. “
- ↑ Thorsten Leemhuis:Kernel-Log: Dateisystem Ext4 verlässt Entwicklungsphase - ein Zwischenstopp auf dem Weg zu btrfs.In:Heise online.15. Oktober 2008.Abgerufen am 15. Mai 2020.
- ↑ab https://ext4.wiki.kernel.org/index.php/UpgradeToExt4
- ↑ https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#The_Super_Block
- ↑ext4: Add nanosecond timestamps.18. Juli 2007,abgerufen am 4. Juni 2020(englisch).
- ↑INODE(7) – inode - file inode information.(Manpage) In:Linux Programmer’s Manual.9. Mai 2019,abgerufen am 4. Juni 2020(englisch): „Nanosecond timestamps are supported on XFS, JFS, Btrfs, and ext4 (since Linux 2.6.23). Nanosecond timestamps are not supported in ext2, ext3, and Reiserfs. “
- ↑Bug 23732 – ext4 timestamp range contains 68-year gaps.(Fehlerbericht) In:Kernel.orgBugzilla.20. März 2016,abgerufen am 4. Juni 2020(englisch).
- ↑Theodore Ts’o:Re: [PATCH] fs: ext4: Sign-extend tv_sec after ORing in epoch bits.(Mailingliste) In:LKML.31. März 2014,abgerufen am 4. Juni 2020(englisch).
- ↑Linux 4.3.6.(Changelog) In:Kernel.org.19. Februar 2016,abgerufen am 4. Juni 2020(englisch): „ext4: Fix handling of extended tv_sec “
- ↑E2fsprogs Release Notes.Abgerufen am 4. Juni 2020(englisch): „Add on-disk format definitions for the following new features:… EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE “