# Journaled File System

Das Journaled File System (JFS) wurde im Jahr 1990 von IBM für ihr eigenes Betriebssystem AIX veröffentlicht. Die re-implementierte Variante JFS2 oder Enhanced Journaled Filesystem wurde 1999 mit dem Betriebssystem OS/2 veröffentlicht und ist seit 2000 auch für Linux verfügbar. In AIX ersetzte JFS2 die ältere Variante ab der 2001 veröffentlichten Version 5.1.
Im Rahmen von Linux ist JFS2 als quelloffene Software unter der GNU General Public License freigegeben.
JFS für AIX sollte nicht mit dem Veritas File System verwechselt werden, das unter HP-UX ebenfalls als JFS bezeichnet wird.

## JFS1

Retronym als JFS1 bezeichnet, war die erste Version des Dateisystems ab AIX-Version 3.1 in IBMs Unix-Betriebssystem enthalten. Hintergrund war eine weitgehende Virtualisierung der Hardwareschicht in dieser damals neu vorgestellten Version 3 von AIX: Ein ebenso neu vorgestellter Logical Volume Manager (LVM) löste die starren Zugriffsschemata auf Datenträgern ab, ein neuer Speichermanager brachte die Virtualisierung des Speicherraumes, also die Auslagerung von Hauptspeicher auf eine (virtuelle) Festplatte, und die PowerPC-CPU-Familie, die noch heute das Herzstück unter anderem der pSeries ist, wurde eingeführt.
Das primäre Designziel von JFS war die stetige Konsistenz des Dateisystems: Änderungen am Dateisystem werden transaktionsorientiert geschrieben sowie in einem Journal protokolliert. Bei einem Absturz kann somit – ausgehend von einem Konsistenzpunkt der Transaktionen – über das Journal sehr effizient ein konsistenter Status des Dateisystems hergestellt werden. Ein voller Zugriff auf das Dateisystem ist also sehr schnell wieder erreicht. Im Fokus steht damit die Verfügbarkeit der Ressource Dateisystem, nicht die Performance oder die Integrität der Dateiinhalte (das Journaling bezieht sich nur auf Änderungen im Dateisystem, also beispielsweise Dateieinträge in Verzeichnissen, und nicht auf den eigentlichen Dateiinhalt).
Der LVM ist für die Skalierbarkeit des Dateisystems nützlich: im laufenden Betrieb und unter Last können einfach Festplatten in der Konfiguration ergänzt und in die Volume Group mit aufgenommen werden um das Dateisystem zu erweitern.

## JFS2

Ab 1995 begann IBM mit den Arbeiten an einer Neu-Implementierung, die skalierbarer sein sollte, um u. a. auf Mehrprozessorsystemen bessere Performance zu bieten. Gleichzeitig sollte die neue Version auch auf anderen Betriebssystemen als AIX nutzbar sein, dessen „historischer“ JFS-Code stark für die pSeries-Architektur optimiert war.
Die erste Veröffentlichung von JFS2 war mit dem Betriebssystem OS/2 Warp Server for e-business (OS/2 4.50, 32-Bit-x86 „IA-32“) im April 1999, in der Client-Version von OS/2 Warp enthalten ist es ab der Veröffentlichung vom Oktober 2000. Dieselbe Code-Basis ist auch in AIX ab Version 5L 5.1 vom Mai 2001 als Enhanced Journaled Filesystem „JFS2“ enthalten.
Ab Dezember 1999 begann IBM, den Quelltext von JFS2 nach Linux zu portieren. Ab Februar 2000 waren die ersten Patches für den Linux-Kernel 2.4 verfügbar. Offiziell in den Linux-Kernel aufgenommen wurde JFS2 am 22. Februar 2002 in die Entwickler-Version 2.5.6-pre2 als „JFS“ (ohne die „2“). Der Kernel-Entwickler Alan Cox integrierte das (Enhanced) Journaled Filesystem in seinen Kernel-Quellen ab Version 2.4.18-pre9-ac4 vom Februar 2002. Auch von vielen Linux-Distributionen wurde JFS in den damals stabilen 2.4.x-Kernel eingepflegt, wie z. B. bei Debian GNU/Linux 3.0 vom Juli 2002.

### Unterschiede

Die wichtigsten Größenunterschiede:
Unterschiede zwischen JFS1 und JFS2 :
| Merkmal | JFS1 | JFS2 |
| Maximale Dateisystemgröße | 1 Tebibyte | 4 Pebibyte (Empfohlen 32 Tebibyte) |
| Maximale Dateigröße | 64 GiB | 1 Pebibyte (Empfohlen 16 Tebibyte) |
| Anzahl der Inodes | Statisch, bei Erstellung des Dateisystems festgelegt | Dynamisch, begrenzt durch Plattenplatz |
| Verzeichnisorganisation | Linear | B+-Baum |
Darüber hinaus wurden Optimierungen für aktuelle Server-Hardware vorgenommen; so ist die Leistung von JFS2 etwas besser als die von JFS1.
Es wird zwar Linux unterstützt, aber die Defragmentierung wurde bislang noch nicht auf Linux portiert. Dies kann dazu führen, dass durch das Anlegen und Löschen vieler kleiner Dateien (einige KiB) das Dateisystem fragmentiert und vor allem die Schreibzugriffe sich etwas verlangsamen und eine höhere CPU-Last erzeugen. Aufgrund der Extent (engl. Ausdehnung, bestehend aus einem Adresse-Länge-Paar)-basierten Allokation von Dateiblöcken und einer intelligenten Allokationsstrategie, d. h. benachbarte Extents derselben Datei werden während des Änderns von Dateien verschmolzen (dies wird wahrscheinlicher, je fragmentierter das Dateisystem wird), bleibt der Fragmentierungsgrad aber unter einem bestimmten Verhältnis. Viele andere Datei- und Datenbank-Systeme verwenden eine ähnliche Extent-basierte Dateiblock-Allokation.