Ext4

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

ext4 Eigenschaften

Was ist das?

Ext4 ist ein weit verbreitetes Dateisystem für Linux-Betriebssysteme. Es wurde als Nachfolger des älteren Ext3-Dateisystems entwickelt und bietet zahlreiche Verbesserungen und zusätzliche Funktionen. Hier sind die wichtigsten Eigenschaften von Ext4:

Größere Dateisysteme

  • Ext4 verwaltet sehr große Dateisysteme: bis zu 1 Exbibyte (EiB) pro Dateisystem und bis zu 16 Tebibyte (TiB) pro Datei.
  • Die 16 TiB je Datei gelten bei der üblichen Blockgröße von 4 KiB. Bei kleineren Blöcken sinkt der Wert entsprechend.

Verbesserte Leistung

  • Ext4 arbeitet schneller als Ext3, besonders bei großen Dateisystemen und bei vielen Dateioperationen wie dem Anlegen und Löschen.
  • Erreicht wird das vor allem durch Extents (zusammenhängende Blockbereiche statt einzelner Block-für-Block-Verweise), Multiblock-Allokation (mehrere Blöcke werden in einem Schritt reserviert) und Delayed Allocation (die Zuordnung auf der Platte wird bis zum Schreiben aufgeschoben, was Fragmentierung verringert).

Dateisystemjournaling

  • Ext4 führt ein Journal, das nach einem Absturz die Konsistenz sicherstellt und langwierige komplette Prüfungen erspart.
  • Es gibt drei Modi: journal (Metadaten und Daten werden ins Journal geschrieben, am sichersten, aber am langsamsten), ordered (nur Metadaten ins Journal, Daten werden vorher geschrieben – der voreingestellte Kompromiss) und writeback (nur Metadaten, ohne Reihenfolgegarantie – am schnellsten, aber nach einem Absturz können alte Daten in neuen Dateien stehen).

Online-Defragmentierung

  • Fragmentierte Dateien lassen sich im laufenden Betrieb neu ordnen, ohne das Dateisystem auszuhängen. Das Werkzeug dazu ist e4defrag.

Erweiterte Attribute

  • Ext4 speichert erweiterte Attribute (xattr) – zusätzliche Metadaten an Dateien und Verzeichnissen. Darauf setzen unter anderem SELinux-Kontexte, POSIX-ACLs und Capabilities auf.

Verschlüsselung

  • Ext4 kann einzelne Verzeichnisse auf Dateiebene verschlüsseln (fscrypt). Das Feature muss beim Anlegen aktiviert sein (-O encrypt).
  • Das ist etwas anderes als LUKS/dm-crypt: LUKS verschlüsselt das gesamte Blockgerät unter dem Dateisystem, fscrypt einzelne Verzeichnisse im Dateisystem.

Rückwärtskompatibilität

  • Ext4 ist mit Ext3 und Ext2 kompatibel. Ein bestehendes Ext3- oder Ext2-Dateisystem lässt sich zu Ext4 aufrüsten, indem die neuen Features nachträglich eingeschaltet werden.

Zusammenfassend

  • Diese Eigenschaften machen Ext4 zu einem robusten und leistungsfähigen Dateisystem für Linux.
  • Es ist in vielen Distributionen die Voreinstellung und eignet sich wegen seiner Stabilität und Skalierbarkeit für Desktop wie Server.

ext4 erstellen eines Dateisystem

Allgemein

mkfs.ext4 legt ein ext4-Dateisystem auf einer Partition oder einem Gerät an. Der Aufruf ohne Optionen genügt für den Normalfall – Blockgröße, Anzahl der Inodes und die übrigen Kennwerte werden aus der Gerätegröße abgeleitet.

Achtung: mkfs.ext4 fragt nicht nach und überschreibt ein vorhandenes Dateisystem sofort. Das Ziel muss die gewünschte Partition sein (z. B. /dev/sdg1), nicht die ganze Platte, außer man will das Dateisystem wirklich ohne Partitionstabelle direkt aufs Gerät legen.

Ein ext4-Dateisystem anlegen

  • mkfs.ext4 /dev/sdg1
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: 1b40fc1f-21dd-497e-9266-454f206f67b2
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

Aus der Ausgabe lässt sich schon einiges ablesen: die Blockgröße (4k), die Zahl der Blöcke und Inodes, die UUID und die Blöcke, auf denen die Superblock-Kopien liegen – genau die aus dem Artikel zum Dateisystem-Aufbau.

Wichtige Optionen

Option Erklärung
-b BLOCKSIZE Blockgröße in Byte: 1024, 2048 oder 4096
-L LABEL Volume-Label setzen
-U UUID UUID setzen (random für einen Zufallswert)
-N ANZAHL feste Anzahl der Inodes
-i BYTES ein Inode je so viele Byte – je größer der Wert, desto weniger Inodes
-m PROZENT für root reservierter Anteil (Vorgabe 5 %)
-T TYP Verwendungszweck: small, floppy, news u. a. – steuert die Inode-Dichte
-E OPTION erweiterte Optionen, z. B. -E lazy_itable_init=0
-O FEATURE Feature ein- oder ausschalten, z. B. -O encrypt oder -O ^has_journal
-n nichts anlegen, nur anzeigen, was geschähe (u. a. die Lage der Superblock-Kopien)

-N und -i steuern beide die Zahl der Inodes, aber auf verschiedene Weise: -N gibt die Zahl direkt vor, -i gibt an, für wie viele Byte Nutzdaten ein Inode angelegt wird. Beides zusammen anzugeben ergibt keinen Sinn.

Beispiele

Mit festgelegter Blockgröße

Erlaubt sind 1024, 2048 oder 4096 Byte pro Block.

  • mkfs.ext4 -b 2048 /dev/sdg1

Mit fester Anzahl der Inodes

  • mkfs.ext4 -N 3072 /dev/sdg1

Mit Byte pro Inode

Je größer die Zahl, desto weniger Inodes werden angelegt.

  • mkfs.ext4 -i 1024 /dev/sdg1

Mit Volume-Label

  • mkfs.ext4 -L daten-platte /dev/sdg1

Mit vorgegebener UUID

  • mkfs.ext4 -U 3c52166d-7803-42f4-952a-88bf43e11268 /dev/sdg1

Mit geändertem Reservat für root

Standard sind 5 %. Auf reinen Datenplatten ohne Systemdateien kann man den Wert senken.

  • mkfs.ext4 -m 1 /dev/sdg1

Nur anzeigen, nichts schreiben

Zeigt die geplanten Kennwerte und die Lage der Superblock-Kopien, ohne die Platte zu verändern.

  • mkfs.ext4 -n /dev/sdg1

Kontrolle nach dem Anlegen

Die Kennwerte des fertigen Dateisystems zeigt dumpe2fs im Kopfbereich.

  • dumpe2fs -h /dev/sdg1

ext4 tuning eines Dateisystem

tune2fs ändert die Parameter eines bestehenden ext2/ext3/ext4-Dateisystems, ohne es neu anzulegen. Angewendet wird es auf die Partition, nicht auf ein gemountetes Verzeichnis. Die meisten Änderungen sind auch im eingehängten Zustand möglich; Ausnahmen nennt tune2fs selbst.

Anzeigen von Informationen

Zeigt den Superblock-Inhalt: UUID, Label, Block- und Inode-Zahl, Features, Zähler und Prüfintervalle.

  • tune2fs -l /dev/sdg1

Maximale Mount-Zahl bis zur Zwangsprüfung

Nach so vielen Mount-Vorgängen erzwingt das System beim nächsten Start eine Prüfung mit fsck. Hier: alle 30 Mounts.

  • tune2fs -c 30 /dev/sdg1

Auf den meisten aktuellen Distributionen ist diese Zwangsprüfung abgeschaltet (Wert 0), weil ein fsck-Lauf beim Booten unerwünscht ist. Abschalten:

  • tune2fs -c 0 /dev/sdg1

Zeitintervall bis zur Zwangsprüfung

Prüfung nach einer festen Zeitspanne statt nach Mount-Zahl. Hier: alle zwei Monate (d Tage, w Wochen, m Monate).

  • tune2fs -i 2m /dev/sdg1

Auch dieses Intervall ist meist auf 0 gesetzt. Abschalten:

  • tune2fs -i 0 /dev/sdg1

Größe des Journals festlegen

Legt die Größe des Journals fest, hier 32 MiB. Das ist die Größe des Journals selbst, kein Cache.

  • tune2fs -J size=32m /dev/sdg1

Journaling ein- oder ausschalten

Journaling einschalten (macht aus ext2 praktisch ext3):

  • tune2fs -O has_journal /dev/sdg1

Journaling ausschalten – das vorangestellte ^ entfernt ein Feature:

  • tune2fs -O ^has_journal /dev/sdg1

Dateisystem-Label ändern

Setzt das Label, über das die Partition auch in /etc/fstab als LABEL= angesprochen werden kann.

  • tune2fs -L daten-platte /dev/sdg1

Für root reservierten Anteil ändern

-m setzt den Prozentsatz der Blöcke, die dem Superuser vorbehalten bleiben (Vorgabe 5 %). Das ist nicht die Zahl der erlaubten Mounts – die regelt -c. Auf reinen Datenplatten kann man den Wert senken:

  • tune2fs -m 1 /dev/sdg1

Denselben Anteil als feste Blockzahl statt in Prozent setzt -r.

UUID ändern

Setzt eine neue UUID; random würfelt eine. Nötig etwa, nachdem eine Platte geklont wurde und zwei Dateisysteme dieselbe UUID tragen.

  • tune2fs -U random /dev/sdg1

Kontrolle

Nach jeder Änderung lässt sich das Ergebnis wieder mit -l nachsehen.

  • tune2fs -l /dev/sdg1

ext4 Reparatur

Allgemein

fsck.ext4 (auch als e2fsck) prüft ein ext2/ext3/ext4-Dateisystem auf Fehler und repariert sie. Aufgerufen wird es auf der Partition, nicht auf einem Verzeichnis.

Achtung – nur im ausgehängten Zustand: Eine gemountete Partition darf man nicht reparieren. fsck arbeitet direkt auf den Strukturen der Platte; laufen gleichzeitig Schreibzugriffe des Kernels, zerstört das das Dateisystem. Vor der Prüfung also aushängen:

Partition aushängen

  • umount /dev/sdg1

Nur-Lesen-Prüfungen (-n) sind auch im gemounteten Zustand gefahrlos, weil sie nichts schreiben – die Ergebnisse können dann aber ungenau sein, weil sich das Dateisystem unter der Prüfung ändert.

Optionen

Option Beschreibung
-p Automatische Reparatur (preen). Behebt alle eindeutigen Fehler ohne Rückfrage und ist der empfohlene Weg für Skripte und den Boot-Vorgang. Bei mehrdeutigen Schäden bricht fsck ab und verlangt einen manuellen Lauf.
-a Wie -p, aber die ältere Form. Nur aus Kompatibilität vorhanden; man nimmt -p.
-y Beantwortet alle Rückfragen mit „Ja". Für den manuellen Lauf an einem beschädigten Dateisystem, wenn man alle Korrekturen zulassen will.
-n Öffnet das Dateisystem nur lesend und beantwortet alle Fragen mit „Nein". Prüft, ohne etwas zu ändern.
-f Erzwingt eine vollständige Prüfung, auch wenn das Dateisystem als sauber markiert ist.
-c Sucht zusätzlich mit badblocks nach defekten Blöcken und trägt sie aus.
-v Ausführliche Ausgabe.

-y und -n schließen sich aus, ebenso -p und -y. Man wählt eine Betriebsart.

Beispiele

Vollständige Prüfung ohne Änderung

Der sichere Einstieg: zeigt gefundene Fehler an, schreibt aber nichts. Auch im gemounteten Zustand unbedenklich.

  • fsck.ext4 -n /dev/sdg1

Erzwungene Prüfung

Prüft auch dann durch, wenn das Dateisystem als sauber markiert ist – etwa wenn man trotz „clean"-Status Zweifel hat.

  • fsck.ext4 -f /dev/sdg1

Automatische Reparatur

Behebt alle eindeutigen Fehler ohne Rückfrage. Der übliche Weg für einen unbeaufsichtigten Lauf.

  • fsck.ext4 -p /dev/sdg1

Manuelle Reparatur, alles bestätigen

Beantwortet jede Rückfrage mit „Ja". Für den Fall, dass -p abgebrochen hat und man die Reparatur von Hand zulässt.

  • fsck.ext4 -y /dev/sdg1

Vollständige Prüfung mit Suche nach defekten Blöcken

  • fsck.ext4 -cf /dev/sdg1

Wenn der Superblock beschädigt ist

Ist der primäre Superblock zerstört, findet fsck das Dateisystem nicht mehr. Dann greift man auf eine der Kopien zurück, deren Lage mkfs beim Anlegen ausgegeben hat (und die dumpe2fs oder mkfs -n anzeigen). Die erste Kopie liegt meist auf Block 32768:

  • fsck.ext4 -b 32768 /dev/sdg1

Aufgaben ext4

  • Erstellen Sie ein ext4-Dateisystem auf der 1. Partition von /dev/sdb.
  • Erstellen Sie ein ext4-Dateisystem auf der 2. Partition von /dev/sdb mit einer Blockgröße von 2048.
  • Erstellen Sie ein ext4-Dateisystem auf der 3.Partition von /dev/sdb mit einer festgelegten Anzahl von Inodes.
  • Ändern Sie das Label des ext4-Dateisystems auf der 1. Partition von /dev/sdb zu "daten-platte".
  • Stellen Sie das maximale Mount-Count auf 30 für das ext4-Dateisystem auf der 2. Partition von /dev/sdb ein.
  • Stellen Sie das Zeitintervall zwischen den Überprüfungen auf 2 Monate für das ext4-Dateisystem auf der 3. Partition von /dev/sdb ein.
  • Führen Sie eine Überprüfung des ext4-Dateisystems auf der 1. Partition von /dev/sdb durch.
  • Führen Sie eine erzwungene Überprüfung des ext4-Dateisystems auf der 2. Partition von /dev/sdb durch.
  • Führen Sie eine Überprüfung des ext4-Dateisystems auf der 3. Partition von /dev/sdb durch, ohne Änderungen vorzunehmen.