# Amiga Old File System

Das Amiga Old File System (kurz OFS) war bei Markteinführung des ersten Amiga 1000 am 23. Juli 1985 das Standard-Dateisystem für AmigaOS. Zunächst hatte es keinen spezifischen Namen erhalten und war nur als „DOS“ oder AmigaDOS bekannt.
OFS verwendete zum Speichern 512-Byte-Blöcke, reservierte jedoch die ersten 24 Bytes jedes Blocks für Metadaten, sodass sich die tatsächliche Datenblockkapazität auf 488 Bytes pro Block reduzierte. OFS war primär für den Einsatz mit Disketten entwickelt worden. Durch eine hohe Redundanz erwies es sich zwar als relativ datensicher, war aber für die damals aufkommenden Nutzung von Festplatten zu langsam, weswegen es durch FFS ersetzt wurde.

## Geschichte

Ursprünglich als Amiga File System bekannt stammt es dem Dateisystem von TRIPOS ab, was die Grundlage der ersten Versionen von AmigaDOS bildete. Den Namen „Amiga Old File System“ oder auch „Amiga Original File System“ erhielt es erst, als Commodore 1988 das Amiga Fast File System (kurz FFS) in AmigaOS 1.3 vorstellte.
OFS ist sehr gut, um das Dateisystem im Falle eines Problems zu reparieren. Der eigens dafür mitgelieferte DiskDoctor (übersetzt Disketten-Doktor) erhielt jedoch schnell den Namen DiskDestroyer (übersetzt Disketten-Zerstörer), da er keine Autostart-Disketten vom Typ No-DOS reparieren konnte, die von Drittherstellern als bootfähige Disketten für Spiele genutzt wurden. Die Idee, Autostart-Disketten außerhalb des Systemstandards zu erstellen, wurde aus dem Versuch heraus geboren, um zum einen das Kopieren der Disketten zu verhindern sowie zum anderen das Laden und Starten von AmigaDOS zu vermeiden, um direkt auf die Grafik-, Audio- und Speicherchipsätze des Amigas zugreifen zu können. DiskDoctor ersetzte jedoch diese sogenannten „Lazarus“ Bootblöcke durch Standard-AmigaDOS-Bootblöcke, wodurch diese unbrauchbar wurde.
Die meisten Disketten, die von Software-Firmen oder als Magazin-Coverdisks ausgeliefert wurden, verwendeten OFS, damit sie auf allen Amiga booten konnten.

## Eigenschaften von AmigaDOS-Disketten

Der Amiga verwendet beim Umgang mit Disketten standardmäßig eine MFM-Kodierung/Dekodierung. Auf einer Amiga-Diskette gibt es 80 Zylinder. Jeder Zylinder hat 2 MFM-Spuren, jeweils eine auf jeder Seite der Diskette. Double-Density-Disketten (DD) haben 11 Sektoren pro MFM-Spur, High-Density-Disketten (HD) haben 22 Sektoren.
Die Geometrie einer Amiga-Diskette ist wie folgt:
* DD-Disketten: 512 Bytes/Sektor, 11 Sektoren/Spur, 2 Spuren/Zylinder, 80 Zylinder/Diskette
* HD-Disketten: 512 Bytes/Sektor, 22 Sektoren/Spur, 2 Spuren/Zylinder, 80 Zylinder/Diskette
Eine DD-Diskette hat 11 * 2 * 80 = 1760 (0 bis 1759) Blöcke und eine HD-Diskette 22 * 2 * 80 = 3520 Blöcke. Der Amiga konnte somit 880 KiB auf einer DD-Diskette und 1760 KiB auf einer HD-Diskette speichern. Da OFS im Gegensatz zum FAT-Dateisystem speziell für die Verwendung von Disketten unter AmigaOS entwickelt wurde, verfügte es über eine effektivere Speicherung und Verwaltung von Daten auf Disketten, weshalb auf physisch identischen Disketten unter AmigaOS 20 Prozent mehr Daten gespeichert werden konnten als auf Computern mit FAT-formatierten Disketten (DD 720 KiB/HD 1440 KiB).

## Eigenschaften von Dateien unter AmigaDOS

Vor AmigaOS 3.5 hatten AmigaDOS-Dateizugriffe einen 32-Bit breiten Offset-Parameter (ohne Vorzeichen), der angab, wo die nächste Lese- oder Schreiboperation beginnen sollte. Die größte Größe für eine einzelne Amiga-Datei unter diesen Betriebssystemen beträgt daher 2$^{32}$ = 4 GiB. Nach Amiga OS 3.5 können Datei-Handles auf 2$^{64}$ = 16 EiB Dateien verweisen.
OFS-formatierte Disketten behalten jedoch weiterhin die 32-Bit-Beschränkungen bei, da dies eine intrinsische Beschränkung des Formats ist, wie es auf den Medien aufgezeichnet ist. Ein OFS-Datenblock speichert die Blockgröße BSIZE in 24 Bytes (d. h. normalerweise 488 Bytes bei der am häufigsten verwendeten BSIZE von 512 Bytes). Der Rootblock befindet sich in der physikalischen Mitte des Mediums: Blocknummer 880 für DD-Disketten, Block 1760 für HDs. Dies dient dem Minimieren der Suchzeiten.
Die genaue Berechnung, wo er gespeichert wird, lautet wie folgt:
Der Rootblock enthält Informationen über den Datenträger: seinen Namen, das Formatierungsdatum usw. Er enthält auch Informationen über den Zugriff auf die Dateien/Verzeichnisse/Links, die sich im obersten (Root-)Verzeichnis befinden.
Die Zeichen '/' und ':' sind in Datei- und Datenträgernamen verboten, aber *!@#$%|^+&_=\-';",<>.? und Buchstaben mit diakritischen Zeichen wie âè sind erlaubt.
Die Datumsfelder im Root-Block (und anderen Blöcken) sind in Form von DAYS, MINS und TICKS aufgebaut. Das Feld DAYS enthält die Anzahl der Tage seit dem 1. Januar. 1978. MINS ist die Anzahl der Minuten, die seit Mitternacht vergangen sind, und TICKS wird in 1/50s einer Sekunde angegeben. Ein Tageswert von Null wird von den meisten Programmen als illegal angesehen. Da der DAYS-Wert als 32-Bit-Zahl gespeichert wird, hat das Amiga-Dateisystem kein inhärentes Jahr-2000-Problem oder Jahr-2038-Problem.
Um eine Datei, ein Verzeichnis oder einen Link zu erreichen, verwendet AmigaDOS eine Hash-Funktion, um zu berechnen, welches 32-Bit-Wort im Festplattenblock als Zeiger auf eine Hash-Bucket-Liste zu verwenden ist, die wiederum den Datei-, Verzeichnis- oder Link-Datensatz enthält. Eine Bucket-Liste wird verwendet, um Dateisystem-Objekte mit Namen zu unterstützen, die auf denselben Offset hashen. Zum Beispiel: file_1a, file_24 und file_5u haben den gleichen Hash-Wert.
Dateinamen können in Klein- und Großbuchstaben geschrieben werden, jedoch wird beim Zugriff nicht zwischen Groß- und Kleinschreibung unterschieden. Das heißt, dass "MeineDatei" und "meinedatei" im selben Verzeichnis auf dieselbe Datei verweisen.
Dateien bestehen aus einem Datei-Header-Block, der Informationen über die Datei enthält (Größe, letzte Zugriffszeit, Datenblockzeiger usw.), und den Datenblöcken, die die eigentlichen Daten enthalten. Der Dateikopfblock enthält bis zu BSIZE 4-56 Datenblockzeiger (was bei den üblichen 512-Byte-Blöcken 72 Einträgen entspricht). Ist eine Datei größer als das, werden Dateierweiterungsblöcke zugewiesen, um die Datenblockzeiger aufzunehmen. Die Dateierweiterungsblöcke sind in einer verknüpften Liste organisiert, die im Dateikopfblock (Feld "Erweiterung") beginnt.