orm@doc-tcpip.org

Erstellt: März 2002 - Letzte Modifikation: März 2006

[ Main | Local ]


Das Journaled Filesystem


 
JFS 
AIX Standard-Filesystem für 32 Bit.

Loggt Änderungen der File-Metadaten, bevor die Schreib-Operationen starten.
Der Eintrag wird entfernt, wenn erfolgreich geschrieben wurde.
So kann man nach einem System-Crash gezielt die Einträge im Log prüfen,
korrigieren bzw. nachziehen (sonst wäre ein kompletter Check aller Einträge
im Filesystem nötig - was lange dauert...).

Kein integraler Bestandteil des LVM - benutzt ihn aber viel.
Ein JFS wird auf einem LV angelegt. 

Filesystem - eine hierarchische Baumstruktur aus Files und Direktories.
Hier wird die Information gespeichert, wo ein File physikalisch liegt, 
die Permissions, der Name und seine logische Stelle im System der Direktories.

Ein FS besteht aus:
Superblock
Inodes
Datenblöcken
Allokations Bitmaps
Files, Direktories

Superblock - Informationen des ganzen FS
Ist 4096 Bytes groß und beginnt bei 4096 auf dem LV.

Es stehen folgende Infos im Superblock:
- Größe des FS 
- Anzahl der Datenblöcke im FS
- Flag über den Status des FS
- Allocation Group Size

AIX: dumpfs /dev/hd4 zeigt Superblock,
Inode-Map, Disk-Map, des FS oder Special Device.

Logische Blocks: 4096 Byte
Ein File/Direktory hat nicht sofort einen ganzen logischen Block -
zuerst werden die Daten zuerst in Fragmente geschrieben. Das sind
weitere Untereinheiten eines Blocks.

Inodes: Jedes File oder Direktory hat 1 Inode. Die enthaltene Information:
File Typ
Permissions
Owner UID, GID
Anzahl der Links
Liste der physikalischen Daten-Blocks

Array nummerischer Sektionen
Pro Sektion 1 Adresse eines Logischen Blocks.
Angegeben werden das Startfragment und die Gesamtanzahl der Fragmente in einer
Allokation.

Beispiel: File mit 4096 Byte => 1 Adresse eines Blocks in der Inode.
Alle Daten ien einem logischen Block.
File mit 6144 Byte => 2 Adressen eines Blocks in der Inode
Die Daten werden auf die beiden Blocks verteilt, 1 Block mit 4096 Byte, 
einer mit 2048 Byte.
Ist das File so groß, daß die Zeiger nicht in die Inode passen, dann wird auf 
einen Block gezeigt, der die zusätzlichen Adressen enthält. Das ist ein indirekter
Block.

Ein indirekter Block kann nun seinerseits auf einen Block mit Zeigern deuten.
Das wird bei sehr großen Files notwendig, und nennt sich dann Doppelt-indirekter
Block.

Die Anzahl der Inodes wird beim Anlegen des FS festgelegt.
Sie hängt von 
der Größe des FS
der Größe der Allokations-Gruppe (8 MB ist Default)
und dem Verhältnis "Bytes pro Inodes" ab (4096 ist Default).

Die Anzahl der Inodes sieht man mit df -v (/usr/include/jfs/ino.h).

Die Zahl der Inodes ist die Zahl der Files, die man maximal auf diesem FS
ablegen kann - unabhängig von der Menge der freien Blocks.

Inodes im JFS sehen so aus:
128 Byte Struktur in der Inode List.
Der Offset in dieser Liste ist die eindeitige Inode-Nummer, mit deren Hilfe
das System die Inodes erkennt.

Inhalt einer Inode:
File Type und Permission Mode Bit
Größe des Files in Byte
Permissions für Owner
                Group
Anzahl der Blocks, die für das File alloziert sind
Last modified
Last accessed
Last time Inode modified
Anzahl der Hard Links
Reale Disk Adresse der Daten bzw. Indirekten Blöcke.

Fast man das File an, wird die Inode immer geändert. Allerdings kann man
die Inode anfassen, ohne das File zu ändern.

Die Inode enthält keine Pfade oder Dateinamen.
Die Direktory Einträge verknüpfen Namen und Modes mit dem File.

Man kann eine Inode zu vielen Namen verknüpfen (verlinken, ==> symlinks).

Dazu wird ein neuer Direktory-eintrag angelegt, der auch auf diese Inode
zeigt - ein Link.
Der Link-Count der Inode wird dabei erhöht.

Special Files sind Devices alles Art. Also Files, die eine Einheit 
(Platte, Soundkarte etc.) definieren und zugänglich machen.

In solch einer Inode werden keine Datenblocks angezeigt, sondern es
wird auf die Major und Minor Number gezeigt.

Ist der Link Count 0 geworden, so gilt das File als gelöscht, die Listen
werden gelöscht und die Blocks werden der Free List zugewiesen.

Direkte Addressierung
Es wird aud der Inode direkt auf die Datenblöcke gezeigt (8 Einträge
zu je 4096 Byte, das File kann also maximal 32786 Byte groß werden).

Einfache indirekte Addressierung
Der letzte Eintrag des Direkten Blocks zeigt auf einen indirekten Block
mit weiteren 1024 Verweisen auf die Datenblöcke. Die ersten 8 Einträge
werden nicht benutzt. 

Doppelte indirekte Addressierung
Hier zeigt der letzte Eintrag eines indirekten Blocks auf einen 
indirekten Block...
512 Verweise auf Blocks mit 1024 weiteren Verweisen.

Fragmente 
Kommen aus BSD. Die Einzelnen Blocks werden in kleine Teile 
zerlegt.

Ziel ist eine möglichst geringe IO Tätigkeit der Platte. Das kann man
einmal erreichen durch große Blöcke, die ein einem Satz gelesen werden
- man verschwendet viel Platz.

Oder man passt die Blöcke auf der den logischen Blöcken zu.


Die Hauptaufgabe des JFS, das Journaling, also die Sicherung der Filesystem
Metadaten vor einem Schreibvorgang, kann man mit einer Mount-Option
abschalten (weil es die Performace etwas drückt). Es ist dann natürlich
die Integrität des FS nicht mehr gesichert, und nach einem Crash ist
ein voller FS Check nötig - Datenverlust kann eintreten. 
Die Option ist nointegrity. 

JFS2

Das Standard-JFS für den 64-Bit Kernel.

Alle Libraries, Kommandos, Services und Header-Files sind in AIX für
beide FS ausgelegt. Nur auf 64-bittiger Hardware kann allerdings JFS2
im vollen Umfang eingesetzt werden. 

Im Fall des JFS2 sind die i-Nodes nicht mehr in einer verlinkten Liste
angeordnet, sondern in einem B-Tree. Die Dauer von Suchanfragen ist also 
nicht mehr linear, sondern erheblich schneller.

Die Anzahl der i-Nodes ist auch nicht mehr festgelegt; mehr i-Nodes werden
dynamisch zugefügt. Bei JFS mußte das vor dem Anlegen des FS festgelegt
werden - NBPI: Die Anzahl der Byte pro i-Node, also die Länge der verlinkten
Liste, in denen die i-Nodes aufgeführt sind. Dem B-Tree ist daß egal...

Weiterhin läßt JFS2 erheblich größere Files zu: ein File (oder Filesystem)
kann 16 TB groß
werden; architektonisch möglich wäre sogar 4 PB (JFS erlaubt Files mit
max. 64 GB und Filesysteme mit max. 1 TB). 

Auch Zugriffe auf Filesysteme mit sehr vielen Einträgen sind erheblich
verbessert worden.

[ Main | Local ]

[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]

Copyright 2001-2021 by Orm Hager - Es gilt die GPL
Feedback bitte an: Orm Hager (orm@doc-tcpip.org )