Das Linux-Dateisystem Ext4
Ext3, das Standarddateisystem fĂŒr Linux, ist in die Jahre gekommen. Moderne Massenspeicher kommen seinen Limits immer nĂ€her, und die blockbasierte Datenverwaltung wird aktuellen DateigröĂen nicht mehr gerecht.
Erschienen in c't 10/09, S. 180
Angesichts rapide steigender Datenmengen wird immer deutlicher, dass Ext3, das derzeitige Linux-Standarddateisystem, an seine Grenzen stöĂt. Eine maximale Dateisystem- und damit Volume-GröĂe von 16 TByte kann in groĂen RAID-Verbunden schon jetzt zwicken, aber mehr ist mit den 32-bittigen Blocknummern von Ext3 bei Datenblöcken von 4 KByte GröĂe eben nicht drin. Eine gröĂere Renovierung steht also an.
Die Entwicklung von Ext4 begann 2006 mit zwei Ănderungen fĂŒr das Ext3-Dateisystem, die die Blocknummern auf 48 Bit erweiterten und die bisherige indirekte Blockadressierung, bei der die zu einer Datei gehörenden Datenblöcke in einer langen Liste einzelner Blocknummern gespeichert werden, durch Extents â Bereiche von Datenblöcken â ersetzte. Da sich dabei die auf der Platte gespeicherten Datenstrukturen Ă€nderten, entschieden sich die Programmierer, diese Patches nicht in das alte Ext3 einzupflegen, sondern mit Ext4 eine neue Version des Dateisystems auf Basis des Ext3-Codes zu entwickeln.
Herausgekommen ist nach drei Jahren mit Ext4 eine deutliche Weiterentwicklung von Ext3, die das Limit fĂŒr Volumes auf 1024 PByte und damit auf Jahre in den sicheren Bereich verschiebt. Gleichzeitig machen die Extents â in anderen Dateisystemen wie XFS lĂ€ngst implementiert â die Verwaltung groĂer Dateien effizienter. SchlieĂlich gibt es eine Reihe interner Ănderungen, die die Performance von Ext4 gegenĂŒber Ext3 verbessern sollen.
Die Kernel-Entwickler haben den Ext4-Code in den Kernel 2.6.19 aufgenommen, um ihn dort reifen zu lassen. Bis zur Version 2.6.27 war Ext4 als experimentell markiert, seit Linux 2.6.28 gilt das neue Dateisystem als stabil â was keineswegs ausschlieĂt, dass der Code nicht noch Bugs oder Ăberraschungen enthalten kann. Das aktuelle Ubuntu 9.04 [1] lĂ€sst sich bereits auf Ext4 installieren, das kommende Fedora 11 wird Ext4 bereits als Standarddateisystem verwenden.
GroĂe Volumes
Ext4 arbeitet mit 48-bittigen Blocknummern bei einer Standard-BlockgröĂe von nach wie vor 4 KByte. Das erlaubt eine DateisystemgröĂe von bis zu 248 Blöcken Ă 4 KByte, also einem Exabyte (1024 PByte) an Stelle der 16 TByte von Ext3. Warum nicht gleich 64-bittige Blocknummern? Die Entwickler nennen in einem Artikel [2] einen ganz pragmatischen Grund: 1 EByte wird auf lange Zeit ausreichen â und schon bei einem Dateisystem dieser GröĂe wĂŒrde ein kompletter e2fsck-Lauf (bei der heute verfĂŒgbaren Hardware) ĂŒber 100 Jahre dauern. Bevor man auch nur in die NĂ€he dieser Grenze kommt, mĂŒsse man daher ganz andere Probleme angehen, die viel gröĂere Ănderungen im Dateisystem erfordern wĂŒrden als 64-bittige Blocknummern. Zudem passen die 48-bittigen Blocknummern besser in die alten Ext3-Datenstrukturen.
Laut Ext4-Chefentwickler Ted Tsâo sollte die Erweiterung der Blocknummern auf 64 Bit keine allzu groĂe Sache sein â möglicherweise wird sie bereits im Zuge der Weiterentwicklung von Ext4 angegangen. Einige Strukturen wie der Superblock, die Blockgruppen-Deskriptoren und der zusammen mit Ext4 entwickelte neue Journaling-Layer JBD2 sind bereits auf 64-bittige Blocknummern ausgelegt.
Der in Ext3 32-bittige i_blocks-Wert im Inode, der die Anzahl der von einer Datei belegten Blöcke enthĂ€lt, wurde gleich in zweierlei Hinsicht an die gröĂeren Blocknummern angepasst: Zum einen zĂ€hlt er nicht mehr, wie noch in Ext3, in Festplattensektoren von 512 Byte GröĂe, sondern in der BlockgröĂe des Dateisystems, also in der Regel 4 KByte. Ein Flag im Inode gibt an, wie der Wert zu interpretieren ist; das ist bei einem Upgrade von Ext3 nach Ext4 wichtig, da dort auch noch alte Ext3-Inodes vorkommen können, die Sektoren zĂ€hlen.
Zum anderen nutzt man zwei bislang nicht verwendete Bytes im Inode, um die oberen 16 Bits der 48-bittigen Blocknummer zu speichern. Das Dateisystem-Feature huge_file zeigt an, dass das Dateisystem mit 48-bittigen Blocknummern arbeitet und die Inodes in Dateisystemblöcken zĂ€hlen können. Einzelne Dateien können derzeit allerdings trotz der 48-bittigen Blocknummern nicht gröĂer als 16 TByte werden, da sich mit der aktuellen Struktur der Extents keine gröĂeren Files verwalten lassen â dazu gleich mehr.
Im Vergleich mit den anderen Dateisystemen im Kernel konkurriert Ext4 vor allem mit XFS â IBMs JFS hat bis heute nicht allzu viele AnhĂ€nger in der Linux-Welt gefunden, und Reiser 4 ist nach wie vor nicht in den Kernel integriert. Als Vorteile gegenĂŒber XFS fĂŒhren die Ext4-Entwickler die schlankere Code-Basis an (rund 30.000 Zeilen in 900 KByte versus 100.000 Zeilen in 3,2 MByte), die Möglichkeit, ein Ext3-Dateisystem nach Ext4 zu konvertieren, und der groĂe Anteil Code, den man von dem ausgereiften und grĂŒndlich getesteten Ext3 ĂŒbernommen hat.
| Linux-Dateisysteme | ||
| Dateisystem | maximale DateigröĂe | maximale DateisystemgröĂe |
| Ext4 | 16 TByte | 1024 PByte |
| Ext3 | 2 TByte | 16 TByte |
| JFS | 4 PByte | 32 PByte |
| ReiserFS 3 | 8 TByte | 16 TByte |
| XFS | 8192 PByte | 8192 PByte |
| ZFS (Solaris) | 16.384 PByte | 16.384 PByte |
Extents
GroĂe Dateien
Die wichtigste interne Verbesserung in Ext4 ist die Verwendung von Extents anstelle der in Ext3 verwendeten indirekten Blockadressierung. Bei letzterer speichert ein Inode die Nummern von maximal zwölf 4-KByte-Blöcken. Ist eine Datei gröĂer als 48 KByte, kommen zunĂ€chst indirekt adressierte Blöcke (bis 4 MByte), dann doppelt (bis 4 GByte) und schlieĂlich dreifach indirekt adressierte Blöcke zum Einsatz, bei denen eine Blocknummer im Inode auf einen Block mit Blocknummern verweist, die auf Blöcke mit Blocknummern verweisen, die auf Blöcke mit den Blocknummern der Daten verweisen (Details zu Ext3 finden Sie hier [3]). Dieses klassische Adressierungsschema der Unix-Welt bewĂ€hrt sich bei kleinen oder sehr stark fragmentierten Dateien sowie bei sparse files, bringt aber bei groĂen Dateien einen zunehmenden Verwaltungs-Overhead mit sich.
Extent-Datenstruktur
struct ext3_extent {
__u32 ee_block;
/* first logical block
extent covers */
__u16 ee_len;
/* number of blocks
covered by extent */
__u16 ee_start_hi;
/* high 16 bits of
physical block */
__u32 ee_start;
/* low 32 bits of
physical block */
};
Extents: Eine Datenstruktur von 12 Byte verwaltet bis zu 128 MByte Daten.
Extents adressieren keine einzelnen Blöcke, sondern mappen stattdessen einen (möglichst groĂen) Bereich einer Datei auf einen Bereich zusammenhĂ€ngender Blöcke auf der Platte. Dazu braucht man statt vieler einzelner Blocknummern nur noch drei Werte: Der Start und die GröĂe des Bereichs in der Datei (jeweils in Dateisystemblöcken) sowie die Nummer des ersten Datenblocks auf der Platte. Die Datenstruktur eines Extents in Ext4 sieht so aus wie in dem Kasten rechts.
Dabei zĂ€hlt Ext4 die Blöcke innerhalb einer Datei 32-bittig, was die maximale GröĂe einer Datei im Ext4-Dateisystem auf 232 4-KByte-Blöcke, also 16 TByte begrenzt. Dieses Limit könnte fallen, wenn das Extent-Format ĂŒberarbeitet wird: Es gibt bereits Ăberlegungen, fĂŒr sparse files und sehr stark fragmentierte Dateien, die sich mit Extents nicht effizient verwalten lassen, ein anderes Format zu verwenden, das wieder mit einzelnen Blocknummern arbeitet. AuĂerdem denken die Entwickler darĂŒber nach, beschĂ€digte Extents durch zusĂ€tzliche Informationen und eine Checksumme erkennen zu können.
Das ist zwar alles noch Zukunftsmusik, aber eine Grundlage dafĂŒr ist zumindest schon gelegt: Vor den Extents steht eine Header-Struktur auf der Platte, die auch eine magic number zur Identifizierung und falls nötig Unterscheidung von Extents je nach Typ erlaubt.
FĂŒr die GröĂe eines Extents stehen 15 Bit zur VerfĂŒgung, sodass ein Extent nicht gröĂer als 215 4-KByte-Blöcke, also 128 MByte werden kann. FĂŒr dieses Limit gibt es einen einfachen Grund: Wie Ext3 unterteilt auch Ext4 die Platte in Blockgruppen von 128 MByte GröĂe. Da jeder Blockgruppe ein Blockgruppen-Deskriptor und ein Ausschnitt aus der Inode-Bitmap, der Block-Bitmap und der Inode-Tabelle vorangehen, lassen sich nicht mehr als 128 MByte am StĂŒck speichern.
Das ĂŒbrig gebliebene sechzehnte Bit bei der Extent-GröĂe speichert, ob der Extent bereits mit Daten beschrieben ist â wenn nein, gibt das Dateisystem beim Lesen der Daten Nullen zurĂŒck (âunitialized extent flagâ). Das ermöglicht es Anwendungen, Plattenplatz vorzubelegen (âpersistent preallocationâ, dazu gleich mehr), eine von mehreren MaĂnahmen zur Performance-Steigerung in Ext4, ohne dass dadurch ein Zugriff auf frĂŒher in diesem Bereich gespeicherte Daten möglich wird.
Extents bringen vor allem bei groĂen Dateien und dort speziell bei solchen Operationen Vorteile, die in erster Linie Metadaten-Operationen erfordern, also beim Löschen und VerkĂŒrzen von groĂen Dateien. Das sieht man bereits, wenn man mit dd ein paar groĂe Dateien anlegt und sie dann wieder löscht (siehe Tabelle) â vor allem das Löschen benötigt bei Ext4 nur einen Bruchteil der Zeit.
| Performance bei groĂen Dateien | |||
| Ext31 | Ext41 | Verbesserung | |
| Anlegen von acht Dateien Ă 1 GByte | |||
| Zeit | 155,9 s | 145,1 s | 6,9 % |
| Durchsatz beim Schreiben | 55,4 MByte/s | 59,3 MByte/s | 7,0 % |
| Löschen von acht Dateien à 1 GByte | |||
| Zeit | 11,87 s | 0,33 s | 97,2 % |
| 10.000 zufÀllige Lese- und Schreiboperationen in 8 GByte | |||
| Operationen/s | 80,0 | 88,7 | 10,9 % |
| 1 Mount-Option: noatime; Single User Mode; Dateisystem jeweils frisch gemountet | |||
Extent-BĂ€ume
Ext4 benutzt die 60 Byte im Inode, die Ext3 zum Speichern von 15 32-bittigen Blocknummern verwendet, um dort vier Extents und einen Header-Extent von jeweils 12 Byte LĂ€nge abzulegen. Damit lassen sich Dateien bis zu 512 MByte direkt aus dem Inode heraus verwalten. Dabei zeigt sich ein weiterer, ganz praktischer Vorteil der 48-bittigen Blocknummern: WĂŒrden sowohl fĂŒr die Position des Extents in der Datei als auch fĂŒr den Start-Block auf der Platte 64-Bit-Werte verwendet werden, stiege die GröĂe eines Extents auf 18 Byte. Da der Extent-Header bereits 12 Byte belegt, könnte man nur noch zwei statt vier Extents im Inode speichern.
Ist eine Datei gröĂer als 512 MByte, baut Ext4 einen Baum aus Extents auf. Dabei kommt eine weitere Datenstruktur zum Einsatz, der Extent-Index, der lediglich die Startposition des Extents in der Datei und eine Blocknummer auf der Festplatte enthĂ€lt. In diesem Datenblock können dann entweder Extents stehen, die auf die Daten verweisen, oder erneut Extent-Indexe, wobei jeder Block mit einem Extent-Header beginnt. Der Extent-Baum startet mit einem Extent-Index im Inode.
Extents packen zwei Probleme von Ext3 an: Sie verringern den Verwaltungs-Overhead bei groĂen Dateien â eine 500-MByte-Datei lĂ€sst sich mit vier Extents Ă 12 Byte im Inode effizienter verwalten als mit einem halben Megabyte ĂŒber die Platte verstreuter 32-bittiger Blocknummern â und können die Fragmentierung des Dateisystems verhindern. Dazu haben die Entwickler einige neue Mechanismen implementiert.
Einer davon ist die bereits angesprochene âpersistent preallocationâ. Mit dem Systemaufruf fallocate() kann eine Anwendung fĂŒr eine Datei eine bestimmte Menge Speicher reservieren und das Dateisystem so darĂŒber informieren, wie groĂ die Datei werden wird. Hilfreich ist das vor allem, wenn eine Datei langsam wĂ€chst oder wenn sie nicht sequenziell geschrieben wird, wie es beispielsweise Tauschbörsen-Clients machen.
Dank der âpersistent preallocationâ kann Ext4 gleich ausreichend Platz in möglichst zusammenhĂ€ngenden Bereichen auf der Platte reservieren. Erfreulicher Nebeneffekt fĂŒr die Anwendung: Das tatsĂ€chliche Schreiben der Daten kann nicht mehr wegen Speicherplatzmangel fehlschlagen. Die Glibc stellt fallocate() derzeit noch nicht zur VerfĂŒgung; Anwendungen mĂŒssen die Funktion entweder per syscall() aufrufen oder posix_fallocate() verwenden. Das bereits erwĂ€hnte sechzehnte Bit in der GröĂenangabe eines Extents speichert, ob ein Extent voralloziert, aber noch nicht mit Daten beschrieben ist.
Weitere Optimierungen
Kaputt optimiert?
Weitere Optimierungen im Dateisystem sorgen dafĂŒr, dass Ext4 Dateien auch unabhĂ€ngig von der âpersistent preallocationâ möglichst am StĂŒck speichert. Schreibzugriffe werden zunĂ€chst gepuffert, sodass der Block Allocator, der in Ext3 und Ext4 Datenblöcke fĂŒr Schreiboperationen reserviert, nicht mehr fĂŒr jeden 4-KByte-Block Daten sofort aufgerufen werden muss (âdelayed allocationâ), sondern mehrere Blöcke auf einmal allozieren kann. Dadurch lassen sich bei gröĂeren Schreibzugriffen viele Blöcke auf einmal und idealerweise als ein Extent am StĂŒck belegen (âmultiblock allocationâ).
Diese Ănderungen verringern den Overhead im Dateisystem und damit sowohl die Systemlast als auch I/O-EngpĂ€sse, wenn eine Anwendung gröĂere Mengen Daten schreibt, und verhindern die Fragmentierung von Dateien. Nur fĂŒr kurze Zeit angelegte temporĂ€re Dateien können komplett im Cache bleiben und werden gar nicht erst auf die Platte geschrieben. Beim Mounten von Ext4 erzeugt der Ext4-Code eine Liste freier Extents fĂŒr jede Blockgruppe, die im Speicher bleibt und mit deren Hilfe der Block Allocator die Verteilung der Dateien auf der Platte optimiert.
Die âdelayed allocationâ ist allerdings eine sehr aggressive Caching-Strategie, die das Risiko von Datenverlusten [4] bei einem Systemabsturz oder Stromausfall erhöht. Nicht nur, dass die Daten lĂ€nger im Cache bleiben â âdelayed allocationâ entkoppelt auch das Schreiben von Daten und Metadaten: Eine neu angelegte Datei kann im Dateisystem bereits auftauchen, bevor die Daten auf die Platte geschrieben sind. Sie hat dann eine GröĂe von 0 Byte und keine zugeordneten Datenblocks, bis die Daten tatsĂ€chlich auf der Platte gelandet sind.
Das hat einen hĂ€sslichen Nebeneffekt bei Anwendungen, die beim Ăberschreiben einer existierenden Datei mit neuen Daten besonders vorsichtig sind: Viele Programmierer schreiben in diesem Fall die neuen Daten zunĂ€chst in eine temporĂ€re Datei, die sie dann mit rename() auf den alten Namen umbenennen. Die Logik dahinter: Solange die neuen Daten noch nicht geschrieben sind, bleibt zumindest die alte Version der Datei erhalten.
Mit der âdelayed allocationâ kann es allerdings passieren, dass die ĂŒberschriebene Datei nach einem Systemabsturz gar keine Daten mehr enthĂ€lt, da der Eintrag im Dateisystem auf die neue, bereits angelegte, aber noch nicht mit Daten befĂŒllte Datei zeigt â rename() ist eine reine Metadaten-Operation. Das Gleiche kann passieren, wenn die Anwendung vor dem Schreiben der neuen Daten ftruncate() aufruft: Das Abschneiden der alten Datei passiert viel schneller als das Schreiben der neuen Daten.
Dieses Verhalten von Ext4 ist durchaus konform mit dem POSIX-Standard und tritt auch bei anderen Dateisystemen, etwa XFS, auf. Ext3 allerdings verhĂ€lt sich hier in seinem Standard-Betriebsmodus âdata=orderedâ gutmĂŒtiger und nimmt Ănderungen an den Metadaten erst vor, wenn die Daten auf die Platte geschrieben sind â was aber keine bewusste Design-Entscheidung, sondern eher Zufall ist. Dennoch verlassen sich mittlerweile zahlreiche Linux-Anwendungen darauf.
Das â0-Byte-Problemâ hat zu hitzigen Diskussionen [5] unter den Kernel-Entwicklern gefĂŒhrt, wobei zwei sehr unterschiedliche Sichtweisen aufeinandergeprallt sind: Die der Dateisystementwickler, denen es um maximale Performance und die Sicherstellung eines in sich konsistenten Dateisystems geht, und der eher pragmatische Blick beispielsweise von Linus Torvalds, nach dessen Ansicht das Dateisystem den Erwartungen der Anwender gerecht werden sollte â und die wollen vor allem keinen Datenverlust. Mit dem kommenden Kernel 2.6.30 versucht Ext4, problematische Situationen zu erkennen und sich dort wie Ext3 zu verhalten, also die Daten zu schreiben, bevor die Metadaten geĂ€ndert werden. Der Kernel 2.6.28 von Ubuntu 9.04 enthĂ€lt bereits diese Patches â hier tritt das Problem also gar nicht auf.
ZusĂ€tzlich zu der optimierten Allozierungsstrategie, die eine Dateifragmentierung weitgehend verhindern kann, soll sich Ext4 auch im Betrieb defragmentieren lassen. Ein Defragmentier-Tool soll wahlweise einzelne Dateien oder ganze Dateisysteme defragmentieren, wobei das Programm nichts grundlegend Anderes macht, als die Daten umzukopieren. Wichtig ist das Werkzeug vor allem, wenn man ein bestehendes Ext3-Dateisystem nach Ext4 migrieren möchte, da es Ext3-mĂ€Ăig gespeicherte Dateien in das Ext4-Format wandeln können soll. Derzeit sind allerdings weder die fĂŒr die Online-Defragmentierung erforderlichen Patches in den Linux-Kernel integriert noch ist das Defragmentier-Tool fertiggestellt.
Sicherer
Einige Neuerungen sollen die ZuverlÀssigkeit des Dateisystems erhöhen. So versieht das Journal jede Transaktion mit einer Checksumme. Damit lassen sich nicht nur fehlerhaft ins Journal geschriebene Daten erkennen; zudem vereinfacht sich der Commit von abgeschlossenen Transaktionen im Journal. Auch in den Blockgruppendeskriptoren kommen Checksummen zum Einsatz.
Ext4 nutzt standardmĂ€Ăig den Barriere-Mechanismus, den neuere Festplatten bieten. Eine solche Barriere beeinflusst das Caching und Umsortieren von Schreibzugriffen moderner Festplatten: Der Platten-Controller fĂŒhrt alle Schreibzugriffe vor einer Barriere aus, bevor er die Schreibzugriffe hinter der Barriere in Angriff nimmt. Damit lĂ€sst sich beispielsweise sicherstellen, dass alle zu einer Transaktion gehörenden SchreibvorgĂ€nge im Dateisystem ausgefĂŒhrt sind, bevor der Commit ins Journal geschrieben wird. Mit der Mount-Option barriers=0 lĂ€sst sich dieser Mechanismus abschalten.
Die Extents erlauben in Ext4 umfangreichere Konsistenzchecks als die Blocklisten in Ext3. So lĂ€sst sich beispielsweise ĂŒberprĂŒfen, ob sich die Extents einer Datei ĂŒberschneiden. Zudem speichern die Extent-Header in einem Extent-Baum die Baumtiefe, die ĂŒber den gesamten Baum konsistent sein muss, und die einem Extent-Index zugeordneten Extents mĂŒssen denselben Bereich einer Datei abdecken wie der Index. Bei der indirekten Blockadressierung von Ext3 hingegen ist ein Block mit Blocknummern nicht von zufĂ€lligen Daten unterscheidbar, ein Konsistenzcheck daher nur sehr rudimentĂ€r möglich.
Sollte einmal ein kompletter fsck-Lauf notwendig sein, geht das bei Ext4 deutlich schneller als bei Ext3. Mit der Option uninit_bg (in Ubuntu 9.04 standardmĂ€Ăig gesetzt) initialisiert mkfs.ext4 nicht alle Blockgruppen. Das beschleunigt nicht nur das Anlegen des Dateisystems, sondern sorgt vor allem dafĂŒr, dass e2fsck lediglich die initialisierten Inodes ĂŒberprĂŒfen muss. Die Dauer eines fsck-Laufs hĂ€ngt damit nur noch von der Zahl der Dateien, nicht von der Zahl der insgesamt vorhandenen Inodes (und damit der GröĂe des Dateisystems) ab.
Limits und Performance
Mit Ext4 fallen einige Grenzen. So erlaubt das Dateisystem eine unbegrenzte Zahl von Unterverzeichnissen in einem Directory, bei Ext3 waren lediglich 32.000 erlaubt. Die Inodes haben jetzt standardmĂ€Ăig eine GröĂe von 256 Byte, bei Ext3 reichten noch 128 Byte. Den zusĂ€tzlichen Platz nutzt Ext4 unter anderem dazu, die Zugriffszeiten statt in Sekunden in Nanosekunden zu protokollieren und extended attributes direkt im Inode zu speichern.
Ein Patch von Google-Entwicklern fĂŒr den aktuellen Kernel 2.6.29 erlaubt es, Ext4 ohne Journal zu betreiben, was den Durchsatz nach Messungen von Google um bis zu zwei Prozent erhöhen kann. Angesichts der Vorteile, die das Journal im Fall eines Systemabsturzes oder Stromausfalls bringt, dĂŒrfte das allerdings nur dann ernsthaft in Frage kommen, wenn es wirklich auf jedes Quentchen I/O ankommt. Die Userland-Tools bieten derzeit noch keine Möglichkeit, den Betrieb ohne Journal einzurichten.
Doppelte BuchfĂŒhrung
Auch wenn die Ext4-Entwickler gerne die KompatibilitĂ€t mit Ext3 herausstreichen, sind diese Aussagen doch mit Vorsicht zu genieĂen. Zwar lĂ€sst sich ein Ext3-Dateisystem als Ext4 mounten, Auswirkungen auf das Dateisystem hat das jedoch keine: Ext4 kennt noch das alte Ext3-Schema zur Blockadressierung und spricht das Dateisystem genauso wie Ext3 an. Man kann auf dem als Ext4 gemounteten Dateisystem lesen und schreiben und es anschlieĂend wieder als Ext3 weiterverwenden.
Erst wenn man mit
tune2fs -O extents
bei Ext3 das Dateisystem-Feature extents setzt und damit die Extents aktiviert, behandelt der Ext4-Code das Dateisystem tatsĂ€chlich als Ext4. Die bereits existierenden Dateien bleiben allerdings unverĂ€ndert im Ext3-Format gespeichert â ein Flag im Inode gibt ja an, ob der Inode Blocknummern oder Extents enthĂ€lt. Lediglich Dateien, die nach der Umwandlung und dem Mounten als Ext4 neu angelegt werden, profitieren von den neuen Datenstrukturen.
Bei einer solchen Konvertierung entsteht also kein âechtesâ Ext4-Dateisystem, sondern ein Hybrid aus Ext3- und Ext4-Strukturen. Wer ein Dateisystem vollstĂ€ndig von Ext3 nach Ext4 migrieren möchte, kommt um das Sichern der Daten und Neuanlegen des Dateisystems nicht herum. Abhilfe könnte das bereits erwĂ€hnte Defragmentier-Tool bringen, das â auf unter Ext3 gespeicherte Dateien losgelassen â die defragmentierte Datei im Ext4-Format mit Extents anlegt.
Nach dem Setzen des extents-Features fĂŒhrt kein bequemer Weg mehr zu Ext3 zurĂŒck: Ebenso wie ein mit
mkfs -t ext4
gleich als Ext4 angelegtes Dateisystem lĂ€sst sich Ext4 nicht mehr als Ext3 mounten. Das kann beim Einsatz eines etwas Ă€lteren Rettungssystems ohne Ext4-UnterstĂŒtzung fĂŒr böse Ăberraschungen sorgen. (odi [6]) (odi [7])
URL dieses Artikels:
https://www.heise.de/-221262
Links in diesem Artikel:
[1] https://www.heise.de/tests/Ubuntu-9-04-im-Test-221809.html
[2] http://ols.108.redhat.com/2007/Reprints/mathur-Reprint.pdf
[3] https://www.heise.de/tests/Das-Dateisystem-Ext3-tunen-221480.html
[4] https://www.heise.de/news/Moeglicher-Datenverlust-bei-Ext4-205664.html
[5] https://www.heise.de/news/Kernel-Entwickler-streiten-ueber-Ext3-und-Ext4-209350.html
[6] mailto:odi@heiseopen.de
[7] mailto:odi@ix.de
Copyright © 2009 Heise Medien