Linux Deutsch

JFS-Dateisystem unter Linux

JFS unter Linux verständlich erklärt: Journaling, Inodes, ACLs, Größenlimits, Einrichtung, Wartung, Vergrößerung und Vergleich mit XFS und FAT.

JFS steht für Journaled File System. Es ist ein von IBM entwickeltes, journalingfähiges 64-Bit-Dateisystem, das unter Linux vor allem für Datenpartitionen und bestehende Systeme interessant ist. Dieser Artikel erklärt Aufbau, Eigenschaften, Grenzen, Verwaltung und die Auswahl gegenüber XFS und FAT.

Was ist JFS?

JFS bedeutet Journaled File System. Das Dateisystem wurde mit dem Ziel entwickelt, Leistung, Zuverlässigkeit und eine effiziente Speicherverwaltung ausgewogen miteinander zu verbinden. Die Bezeichnung „64-Bit-Dateisystem“ beschreibt das Dateisystemdesign mit großen Adress- und Größenbereichen.

Wichtig ist die Unterscheidung zwischen dem Dateisystem und seiner Linux-Unterstützung:

  • JFS: Format, Strukturen und Regeln, nach denen Dateien, Verzeichnisse und Metadaten auf einem Datenträger gespeichert werden.
  • Linux-Kernel-Treiber: Bestandteil des Kernels oder ein Kernelmodul, das den Zugriff des Betriebssystems auf ein JFS-Dateisystem ermöglicht.

Ein JFS-Dateisystem kann also vorhanden sein, obwohl der passende Treiber gerade nicht geladen ist. Umgekehrt reicht ein geladener Treiber nicht aus, wenn das Zielgerät kein JFS enthält.

Herkunft und Entwicklung

JFS wurde von IBM entwickelt und zunächst in IBM-Systemen eingesetzt, insbesondere in AIX und OS/2. Die OS/2-bezogene JFS-Variante wurde anschließend unter der GNU General Public License freigegeben. Die Unterstützung für JFS wurde während einer frühen Entwicklung der Linux-Kernelreihe 2.4 aufgenommen.

Diese Herkunft erklärt einige Eigenschaften des Systems: JFS wurde nicht ausschließlich für moderne Linux-Installationen entworfen, sondern stammt aus einer Umgebung mit hohen Anforderungen an große Dateisysteme und zuverlässige Wiederherstellung. Historische Herkunft allein entscheidet jedoch nicht über die beste heutige Wahl. Verbreitung, Distribution, Kernelpakete, Administrationswerkzeuge und vorhandenes Fachwissen sind ebenso wichtig.

Journaling: schneller zurück zu einem konsistenten Dateisystem

Ein Journal ist ein Protokollbereich für geplante Dateisystemänderungen. Bevor bestimmte Metadatenänderungen dauerhaft in den normalen Dateisystembereich geschrieben werden, kann das Dateisystem die dafür nötigen Informationen im Journal festhalten.

Nach einem Stromausfall oder Systemabsturz prüft der Treiber das Journal und verarbeitet beziehungsweise verwirft unvollständig abgeschlossene Änderungen. Dadurch kann die Wiederherstellung der Metadatenkonsistenz deutlich schneller sein, als das gesamte Dateisystem vollständig zu durchsuchen.

  • Metadaten beschreiben beispielsweise Dateinamen, Verzeichnisse, Eigentümer, Zeitstempel und Verweise auf Datenblöcke.
  • Journaling schützt in erster Linie die interne Konsistenz des Dateisystems.
  • Es ist kein Ersatz für Sicherungen und garantiert nicht, dass der zuletzt geänderte Inhalt jeder Datei erhalten bleibt.
  • Ein Programm kann zum Zeitpunkt des Ausfalls noch nicht alle gewünschten Daten geschrieben haben.

Effizientes Journaling gehört zu den zentralen Eigenschaften von JFS. Trotzdem sind saubere Systemabschaltungen, USV-Schutz bei kritischen Systemen und regelmäßige Sicherungen weiterhin wichtig.

Inodes und Speicherzuweisung

Ein Inode ist eine Datenstruktur mit Metadaten einer Datei. Dazu gehören unter anderem Eigentümer, Berechtigungen, Zeitstempel und Verweise auf die Datenblöcke. Der Dateiname liegt in der Verzeichnisstruktur und ist mit dem Inode verknüpft. Mehr Hintergrund bietet der Beitrag Inodes.

JFS verwendet eine dynamische Inode-Allokation. Inodes werden also bedarfsgerecht erzeugt oder zugewiesen, statt die gesamte Anzahl bereits beim Anlegen des Dateisystems starr vorab zu reservieren.

  • Bei vielen kleinen Dateien kann der verfügbare Platz flexibler genutzt werden.
  • Das Risiko, dass zwar Datenblöcke frei sind, aber keine vorab reservierten Inodes mehr verfügbar sind, wird reduziert.
  • Die dynamische Verwaltung beseitigt nicht alle Speichergrenzen: Metadaten, Verzeichnisse und Daten benötigen weiterhin Platz.

Verzeichnisse und Dateinamen

JFS organisiert Verzeichnisse so, dass Einträge effizient verwaltet und gesucht werden können. Das ist besonders bei Verzeichnissen mit vielen Dateien nützlich. Die maximale Dateinamenlänge beträgt 255 Byte.

Byte und sichtbare Zeichen sind nicht dasselbe. Bei UTF-8 oder einer anderen Mehrbyte-Kodierung kann ein einzelnes Zeichen mehrere Bytes belegen. Ein Dateiname mit 255 sichtbaren Zeichen ist daher nicht in jeder Kodierung zulässig.

Zugriffsrechte und ACLs

JFS unterstützt klassische Linux-Berechtigungen und Access Control Lists (ACLs). Klassische Berechtigungen unterscheiden zwischen Eigentümer, Gruppe und anderen Benutzern. Eine ACL ergänzt dieses Modell um gezielte Regeln für weitere Benutzer oder Gruppen.

Beispielsweise kann ein Projektverzeichnis dem Eigentümer vollständigen Zugriff geben, einer bestimmten Gruppe Schreibzugriff gewähren und zusätzlich einem einzelnen Benutzer Leserechte einräumen. Die wirksamen ACL-Rechte können durch die ACL-Maske begrenzt werden. Außerdem müssen alle übergeordneten Verzeichnisse den Zugriffspfad erlauben.

Prüfen Sie vor der Verwendung, ob die Distribution die ACL-Werkzeuge wie setfacl und getfacl installiert hat und ob Kernel sowie Einhängeoptionen ACLs passend bereitstellen.

sudo setfacl -m u:BENUTZER:rwX /mnt/jfs-data/projekt
getfacl /mnt/jfs-data/projekt

Technische Kerndaten von JFS

MerkmalWert oder UnterstützungBedeutung in der Praxis
DateisystemtypJournalingfähiges 64-Bit-DateisystemFür große Speicherbereiche und konsistente Metadatenverwaltung ausgelegt
JournalingJaSchnellere Wiederherstellung der Dateisystemkonsistenz nach Ausfällen
Architektur64 BitGroße Adress- und Größenbereiche
Dynamische InodesJaFlexiblere Nutzung des Speicherplatzes, auch bei vielen kleinen Dateien
ACL-UnterstützungJa, abhängig von Kernel, Werkzeugen und KonfigurationFeingranulare Rechte für zusätzliche Benutzer und Gruppen
Maximale DateigrößeBis zu 4 PBFür sehr große einzelne Dateien geeignet; praktische Grenzen können niedriger liegen
Maximale DateisystemgrößeBis zu 32 PBHohe Skalierbarkeit; Hardware und Werkzeuge begrenzen den realen Einsatz
Maximale Dateinamenlänge255 ByteMehrbytezeichen können die Zahl sichtbarer Zeichen reduzieren
VergrößerbarkeitJa, auch online möglichZuerst muss die darunterliegende Partition oder das logische Volume wachsen

PB bedeutet Petabyte. In der hier verwendeten dezimalen Angabe entspricht 1 PB = 1000 TB. Die genannten Höchstwerte sind theoretische beziehungsweise formatspezifische Grenzen. Kernel, Prozessorarchitektur, Blockgerät, Partitionierung, LVM und eingesetzte Werkzeuge können die praktisch erreichbare Größe begrenzen.

JFS unter Linux verwenden

1. Kernel- und Modulunterstützung prüfen

grep jfs /proc/filesystems
lsmod | grep '^jfs'
sudo modprobe jfs

Ein Eintrag in /proc/filesystems zeigt, dass der Kernel den Dateisystemtyp kennt. Ein nicht angezeigtes Modul bedeutet nicht zwingend, dass JFS fehlt: Der Treiber kann fest einkompiliert oder noch nicht geladen sein. Die genaue Verfügbarkeit hängt von Kernel und Distribution ab.

2. Ein JFS-Dateisystem anlegen

Verwenden Sie ausschließlich ein unbenutztes Testgerät, eine dafür vorgesehene Partition oder ein passendes logisches Volume. Das Formatieren zerstört vorhandene Daten auf dem Zielgerät.

sudo mkfs.jfs /dev/DEVICE
sudo mkdir -p /mnt/jfs-data
sudo mount -t jfs /dev/DEVICE /mnt/jfs-data
findmnt -T /mnt/jfs-data
df -Th /mnt/jfs-data

Ersetzen Sie /dev/DEVICE durch das tatsächlich ausgewählte Blockgerät. Kontrollieren Sie die Zuordnung vorher beispielsweise mit lsblk. findmnt zeigt den Einhängepunkt und Typ, während df -Th Typ, Kapazität und Belegung ausgibt.

3. Dauerhaft per UUID einhängen

Gerätenamen wie /dev/sdb1 können sich ändern. Eine UUID ist eine eindeutige Kennung des Dateisystems und eignet sich deshalb besser für /etc/fstab.

sudo blkid /dev/DEVICE
sudoedit /etc/fstab
sudo mount -a
findmnt /mnt/jfs-data
UUID=IHRE-UUID /mnt/jfs-data jfs defaults 0 0

Erstellen Sie den Einhängepunkt vor dem Test. Nach jeder Änderung an /etc/fstab sollte mount -a im laufenden System ausgeführt werden, bevor neu gestartet wird. Informationen zur Konfigurationsdatei finden Sie unter Die Datei /etc/fstab.

JFS-Dateisystem vergrößern

JFS-Dateisysteme können vergrößert werden. Dabei müssen die Ebenen in der richtigen Reihenfolge wachsen:

  1. Erstellen Sie eine aktuelle Sicherung und prüfen Sie die Belegung.
  2. Vergrößern Sie die zugrunde liegende Partition oder das logische Volume.
  3. Erweitern Sie anschließend das JFS-Dateisystem mit jfs_resize.
  4. Kontrollieren Sie die neue Kapazität.
sudo jfs_resize /mnt/jfs-data
df -h /mnt/jfs-data

Eine Online-Vergrößerung bei eingehängtem Dateisystem ist grundsätzlich möglich. Ob sie in einer konkreten Umgebung funktioniert, hängt jedoch von Version, Kernel, Blockgerät und Speicherschicht ab. Vergrößern ist außerdem nicht gleichbedeutend mit einer jederzeit verfügbaren oder gleich einfachen Verkleinerung. Planen Sie eine Verkleinerung nicht ohne genaue Prüfung der Werkzeugdokumentation und ein getestetes Backupverfahren.

Wartung, Prüfung und Reparatur

Journaling reduziert den Wiederherstellungsaufwand, ersetzt aber keine saubere Abschaltung. Führen Sie Reparatur- oder Konsistenzprüfungen grundsätzlich nur durch, wenn das Dateisystem nicht eingehängt und nicht aktiv verwendet wird.

sudo umount /mnt/jfs-data
sudo jfs_fsck /dev/DEVICE

jfs_fsck ist das JFS-spezifische Prüf- und Reparaturwerkzeug. Auf vielen Systemen ist fsck.jfs als Frontend verfügbar. Reparatur kann Daten verändern oder entfernen, wenn beschädigte Strukturen nicht anders wiederhergestellt werden können. Legen Sie deshalb vor Reparaturen und Größenänderungen eine aktuelle Sicherung an.

WerkzeugAufgabeWichtige Vorsichtsmaßnahme
mkfs.jfsJFS-Dateisystem erstellenZielgerät sorgfältig prüfen; Formatieren löscht Daten
jfs_fsck oder fsck.jfsPrüfen und ReparierenNur auf nicht eingehängten Dateisystemen verwenden; vorher sichern
jfs_resizeJFS vergrößernPartition oder logisches Volume zuerst erweitern
blkidUUID und Dateisystemtyp anzeigenUUID dem richtigen Gerät zuordnen
findmntEinhängepunkte und Dateisystemtypen prüfenDen tatsächlich aktiven Einhängepunkt kontrollieren
setfaclACL-Regeln setzenACL-Maske und übergeordnete Verzeichnisse berücksichtigen
getfaclACL-Regeln anzeigenEffektive Rechte statt nur Modusbits auswerten

JFS im Vergleich zu XFS und FAT

KriteriumJFSXFSFAT
JournalingJaJaNein
Linux-Berechtigungen und ACLsUnterstütztUnterstütztKeine nativen Linux-Dateirechte wie bei JFS und XFS
Einsatz auf Linux-DatenpartitionenMögliche Option, besonders bei vorhandener JFS-InfrastrukturHäufige Option für große Datenmengen und skalierbare ArbeitslastenFür Linux-interne Daten mit komplexen Rechten meist ungeeignet
Eignung für plattformübergreifende WechselmedienBegrenztBegrenztHoch, abhängig vom FAT-Typ und Betriebssystem
Skalierung großer DateisystemeSehr groß ausgelegt, bis zu den genannten theoretischen GrenzenSehr groß ausgelegtDeutlich stärker durch Format und Implementierung begrenzt
Wiederherstellung nach einem AbsturzJournal unterstützt eine schnellere MetadatenwiederherstellungJournal unterstützt eine schnellere MetadatenwiederherstellungKein Journal; Prüfung kann umfangreicher ausfallen
Typische AuswahlgründeBestehende Systeme, ausgewogene Eigenschaften, JFS-KompetenzGroße Linux-Datenbestände und vorhandene XFS-AdministrationKompatibilität mit vielen Geräten und Betriebssystemen

Die Tabelle macht keinen pauschalen Leistungssieger aus. Die passende Wahl hängt von Infrastruktur, Arbeitslast, Wiederherstellungsanforderungen, Betriebssystemkompatibilität und verfügbaren Administrationstools ab. Für den systemübergreifenden Datenaustausch kann FAT sinnvoll sein; für eine Linux-interne Datenpartition sind Journaling, Berechtigungen und Skalierbarkeit oft wichtiger. XFS ist eine weitere Linux-Option für große Datenmengen. Ein historisch solides Dateisystem muss deshalb nicht automatisch die Standardwahl für eine neue Linux-Installation sein.

Fehlerbehebung

Werkzeug nicht gefunden

Fehlen mkfs.jfs oder jfs_resize, sind die JFS-Nutzerwerkzeuge wahrscheinlich nicht installiert oder in einem separaten Distributionspaket enthalten.

command -v mkfs.jfs
command -v jfs_resize

Installieren Sie das passende Paket Ihrer Distribution und prüfen Sie anschließend Version sowie Manpages der Werkzeuge.

JFS lässt sich nicht einhängen

grep jfs /proc/filesystems
sudo modprobe jfs
sudo blkid /dev/DEVICE
dmesg | tail -n 50

Mögliche Ursachen sind fehlende Kernelunterstützung, ein nicht geladenes Modul, ein falscher Dateisystemtyp, eine falsche UUID oder das falsche Blockgerät. Prüfen Sie Gerät, Einhängepunkt und /etc/fstab sorgfältig.

Fehler in /etc/fstab

sudo mount -a
findmnt --verify
sudo blkid

Diese Befehle helfen, Syntax, UUIDs und Einhängepunkte zu prüfen. Beheben Sie Fehler im laufenden System, bevor Sie neu starten. Für nicht zwingend benötigte Datenlaufwerke können je nach Systemanforderung geeignete Einhängeoptionen sinnvoll sein.

jfs_resize kann nicht erweitern

Prüfen Sie zunächst, ob die darunterliegende Partition oder das logische Volume tatsächlich vergrößert wurde und ob der verwendete Einhängepunkt zum erwarteten Gerät gehört.

lsblk
findmnt /mnt/jfs-data
df -h /mnt/jfs-data

Erstellen Sie vor weiteren Änderungen eine Sicherung und beachten Sie die Dokumentation der installierten Werkzeugversion.

ACL-Regeln wirken nicht

getfacl /mnt/jfs-data/projekt
namei -l /mnt/jfs-data/projekt

Kontrollieren Sie die ACL-Maske, die Rechte aller übergeordneten Verzeichnisse und den Zugriff mit dem betroffenen Benutzerkonto. Fehlen die Befehle, muss das ACL-Werkzeugpaket der Distribution installiert werden.

Zusammenfassung

  • JFS ist ein von IBM entwickeltes, journalingfähiges 64-Bit-Dateisystem.
  • Das Journal beschleunigt die Wiederherstellung konsistenter Metadaten, ersetzt aber keine Datensicherung.
  • Dynamische Inodes helfen bei einer flexiblen Speicherverwaltung, auch bei vielen kleinen Dateien.
  • JFS unterstützt Linux-Berechtigungen und ACLs.
  • Die theoretischen Grenzen liegen bei bis zu 4 PB pro Datei und bis zu 32 PB pro Dateisystem; reale Grenzen hängen von der Umgebung ab.
  • Zum Vergrößern muss zuerst die Speicherschicht darunter wachsen, danach wird JFS erweitert.
  • Prüfungen und Reparaturen erfolgen nur auf nicht eingehängten Dateisystemen.
  • Ob JFS, XFS oder FAT sinnvoll ist, entscheidet der konkrete Einsatz und nicht allein die technische Maximalgröße.