VOICE Homepage: http://www.os2voice.org
[Newsletter Inhalt]
[Vorherige Seite] [Nächste Seite]
[Artikelübersicht]

November 2000
editor@os2voice.org


Eine kurze Einführung zu LVM und JFS

Von Michal Necasek ©November 2000, Übersetzung: ThomasKlein


Referenzmaterial zu LVM und JFS:

Grundsätzliches

LVM und JFS sind genaugenommen nichts Neues in der OS/2-Welt - erstmalig tauchten Sie ungefähr vor zwei Jahren im OS/2 Warp Server for e-business auf (auch bekannt als WSeB). Doch nur wenige glückliche OS/2-Anwender (darunter ich) benutzen WSeB auf Ihrem Heim- bzw. Arbeitsplatzsystem. So werden also viele OS/2-Anwender zum ersten mal mit LVM/JFS aufgrund der bald erscheinenden eComStation (eCS) von Serenity Systems in Berührung kommen. Viele der potentiellen eCS-Besitzer haben verständliche Bedenken, was diese neuen Grundsätze angeht - eventuell fürchten einige sich sogar davor. In diesem Artikel möchte ich versuchen, die mit LVM und JFS verbundenen Grundsätze sowie ein wenig der Logik zu erläutern, die sich dahinter verbirgt.

Zu allererst werde ich jetzt endlich diese Begriffe auflösen: LVM steht für Logical Volume Manager und JFS ist ein Journaled File System. Noch nicht unbedingt klarer, nicht wahr? Das kommt noch - hoffe ich.

LVM und JFS stammen nicht von OS/2 ab. Sie wurden für AIX entwickelt, also für das IBM'sche high-end Unix-Derivat, das auf den RS/6000-Maschinen (ebenfalls aus dem Hause IBM) läuft. Für den Anwender bedeutet das, daß die wirklich bösen Fehler bereits seit geraumer Zeit ausgemerzt sind.

LVMs Rolle ist es nun, eine einfache logische Sicht für den darunter liegenden physikalischen Speicherplatz herzustellen. LVM verwaltet individuelle physikalische Laufwerke bzw., um etwas präziser zu sein, die individuellen Partitionen darauf. (Am Ende des Artikels ist ein kleines Glossar für diese Begriffe.) LVM verbirgt Anzahl, Ort und Größe der physikalischen Partitionen vor dem Anwender. Statt dessen verwendet er das Konzept logischer Volumen. Ein logisches Volumen kann einer physikalischen Partition entsprechen (obwohl das eigentlich schon dem Sinn und Zweck des LVM widerspricht) - muß es aber nicht. Ein Volumen kann aus mehreren Partitionen bestehen, die sich auf mehreren physikalischen Laufwerken (Festplatten) befinden. Nicht nur das - diese Volumen können auch erweitert werden (nicht verkleinert - für gewöhnlich möchte man ja mehr Platz haben, nicht weniger). Diese Vergrößerung kann sogar im laufenden Betrieb stattfinden! Natürlich haben nur wenige SOHO-Anwender die Hardware-Ausstattung, die hierfür notwendig ist.

Der erfahrenere Leser wird sich nun wahrscheinlich fragen, wie man ein "traditionelles" Dateisystem wie etwa FAT oder HPFS im laufenden Betrieb vergrößern könnte. Die Antwort ist: Man kann es nicht. Um in den Genuß aller Vorteile des LVM zu kommen, muß man ein Dateisystem verwenden, welches hierfür konzipiert wurde. Dieses Dateisystem ist - wie könnte es anders sein - JFS. JFS gehört nicht zwingend zum LVM; sowohl LVM als auch JFS können jeweils separat voneinander betrieben werden. Ihr volles Potential können die beiden jedoch erst ausschöpfen, wenn sie zusammen betrieben werden.

Aufbau eines JFS-Volumens

JFS ist wie ein traditionelles Unix-Dateisystem organisiert, es stellt eine logische Sicht aus Dateien und Verzeichnissen dar, die aus einer baumähnlichen Struktur aufgebaut wird. Das ist das Konzept, welches von UNIX kommend fast überall woanders Einzug hielt, und welches wir alle kennen. Über IBMs Motive das JFS in WSeB einzugliedern kann ich zwar nur spekulieren, aber dies bietet einige offensichtliche Vorteile im Vergleich zu HPFS und HPFS386 (auch ein paar Nachteile). Zwei entscheidende Vorteile, die ich hier erkenne sind: JFS wird auf einem logischen Volumen aufgesetzt. Um Informationen über Dateien und Verzeichnisse zu pflegen arbeitet es mit folgenden wichtigen internen Strukturen: Der Superblock bildet den Kern von JFS (und vielen anderen Dateisystemen). Er beinhaltet wichtige Information wie die Größe des Dateisystems, Anzahl der enthaltenen Blöcke oder Zustand des Dateisystems (clean, dirty etc.).

Der gesamte Raum des Dateisystems ist in logische Blöcke unterteilt, die Datei- oder Verzeichnisdaten beinhalten. Bei JFS sind die logischen Blöcke zwar grundsätzlich 4096 Bytes groß (4 KB), jedoch können sie optional in kleinere Fragmente (512, 1024 oder 2048 Bytes) unterteilt werden.

Ein i-Node ist eine logische Einheit, die Angaben über eine Datei oder ein Verzeichnis enthält. Das Verhältnis zwischen i-Nodes und Dateien bzw. Verzeichnissen ist 1:1. Ein i-Node enthält Dateityp, Zugriffsberechtigung, Benutzer- und Gruppenkennung (UID/GID - werden bei OS/2 nicht verwendet), Zeitpunkte des Datenzugriffs und verweist auf die eigentlichen logischen Blöcke, in denen der Datei-Inhalt abgelegt ist. Die mit JFS maximal erlaubte Dateigröße beträgt 2TB (HPFS und FAT erlauben hier maximal 2GB). Es muß allerdings darauf hingewiesen werden, daß die Anzahl an i-Nodes fest vorgegeben ist - sie wird bei der Erstellung des Dateisystems (FORMAT) in Abhängigkeit von der Fragmentgröße (die vom Benutzer wählbar ist) berechnet. Theoretisch könnten dem Anwender also die i-Nodes ausgehen und er wäre somit nicht mehr in der Lage, neue Dateien oder Verzeichnisse anzulegen, obwohl noch genügend freier Speicherplatz vorhanden ist. In der Praxis dürfte dieser Fall aber extrem selten auftreten.

Fragmente wurden bereits kurz in Zusammenhang mit logischen Blöcken erwähnt. Die Größe eines logischen Blocks ist bei JFS auf 4KB eingestellt. Das ist zwar ein vernünftiger Vorgabewert, jedoch bedeutet es, daß das Dateisystem nicht weniger als 4K Speicherplatz für eine Datei bereitstellen kann. Wenn im Dateisystem nun eine größere Anzahl an kleinen Dateien (< 2KB) abgelegt wird, macht sich dieser als "Clusterverschnitt" bezeichnete vergeudete Speicherplatz schnell bemerkbar. Dieses Problem kennen und hassen wir alle von FAT (die Clustergröße von 32KB führt zu einer massiven Platzverschwendung, in machen Fällen bis zu 50%). JFS begegnet diesem Problem durch die Möglichkeit der Fragmentierung von logischen Blöcken in kleinere Einheiten von bis zu 512 Bytes (welches der Sektorengröße bei Festplatten entspricht, wodurch es nicht möglich ist, weniger als 512 Bytes pro Zugriff von/zu einer Platte zu übertragen). Jedoch sollten Anwender hier Vorsicht walten lassen, denn der Preis der Fragmentierung ist ein höhere Systemlast und somit eine Verzögerung bei Plattenzugriffen. Ich würde Fragmente von weniger als 4KB Größe nur dann empfehlen, wenn man mit Sicherheit weiß, daß man eine sehr hohe Zahl von kleinen Dateien im Dateisystem speichern will.

Der gesamte Speicherplatz eines JFS-Volumens ist in allocation groups unterteilt (Zuordnungsgruppen, Anm.d.Übers.). Jede Zuordnungsgruppe enthält i-Nodes und Datenblöcke. Dies ermöglicht es dem Dateisystem, den i-Node und die sich dahinter verbergenden Daten physikalisch "nah beieinander" zu speichern (HPFS verwendet eine sehr ähnliche Technik). Die Größe einer allocation group reicht von 8MB bis zu 64MB und hängt von der Anzahl und Größe der enthaltenen Fragmente ab.

Journaling

Wie der Name bereits vermuten läßt, ist das Protokollieren ("Journaling") eine der wichtigsten Eigenschaften dieses Dateisystems. Es sei bemerkt, daß diese Protokollierung eigentlich unabhängig ist von der oben beschriebenen Struktur von JFS. Das Journaling hat seine Wurzeln in Datenbanksystemen und wird eingesetzt, um eine maximale Konsistenz des Dateisystems und dementsprechend eine möglichst kleines Datenverlustrisiko zu erreichen. Diese Eigenschaft ist für Server extrem wichtig, aber auch der Heimanwender haßt es, wenn ihm Daten verlorengehen.

JFS verwendet ein spezielles Protokollierungslaufwerk um sein Journaling durchzuführen. Bei AIX können sich mehrere JFS-Volumen ein Protokollierungslaufwerk teilen. Ich bin mir nicht sicher, ob dies bei OS/2 auch der Fall ist - ich glaube vielmehr, daß hier jedes JFS-Volumen (was also einem Laufwerksbuchstaben entspricht) seine eigene Protokollierung hat, die im JFS-Volumen eingebunden ist, und deren Größe zum Zeitpunkt der Formatierung bestimmt wird.

Wichtig ist, daß JFS nicht alles protokolliert. Es werden nur die Änderungen an Metadaten des Dateisystems festgehalten. Einfach ausgedrückt werden also alle Änderungen im Dateisystem mit Ausnahme der eigentlichen Datei-Inhalte protokolliert, also z.B. Änderungen am Superblock, den i-Nodes, Verzeichnissen und den Strukturen der allocation groups. Selbstverständlich ergibt sich hieraus eine Lasterhöhung und die Leistung leidet darunter, wenn viele synchrone (ungepufferte) Ein-/Ausgabeoperationen stattfinden, oder auch wenn viele Dateien innerhalb kurzer Zeit angelegt bzw. gelöscht werden. In den meisten Fällen sind diese Leistungseinbußen aber nicht spürbar und sind die erhöhte Sicherheit durchaus wert.

Das Protokoll (oder Journal) belegt einen exklusiven Bereich der Platte und wird sofort bei Änderungen an Metadaten aktualisiert. Sobald sich die Platte im Bereitschaftsmodus befindet (keine Plattenaktivität mehr), wird die eigentliche Dateisystemstruktur anhand der Informationen aus dem Protokoll aktualisiert. Alles, was nach einem Absturz getan werden muß um ein vollkommen konsistentes Dateisystem wiederherzustellen beschränkt sich eigentlich darauf, die im Protokoll aufgezeichneten Aktionen zu durchlaufen. Sollte das System zum Zeitpunkt des Absturz oder Stromausfalls gerade einem Schreibvorgang in eine Datei durchgeführt haben, kann diese Datei natürlich inkonsistent werden (die Anwendung kann die Datei nicht mehr benutzen), jedoch werden keine Dateien mehr verlorengehen, was bei vielen anderen Dateisystemen der Fall ist.

Überlegungen zu OS/2

Der obige Teil stellt eine rudimentäre Beschreibung von LVM und JFS dar und trifft sowohl auf AIX als auch OS/2 zu, vielleicht auch noch auf Linux (zumindest, was den JFS-Teil angeht). Nun werde ich beschreiben, wo genau sich LVM/JFS von den Lösungen unterscheiden, die bisher für OS/2 verfügbar waren.
LVM
Aus Sicht des Anwenders ersetzt der LVM den FDISK. Im WSeB ist FDISK nicht mehr vorhanden. Tatsächlich erhalten Sie folgende Meldung wenn sie versuchen FDISK zu starten:

FDISK.COM has been replaced by LVM.EXE and FDISKPM.EXE has been
replaced by LVMGUI.CMD. Please use one of these utilities.

(Anm.d.Übers.:
FDISK.COM wurde ersetzt durch LVM.EXE und FDISKPM.EXE wurde ersetzt durch LVMGUI.CMD. Bitte verwenden Sie eines dieser Dienstprogramme.)

Beachten Sie, daß LVMGUI eine GUI-Anwendung ist (wie der Name vermuten läßt) und Java benötigt, während LVM eine VIO-Anwendung ist und aus einer Befehlzeilenumgebung heraus gestartet werden kann (z.B. beim Booten). Es ähnelt zwar FDISK, jedoch hat es zwei Ansichten - logisch und physikalisch. FDISK machte darin keinen Unterschied. Diese Ansichten entsprechen dem, was in den Grundlagen zu Beginn des Artikels erläutert wurde. Die physikalische Sicht verwendet die physikalischen Platten und ermöglicht dem Anwender die Arbeit mit Partitionen, während in der logischen Ansicht mit Volumen gearbeitet wird. Ein wichtiges Grundelement muß hier noch vorgestellt werden: Das compatibility volume (Kompatibilitätsvolumen, Anm.d.Übers.). Ein solches Kompatibilitätsvolumen entspricht den alten FDISK-Partitionen. Während der WSeB-Installation wandelt das Installationsprogramm automatisch alle vorhandenen Partitionen in Kompatibilitätsvolumen um. Diese Konvertierung bedeutet technisch gesehen, daß das Installationsprogramm einen speziellen Block von LVM-Daten in den Sektor schreibt, der sich hinter der Partitionstabelle befindet. Andere Betriebssysteme als WSeB erkennen keinen Unterschied. Es ist jedoch zwingend erforderlich, daß im Anschluß an diese Konvertierung ausschließlich LVM zur Verwaltung der Partitionen bzw. Volumen eingesetzt wird.

Ich habe mehrere Bildschirmabbildungen von LVM und LVMGUI gemacht, damit sich die Anwender, die LVM noch nicht kennen einen Eindruck davon verschaffen können, was auf sie zukommt. Zunächst hätten wir da die logische Sicht von LVM:

LVM.EXE logische Ansicht




Dann die physikalische Sicht desselben Systems.

LVM.EXE physikalische Ansicht




Und zu guter Letzt ein Blick auf LVMGUI. Es sieht ziemlich cool aus, braucht aber Jahre zum Starten. Persönlich bevorzuge ich die VIO-Version. Übrigens ist Disk 3 ein ZIP-100 und G: ist eine FAT32-Partition.

LVMGUI




Alle FAT-, HPFS-, FAT32-Partitionen usw. können entweder auf LVM- oder Kompatibilitätsvolumen abgelegt werden, jedoch können andere Betriebssysteme nur auf Partitionen zugreifen, die sich auf Kompatibilitätsvolumen befinden. Auf der anderen Seite kann JFS nur auf LVM-Volumen eingesetzt werden. Diese wurden bereits weiter oben beschrieben und genießen alle Vorteile, die durch LVM möglich werden wie z.B. die Verteilung auf mehrere physikalische Platten oder Online-Vergrößerung.

Jedes Volumen, Kompatibilitäts- oder LVM-, repräsentiert einen einzelnen Laufwerksbuchstaben in einem OS/2-System. LVM ist aber erheblich flexibler als FDISK, denn die Laufwerksbuchstaben werden nicht nach einem festen Algorithmus vergeben. Statt dessen kann der Anwender den Volumen beliebige Buchstaben zuordnen. Diese Buchstaben können sogar im laufenden Betrieb geändert werden, jedoch sollte man sich über die Gefahren im Klaren sein, die sich daraus ergeben können. Wenn man beispielsweise den Buchstaben des Bootvolumens ändert, braucht man kein Genie zu sein um sich auszumalen, daß ein Systemabsturz die wahrscheinlichste Folge sein wird.

JFS

OS/2-Anwender fragen häufig, worin die Unterschiede der vielen Dateisysteme liegen, die für OS/2 erhältlich sind. Die folgende Tabelle - fast wörtlich aus dem "WSeB's Quick Beginnings book" entnommen - faßt die Unterschiede der wichtigsten Dateisysteme zusammen, die für WSeB von IBM erhältlich sind.

 
Merkmal Journaled File System (JFS) 386 High Performance File System (386HPFS) High Performance File System (HPFS) FAT File System
Max. Volumengröße 2TB (Terabyte) 64GB (Gigabyte) 64GB (Gigabyte) 2GB (Gigabyte)
Max. Dateigröße 2TB (Terabyte) 2GB (Gigabyte) 2GB (Gigabyte) 2GB (Gigabyte)
Leerzeichen und Punkte im Dateinamen erlaubt Ja Ja Ja Nein (8.3-Format)
Ablage Standardattribute Dateien und Verzeichnisse Im Dateisystem Im Dateisystem Im Dateisystem Im Dateisystem
Ablage erweiterte Attribute (64KB Text oder binäre Werte, Schlüsselbegriffe) Im Dateisystem Im Dateisystem Im Dateisystem In separater Datei
Max. Pfadlänge 260 Zeichen 1) 260 Zeichen 260 Zeichen 64 Zeichen
Bootfähig Nein 2) Ja Ja Ja
Dynamisches Vergrößern des Volumes möglich Ja Nein Nein Nein
Gewinn durch SMP Ja Nein Nein Nein
Unterstützt Local security Nein Ja Nein Nein
Durchschn. vergeudeter Platz pro Datei 256 bis 2048 Bytes 256 Bytes 256 Bytes 1/2 cluster (1 bis 16KB)
Zuordnungsinformation für die Dateien Nahe der Datei im jeweiligen i-Node Nahe der Datei im jeweiligen F-Node Nahe der Datei im jeweiligen F-Node Zentral; in der Nähe des Volumenbeginns
Verzeichnisstruktur Sortierter B-tree Sortierter B-tree Sortierter B-tree, Vollsuche erforderlich Unsortiert linear
Verzeichnisablage Nahe der enthaltenen Dateien Nahe Suchmittelpunkt des Volumens Nahe Suchmittelpunkt des Volumens Für Stammverzeichnis in Nähe Volumenbeginns, alle anderen verstreut
Schreibpuffer (lazy write) Optional Optional Optional Optional
Maximale Cachegröße Vorhandener phys. Speicher Vorhandener phys. Speicher 2MB 14MB
Cacheprogramm Keins (Parameter in CONFIG.SYS) CACHE386.EXE CACHE.EXE Keins (Parameter in CONFIG.SYS)
LAN Server Zugriffssteuerungslisten Im Dateisystem Im Dateisystem In separater Datei (NET.ACC) In separater Datei

1) JFS speichert Datei- und Verzeichnisnamen in Unicode. Dadurch kann JFS grundsätzlich die korrekte Sortierreihenfolge gewährleisten unabhängig von der aktiven Codepage.
2) Dies ist keine grundsätzliche Einschränkung. Es hat nur noch niemand ein Micro- bzw. Mini-IFS für JFS geschrieben.

Es dürfte einige Anwender interessieren, daß JFS scheinbar auch von Hause aus DASD-Limits unterstützt. Ich habe diese Eigenschaft bisher allerdings noch nie verwendet. DASD-Limits, auch bekannt als das "Directory Limits"-Feature im LAN Server ermöglicht es einem Administrator, zu kontrollieren, wieviel Speicherplatz ein Verzeichnis belegen darf - um zum Beispiel den Speicherplatz von Netzwerkanwendern auf dem Server zu beschränken. Dieses Merkmal gab es vorher nur für HPFS386-Volumen. Offensichtlich ist das nicht unbedingt von direktem Nutzen für Heimanwender, die Ihren gesamten Plattenspeicher für sich alleine haben - es könnte aber sehr nützlich sein für Systemadministratoren.

JFS Hilfsprogramme

WSeB beinhaltet einige neue JFS-spezifische Hilfsprogramme, über die altbekannten hinaus wie CHKDSK und FORMAT. Ich gebe hier nur eine kurze Übersicht darüber, die wichtigsten sind auch in der Befehlsübersicht dokumentiert. Zusätzlich zu den oben genannten und in WSeB enthaltenen Dienstprogrammen habe ich es auch geschafft, einige weitere Dienstprogramme aus den OpenJFS Quellcodes zu erzeugen - dank der unschätzbaren Hilfe einiger Freunde. Sie sind soweit ich weiß in ausführbarer Form nicht frei verfügbar, jedoch könnte ich Sie interessierten Lesern mailen - aber Vorsicht; sie sind nur für Experten bestimmt, und eine einwandfreie Funktion kann nicht gewährleistet werden.

Schlußfolgerung

Ich habe absichtlich einige fortgeschrittene und seltener verwendete LVM/JFS-Themen ausgelassen. Der interessierte Leser kann jedoch mehr dazu in den Büchern und Dateien finden, die ich im Abschnitt Referenzmaterial angegeben habe. Ich hoffe, Eigenschaften und Nutzen von LVM und JFS klar und verständlich dargestellt zu haben. Ich denke, daß diese beiden Produkte einen neuen Grad an Flexibilität, Verwaltbarkeit und Zuverlässigkeit in WSeB gebracht haben bzw. bringen werden und in Kürze auch allen eCS Anwendern. Fürchtet Euch nicht!

Ein letztes Wort: Alles, was hier über WSeB gesagt wurde, trifft genauso auf eCS zu.


Glossar:


[Artikelübersicht]
editor@os2voice.org
[Vorherige Seite] [Inhalt] [Nächste Seite]
VOICE Homepage: http://www.os2voice.org