4 BFS - Das BeOS File System

4.1 Klassifizierung

Wie bei BeOS allgemein üblich arbeitet auch die Dateisystem-Verwaltung, der Storage-Server, mit mehreren Threads, die auf die verschiedenen Prozessoren zugewiesen werden können. Deshalb spricht man beim BeOS-File-System von einem multithreaded Dateisystem.

Das BeOS-Dateisystem ist ausserdem ein echtes 64-Bit-Dateisystem. Die Zahl 64 bezieht sich dabei sowohl auf die Anzahl der verwaltbaren Blöcke pro Datenträger, als auch auf die Grösse der Dateien. Dadurch ist es möglich, Festplatten und Dateien mit einer Grösse von bis zu 264 Bytes zu verwalten. Das entspricht etwa 1.8*1019 Bytes (= 18'000'000 Terabytes = 18'000 Petabytes = 18 Exabytes)! Das BeOS ist somit bestens ausgestattet, um riesige Datenmengen, wie sie beispielsweise bei der Video- oder Audio-Bearbeitung anfallen, zu verwalten. Andere PC-Dateisysteme mit ihren maximal 4 GBytes grossen Partitionen bzw. Dateien sehen im Vergleich dazu wie Kinderspielzeuge aus.

Der Vorteil eines 64-Bit-Dateisystems besteht aber nicht nur in der Möglichkeit, grössere Festplatten bzw. Dateien zu verwalten, sondern es vereinfacht auch die Programmierung. Um auf anderen PC-Dateisystemen z.B. Partitionen mit mehr als 4 GBytes verwalten zu können, sind zum Teil umständliche "Tricks" und Zusatzbehandlungen im Programm-Code erforderlich, die für die Applikationsprogrammierer zusätzliche Arbeit bedeuten. Das Dateisystem von BeOS erlaubt es hingegen, den gesamten Datenträger mit einer einzigen 64 Bit breiten Adresse anzusprechen. Diese vereinfachte Adressierung beschleunigt den Zugriff.

4.2 Journaling

Das BeOS-File-System verwendet das sogenannte Journaling. Dabei merkt sich das BFS alle änderungen, die auf den Datenträgern vorgenommen werden. Dateiinhalte werden jedoch nicht protokolliert. D.h. BeOS kann mit Hilfe des Journaling zwar keine Daten wieder hervorbringen, die aufgrund eines Stromausfalls oder eines Hardware-Fehlers nicht abgespeichert wurden, doch ist es in der Lage, das Dateisystem wieder in einen konsistenten Zustand zu bringen, da es anhand der Journaling-Log-Datei erkennen kann, welche änderungen erfolgreich abgeschlossen werden konnten und welche nicht. Das Log-Playback dauert in der Regel höchstens 30s (unabhängig von der Festplattengrösse) und wird bei Bedarf automatisch während des Boot-Vorgangs durchgeführt.

4.3 Erweiterte Dateiattribute

Die wohl grösste Innovation des BFS liegt in den Dateiattributen. Diese bestehen beim BeOS-Dateisystem jeweils aus einem Name-Wert-Paar wie z.B. Comment = "This is cool!". In diesem Beispiel ist Comment der Name des Attributs und "This is cool!" sein Wert, der in diesem Fall vom Typ String ist.

Bei gängigen Betriebssystemen ist die Anzahl und die Art der unterstützten Attribute für Dateien beschränkt. Nicht so bei BeOS. Das BFS erlaubt es, nahezu beliebig viele Dateiattribute zu definieren (tatsächlich liegt die Grenze nach Aussagen des BFS-Entwicklers, Dominic Giampaolo, aufgrund eines Bugs noch bei ungefähr 3 Millionen). Eine Applikation kann nach eigenem Bedarf neue Attribute zu einer Datei hinzufügen oder ihre Werte ändern. Ein Programm kann auf diese Weise seine Fensterposition beim Beenden, die eingestellten Farben oder andere Werte mit Hilfe von Attributen abspeichern und muss so die Konfigurationsdatei nicht selbst strukturieren.

Die Attributtypen sind dabei ebenfalls frei wählbar. So kann ein einfacher Attributwert z.B. aus einem einzelnen Buchstaben, einem Integer oder einem maximal 255 Zeichen langen String bestehen. Er kann aber auch ein komplexes Objekt wie beispielsweise eine JPEG-Datei darstellen. Dadurch verwischt die Grenze zwischen den eigentlichen Nutzdaten und den Dateiattributen, wie sie bei anderen Dateisystemen anzutreffen ist.

4.4 Integrierte Datenbank-Fähigkeiten

Die eigentliche Neuerung im Zusammenhang mit den Dateiattributen besteht aber darin, wie Dateien mit Hilfe ihrer Attribute gesucht werden können, denn das BFS ist nicht nur ein Dateisystem, sondern hat viel mit einem einfachen Datenbank-System gemein. So ist es nicht nur möglich, Dateien nach ihrem Namen suchen zu lassen, sondern wie in einer relationalen Datenbank auch nach mehreren Attributen, die durch logische Verknüfpungen kombiniert werden können. Abfragen von der Art "Suche alle E-Mails von Mike zum Thema BeOS, die er zwischen dem 1. Januar 1998 und dem 31. Mai 1998 geschrieben hat, die noch nicht gelesen wurden und keine Attachments enthalten." oder "Suche alle CD-Audio-Tracks, die das Wort 'Whiskey' im Titel haben und mindestens 2 Minuten lang sind." kein Problem mehr.

Abfrageergebnisse werden automatisch für die spätere Weiterverwendung abgespeichert und können auch einem Icon auf dem Desktop zugeordnet werden. Ein Doppelklick auf das Icon listet dann z.B. alle ungelesenen E-Mails oder CD-Audio-Tracks mit einer Minimallänge von 2 Minuten auf. Auf Wunsch kann eine Suchanfrage auch nachträgliche änderungen überwachen und ihr Ergebnis gegebenenfalls automatisch aktualisieren (Live Queries). Um bestimmte Abfragen zu beschleunigen, können zudem Indexe für einfache Attribute wie Integers oder Strings (maximal 256 Zeichen lang) angelegt werden (in der Shell mittels dem Befehl mkindex).

Durch die Integration erweiterter Dateiattribute und Abfragemöglichkeiten in das Betriebssystem wird Applikationsprogrammierern eine Menge Arbeit abgenommen, da sie die Strukturierung der persistenten Daten nicht mehr selbst implementieren müssen, was auch der Stabilität und dem Code-Umfang von Applikationen zugutekommt. Programme müssen zudem nicht umgeschrieben werden, wenn andere Programme bestimmte Dateien um zusätzliche Attribute erweitern, denn Applikationen greifen durch die Adressierung über den Attributnamen nur auf solche Attribute zu, die ihnen bekannt sind. Alle anderen Attribute ignorieren sie automatisch.

4.5 Unterstützung von Fremddateisystemen

BeOS unterstützt neben dem eigenen Dateisystem BFS auch einige Fremdformate. Vollständig unterstützt werden HFS (MacOS) und das ISO 9660 (CD-ROM-Format). Andere Formate wie FAT16 (DOS, Windows 3.x), FAT32 (Windows 95b, Windows 98), NTFS (Windows NT) und NFS (Network File System) können vorerst nur gelesen werden bzw. sind noch in Bearbeitung. Die Fremdformat-Unterstützung ist modular und kann daher durch entsprechende Treiber (Plug-Ins) ausgebaut werden. Diese werden dabei erst geladen, wenn sie auch wirklich benötigt werden, und verbrauchen so nicht unnötig Arbeitsspeicher. Besondere BFS-Features wie Dateinamen mit einer Maximallänge von 256 Zeichen oder die erweiterten Dateiattribute können bei solchen "gemounteten" Fremdformaten jedoch nicht immer genutzt werden. Es gelten dann die Einschränkungen des jeweiligen Fremdsystems, z.B. max. 31 Zeichen lange Dateinamen unter HFS.

Ein Plug-In-Entwickler für ein Fremdformat muss lediglich 20 obligatorische Funktionen implementieren, um z.B. Verzeichnisse durchwandern, Namen suchen, Daten lesen/schreiben und Attribute ändern zu können. 55 Funktionen sind maximal möglich, wobei aber nicht einmal für BFS alle 55 implementiert sind.

Ein Fremddateisystem muss folgende Bedingungen erfüllen, damit es in BeOS eingebunden werden kann:

Wenn eine Bedingung vom Fremdsystem selbst nicht erfüllt wird, muss das Plug-In entsprechende Konvertierungsmassnahmen ergreifen, damit das Fremdsystem BeOS gegenüber als kompatibel erscheint.

4.6 MIME-Identifikation

Neben der Verwaltung der erweiterten Dateiattribute und Indizes verliehen die BeOS-Entwickler dem Dateisystem auch die Fähigkeit, Dateitypen gemäss dem aus dem Internet bekannten MIME-Standard automatisch zu identifizieren. Diese Identifikation beruht auf der Dateierweiterung (.html, .gif, .jpg, etc.). Wenn das Betriebssystem eine Datei nicht automatisch einer Applikation zuordnen kann, bietet es dem Benutzer mittels eines Programms die Möglichkeit, den Dateityp von Hand einer Applikation zuzuordnen. Die Zuordnung ist jedoch nicht auf Dateitypen beschränkt, sondern es ist auch möglich, Dateien einzeln oder auf Verzeichnisebene einer Applikation zuzuordnen. D.h. nicht jede HTML-Datei muss unbedingt dem Internet-Browser zugewiesen sein. Die automatische Identifikation mit Hilfe des MIME-Standards ist vor allem für Dateien nützlich, die von einer externen Quelle wie z.B. dem Internet bezogen wurden, denn Dateien, die mit einer Applikation unter BeOS selbst erstellt werden, sind standardmässig dieser Applikation zugewiesen (wie beim Macintosh).

4.7 Datenträger-Fragmentierung

Das BeOS-Dateisystem verwaltet Festplatten in Blöcken mit einer variablen Grösse, die bei der Installation vom Benutzer ausgewählt werden kann. Zur Auswahl stehen 1 KByte, 2 KByte und 4 KByte grosse Blöcke. Jede Datei belegt mindestens einen Block. Die interne Fragmentierung einer nur 1 Byte grossen Datei beträgt somit lediglich 1023 Bytes bei einer Blockgrösse von 1 KByte. Um die externe Fragmentierung möglichst gering zu halten, werden die Festplatten vom BFS intern in verschiedene Bereiche aufgeteilt. Ein Bereich ist dabei für die kleinen Dateien reserviert. Diese Aufteilung soll verhindern, dass grosse Dateien (z.B. Videos) zu stark fragmentiert werden, und die Datenübertragungsrate beim Lesen wegen ständiger Lesekopfbewegungen zu stark absinkt.

4.8 Verzeichnisstruktur

Die Verzeichnisstruktur des BFS ist im Prinzip dieselbe wie bei Unix. Es werden auf dieselbe Weise Dateien, Verzeichnisse und symbolische Links als Einträge unterstützt (Hard Links werden noch nicht unterstützt). Im Hauptverzeichnis sind allerdings nur Verzeichnisse und symbolische Links zugelassen. Das Hauptverzeichnis wird mittels eines speziellen virtuellen Dateisystems, dem Root-File-System, vom BeOS-Kernel direkt verwaltet, da zu Beginn des Bootvorgangs noch kein Dateisystem-Plug-In geladen ist.

Beim Boot-Vorgang erstellt BeOS im Hauptverzeichnis für jedes gefundene Laufwerk, für das ein Dateisystem-Plug-In existiert, ein eigenes Verzeichnis, z.B. /Floppy für das Diskettenlaufwerk (der Name "Floppy" kann variieren). Diese Verzeichnisse sind die Verknüpfungen, über welche auf die Datenträger zugegriffen werden kann. Das Verzeichnis /boot ist ein Spezialfall, denn es stellt die Verknüpfung zum Dateisystem dar, von dem gebootet wird. Ausserdem werden zwei weitere virtuelle Dateisysteme, die mit /dev und /pipe verknüpft werden, und einige symbolische Links erzeugt: /bin, /etc, /system, /tmp, /var und ein Link auf /boot (in diesem Beispiel mit "BootDisk" bezeichnet). Nach dem Booten sieht das Hauptverzeichnis in etwa so aus:

l---------  1 baron studi     0  Jan 15 12:36  bin -> /boot/beos/bin
drwx------  1 baron studi  2048  Nov 24 18:54  boot/
drwxr-x---  1 baron studi     0  Jan 15 12:36  dev/
l---------  1 baron studi     0  Jan 15 12:36  etc -> /boot/beos/etc
drwxr-xr-x  1 baron studi  2048  Jan 15 12:37  Floppy
l---------  1 baron studi     0  Jan 15 12:36  BootDisk -> /boot
drwxrwxrwx  1 baron studi     0  Jan 15 12:36  pipe/
l---------  1 baron studi     0  Jan 15 12:36  system -> /boot/beos/system
l---------  1 baron studi     0  Jan 15 12:36  tmp -> /boot/var/tmp
l---------  1 baron studi     0  Jan 15 12:36  var -> /boot/var

4.9 Aufbau der Verzeichniseinträge

Das BeOS-Dateisystem ist mit demjenigen von Unix praktisch identisch. Wer sich mit Unix-Systemen auskennt, findet sich auch im BeOS-Dateisystem zurecht. Die Verzeichniseinträge des BFS sehen gleich aus wie bei Unix:

1	2	3	4	5	6	7	8	
d 	r w x r w x r - -	1	baron	users	2048	Jan 16 12:54	Floppy	
  1. Typ des Eintrags: - = Datei, d = Verzeichnis, l = symbolischer Link
  2. Lese-, Schreib- und Ausführungsrechte des Besitzers, der Gruppe und der restlichen Benutzer (r = Leserecht, w = Schreibrecht, x = Ausführungsrecht bei Datei bzw. Zugriffsrecht bei Verzeichnis)
  3. Anzahl der Links auf Eintrag
  4. Besitzer des Eintrags (in obigem Beispiel "baron", d.h. der Super-User)
  5. Name der Gruppe, in der sich der Besitzer befindet
  6. Grösse in Bytes
  7. Datum der letzten änderung
  8. Name der Datei, des Verzeichnisses oder des Links

4.10 Virtuelle Dateisysteme

BeOS unterstützt auch virtuelle Dateisysteme. Dabei handelt es sich um Dateisysteme, die nur im Arbeitsspeicher existieren, sodass all ihre Daten verlorengehen, wenn BeOS beendet wird. Die derzeit von BeOS verwendeten virtuellen Dateisysteme sind das Root-Dateisystem (rootfs), das Device-Dateisystem (devfs) und das Pipe-Dateisystem (pipefs). Das rootfs wird für die Verwaltung des Hauptverzeichnisses "/" verwendet (siehe Kapitel 3.8), das devfs für den Zugriff auf Geräte wie z.B. das Disketten- oder das CD-ROM-Laufwerk und das pipefs für das Lesen und Schreiben von Daten via Pipes.