# Journaling-Dateisystem

Ein Journaling-Dateisystem (teilweise lehnübersetzt aus dem dazu ursprünglich englischen journaling file system) ist ein Dateisystem, das alle Änderungen vor dem eigentlichen Schreiben in einem dafür reservierten Speicherbereich, dem Journal, aufzeichnet. Damit ist es zu jedem Zeitpunkt möglich, einen konsistenten Zustand der Daten zu rekonstruieren, auch wenn ein Schreibvorgang an beliebiger Stelle abgebrochen wurde. Diese Eigenschaft ist im Fall von Systemabstürzen oder Stromausfällen von Vorteil. So kann die bei herkömmlichen Dateisystemen nach solchen Vorfällen oft automatisch gestartete Überprüfung des ganzen Dateisystems mit oft erfolglosen Reparaturversuchen entfallen. Speziell bei großen Festplatten mit Partitionsgrößen über 100 Gigabyte ergibt sich hieraus auch eine beträchtliche Zeitersparnis beim Booten, da das Überprüfen dieser durchaus mehrere Stunden dauern kann.
Man unterscheidet zwischen Metadaten-Journaling und Full-Journaling. Während Metadaten-Journaling lediglich die Konsistenz des Dateisystems garantiert, wird beim Full-Journaling auch die Konsistenz der Dateiinhalte gewährleistet. Umgangssprachlich wird oft der allgemeine Begriff des Journaling verwendet, wenn eigentlich Metadaten-Journaling gemeint ist.

## Problematik von Dateisystemaktualisierungen

Ein Dateisystem speichert Informationen über Dateien und dateiähnliche Objekte (insbesondere Verzeichnisse), indem es einem Namen Daten zuordnet. Es gibt verschiedene Möglichkeiten, dies durchzuführen, und jedes Dateisystem benutzt teilweise ähnliche, aber nie vollständig identische Strukturen. Allen Dateisystemen gemeinsam ist, dass Veränderungen von Dateien (dazu gehören auch das Erstellen, Verschieben, Umbenennen oder Löschen) Schreiboperationen an mehreren Stellen auf dem Massenspeicher erfordern. Führt man die erste Schreiboperation aus, befindet sich das Dateisystem nicht mehr in einem konsistenten Zustand (es enthält Änderungen, aber noch nicht alle Änderungen; die Semantik dabei ist: Es wird davon ausgegangen, dass abgeschlossene Schreiboperationen die Datei von einem konsistenten Zustand in einen anderen überführt haben), schließt man den letzten Schreibvorgang ab, ist das Dateisystem wieder konsistent. Muss der Computer jedoch zwischenzeitlich neu gestartet werden (sei es wegen eines Absturzes, eines Stromausfalls, oder Nutzung des Reset-Tasters), so muss das Dateisystem erst aufwändig auf solche Fehler untersucht werden, bevor man wieder sicher damit arbeiten kann. Überspringt man solch einen Test, kann es bei nachfolgenden Schreiboperationen zu schwerwiegenden Fehlern kommen, die zum Totalverlust aller Daten führen können.

## Funktion des Journalings

Das Journaling-Konzept wirkt der Problematik von Dateisystemaktualisierungen entgegen. Möchte der Benutzer eine Datei D aus dem Verzeichnis V1 ins Verzeichnis V2 verschieben, dann müssen zwei Schreiboperationen durchgeführt werden: Zum einen muss der alte Eintrag auf D aus dem Verzeichnis V1 entfernt werden, zum anderen muss der neue Eintrag D dem Verzeichnis V2 hinzugefügt werden. Letzteres kann es erforderlich machen, dass das Verzeichnis V2 vergrößert wird, was dann noch weitere Veränderungen nach sich ziehen würde. Alle diese Änderungen werden nun nicht an den Stellen durchgeführt, wo sie eigentlich hingehören, sondern sie werden zuerst in einem speziellen Bereich in das Dateisystem geschrieben, dem sogenannten Journal. Dort steht dann z. B. qualitativ:
* Entferne Eintrag D aus Verzeichnis V1
* Füge Eintrag D dem Verzeichnis V2 hinzu
Diese Vorgehensweise alleine ergibt noch nicht das gewünschte Ziel der Sicherheit gegen nicht vollständig durchgeführte Operationen, da hier wieder mitten in der Operation – vielleicht zufällig genau nach „Entferne Eintrag D aus Verzeichnis V1“ aber vor „Füge Eintrag D dem Verzeichnis V2 hinzu“ – das System abstürzt. Daher muss das Journal von Zeit zu Zeit abgeschlossen werden. Dabei wird verzeichnet, wie viele Änderungen bis hier durchgeführt wurden, und es wird durch eine Prüfsumme sichergestellt, dass die Daten korrekt sind. Eine Verschiebeoperation mit dem Anlegen der Datei sollte am neuen Ort beginnen, dann alle Daten kopieren und mit der Löschung des Verzeichniseintrags und somit auch der Freigabe des Festplattenplatzes auf dem Quelldatenträger beendet werden.

## Auswahl von Journaling-Dateisystemen

Zu einer Zeit, als Dateisysteme noch großteils ohne Journal implementiert waren, wurden Neuentwicklungen teils speziell auf ein Journal ausgelegt oder für existierende Dateisysteme eines nachträglich hinzugefügt:
* AdvFS: Tru64 UNIX
* BeFS: BeOS
* extended filesystem ab ext3: Linux (über Drittanbieter-Dateisystemtreiber auch für viele weitere Betriebssysteme, dann jedoch teilweise ohne Journaling-Funktion)
* FFS: BSD
* gjournal ist eine vom Dateisystem unabhängige Journaling-Implementation für FreeBSD
* HFS+: Mac OS X/​OS X/​macOS ab Mac OS X Server 10.2 bzw. ab Panther (unter Mac OS ab 8.1 und bis Mac OS X 10.2 jedoch ohne Journal)
* JFS/JFS2: Linux, AIX und OS/2
* NTFS: Windows (NT-basiert; weiterentwickelt aus HPFS)
* Professional File System (PFS): AmigaOS und MorphOS
* ReiserFS ab Version 3: Linux
* Smart File System (SFS): AmigaOS und MorphOS
* VxFS: AIX, HP-UX, Linux und Solaris
* XFS: Linux und IRIX
Die unter BSD verwendeten UFS-Dateisysteme verwenden eine Technik namens Softupdates, die einen in Bezug auf die Zielsetzung vergleichbaren Ansatz verfolgt.
Bei den meisten Dateisystemen der 1990er Jahre ist nur Metadaten-Journaling implementiert, etwa bei HFS+ oder bei NTFS, und bei voll auf Journaling ausgelegten Dateisystemen ist Daten-Journaling aus Gründen der Performance immer optional. Da Metadaten-Journaling seit Mitte der 2000er Jahre Standard ist und unter verbreiteten freien, kommerziellen und alternativen Betriebssystemen implementiert ist, fällt die Angabe „Journaling-Dateisystem“ nach den 2010er Jahren meist weg, da man davon ausgehen kann, dass ein modernes Dateisystem diese Funktion von Haus aus bietet. Teils kann bei der Erstellung des Dateisystems eingestellt werden, ob das Journal auch für Daten aktiviert werden soll („Full-Journaling“) oder nicht.
Beispiele solcher moderner Dateisysteme für die verbreiteten (PC-)Betriebssysteme Windows, macOS und Linux:
* APFS: macOS ab 10.13 und iOS ab 10.3
* btrfs: Linux u. a. (WinBtrfs für Windows)
* ReFS: Windows (NT-basiert)