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
| Merkmal | Wert oder Unterstützung | Bedeutung in der Praxis |
|---|---|---|
| Dateisystemtyp | Journalingfähiges 64-Bit-Dateisystem | Für große Speicherbereiche und konsistente Metadatenverwaltung ausgelegt |
| Journaling | Ja | Schnellere Wiederherstellung der Dateisystemkonsistenz nach Ausfällen |
| Architektur | 64 Bit | Große Adress- und Größenbereiche |
| Dynamische Inodes | Ja | Flexiblere Nutzung des Speicherplatzes, auch bei vielen kleinen Dateien |
| ACL-Unterstützung | Ja, abhängig von Kernel, Werkzeugen und Konfiguration | Feingranulare Rechte für zusätzliche Benutzer und Gruppen |
| Maximale Dateigröße | Bis zu 4 PB | Für sehr große einzelne Dateien geeignet; praktische Grenzen können niedriger liegen |
| Maximale Dateisystemgröße | Bis zu 32 PB | Hohe Skalierbarkeit; Hardware und Werkzeuge begrenzen den realen Einsatz |
| Maximale Dateinamenlänge | 255 Byte | Mehrbytezeichen können die Zahl sichtbarer Zeichen reduzieren |
| Vergrößerbarkeit | Ja, auch online möglich | Zuerst 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:
- Erstellen Sie eine aktuelle Sicherung und prüfen Sie die Belegung.
- Vergrößern Sie die zugrunde liegende Partition oder das logische Volume.
- Erweitern Sie anschließend das JFS-Dateisystem mit
jfs_resize. - 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.
| Werkzeug | Aufgabe | Wichtige Vorsichtsmaßnahme |
|---|---|---|
mkfs.jfs | JFS-Dateisystem erstellen | Zielgerät sorgfältig prüfen; Formatieren löscht Daten |
jfs_fsck oder fsck.jfs | Prüfen und Reparieren | Nur auf nicht eingehängten Dateisystemen verwenden; vorher sichern |
jfs_resize | JFS vergrößern | Partition oder logisches Volume zuerst erweitern |
blkid | UUID und Dateisystemtyp anzeigen | UUID dem richtigen Gerät zuordnen |
findmnt | Einhängepunkte und Dateisystemtypen prüfen | Den tatsächlich aktiven Einhängepunkt kontrollieren |
setfacl | ACL-Regeln setzen | ACL-Maske und übergeordnete Verzeichnisse berücksichtigen |
getfacl | ACL-Regeln anzeigen | Effektive Rechte statt nur Modusbits auswerten |
JFS im Vergleich zu XFS und FAT
| Kriterium | JFS | XFS | FAT |
|---|---|---|---|
| Journaling | Ja | Ja | Nein |
| Linux-Berechtigungen und ACLs | Unterstützt | Unterstützt | Keine nativen Linux-Dateirechte wie bei JFS und XFS |
| Einsatz auf Linux-Datenpartitionen | Mögliche Option, besonders bei vorhandener JFS-Infrastruktur | Häufige Option für große Datenmengen und skalierbare Arbeitslasten | Für Linux-interne Daten mit komplexen Rechten meist ungeeignet |
| Eignung für plattformübergreifende Wechselmedien | Begrenzt | Begrenzt | Hoch, abhängig vom FAT-Typ und Betriebssystem |
| Skalierung großer Dateisysteme | Sehr groß ausgelegt, bis zu den genannten theoretischen Grenzen | Sehr groß ausgelegt | Deutlich stärker durch Format und Implementierung begrenzt |
| Wiederherstellung nach einem Absturz | Journal unterstützt eine schnellere Metadatenwiederherstellung | Journal unterstützt eine schnellere Metadatenwiederherstellung | Kein Journal; Prüfung kann umfangreicher ausfallen |
| Typische Auswahlgründe | Bestehende Systeme, ausgewogene Eigenschaften, JFS-Kompetenz | Große Linux-Datenbestände und vorhandene XFS-Administration | Kompatibilitä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.