# Andrew File System

AFS im OSI-Schichtenmodell :
| Anwendung | AFS-Dateiservice | AFS-Volserver | VLDB | PTDB | BDB |
| UBIK |||
| Sitzung | Rx | Rx | Rx | Rx | Rx |
| Transport | UDP | UDP | UDP | UDP | UDP |
| Netzwerk | IP | IP | IP | IP | IP |
| Netzzugang | Ethernet | Ethernet | Token Ring | FDDI | … |
Das Andrew File System (AFS) ist ein Netzwerkprotokoll für verteilte Netzwerkdateisysteme. Es ermöglicht die horizontale Skalierbarkeit von Sekundärspeichern und integriert client-seitiges Caching. Klassischen Netzwerkdateisystemen wie NFS hat es voraus, dass Sekundärspeicher-Erweiterungen und Servertausche aus Nutzersicht vollkommen transparent möglich sind. Dies wird durch eine zusätzliche Abstraktionsebene zwischen dem Dateinamensraum und den Datenobjekten des AFS realisiert.

## Konzept

Das AFS-Protokoll umfasst neben Filesharing auch zwangsweise Protokolle und Datenbanken zur Namensauflösung von Nutzern und Gruppen. Die Verwendung der betriebssystemeigenen Nutzer- und Gruppennamensräume ist weder auf AFS-Client- noch auf der Serverseite vorgesehen. In der Regel synchronisiert ein Administrator die AFS-Nutzer und Gruppen gegen ein zentrales Verzeichnis. DieAuthentifizierung erfolgt mittels aus Kerberos-Tickets abgeleiteten Tokens.
Die verschiedenen für AFS nötigen Funktionen (Client, Dateiserver, Datenbankserver) laufen arbeitsteilig in separaten Prozessen, i. d. R. auf separaten Maschinen.
Ein lokaler Cache auf AFS-Clients samt garantierter Integrität sorgt für eine Lastreduktion auf Dateiservern und eine Latenzreduktion bei den Clients. AFS ist für den LAN- und WAN-Betrieb geeignet. Eine netzweite Cache-Konsistenz-Garantie ist in das Protokoll integriert. Die Authentifikation geschieht in diesem Fall serverseitig. Des Weiteren ist der AFS-Dateinamensraum auf Client-Seite „mehrnutzertauglich“. Dies bedeutet, dass alle Nutzer (wie bei NFS) dieselben Pfade verwenden können und serverseitig mit den korrekten Rechten agieren. Zugriffsrechte werden per ACLs nur pro Verzeichnis definiert. AFS ermöglicht mit wenig Aufwand, auf allen Clients einer Zelle einen zentral administrierten, einheitlichen Dateinamensraum aufzubauen. AFS-Server arbeiten üblicherweise unter Linux, Solaris oder AIX, jedoch werden weitere Unix-Varianten als Serverplattform unterstützt. Alle aktuell verfügbaren AFS-Server-Prozesse arbeiten im Userspace.
Es existieren verschiedene Programme, die AFS als Protokoll umsetzen. AFS-Clients sind für eine Vielzahl von Betriebssystemen verfügbar – i. d. R. lizenzkostenfrei. Leistungsfähige AFS-Server sind lizenzkostenfrei für Linux und andere Unix-Betriebssysteme verfügbar. AFS-Server mit speziellen Funktionen sind kommerziell verfügbar.
Das AFS beherrscht manuell auszulösende Datenreplikation. Es ist im AFS unwirtschaftlich, Daten häufig (z. B. einmal pro Minute) zu replizieren.

## Struktur des AFS

Unabhängige Verwaltungseinheiten im AFS heißen Zellen. Eine Zelle umfasst einen oder mehrere Datenbankserver und einen oder mehrere Dateiserver. AFS-Clients sind lose einer „Heimatzelle“ zugeordnet – nicht jedoch (wie z. B. bei einer Windows-Domainmitgliedschaft) per Shared-Secret mit ihr verbunden. Auf Dateiservern befinden sich Datenpartitionen, die Instanzen von Volumes enthalten. Volume-Instanzen können symbolische Verknüpfungen auf andere Volumeinstanzen (auch in anderen AFS-Zellen) enthalten. Diese „Volume-Mountpoints“ sind die Übergangspunkt zwischen Volumes im Dateinamensraum. Ein Volume (üblicherweise root.afs) wird vom AFS-Client an eine definierte Stelle (/afs unter Unix) im Dateisystem eingehängt und bildet die Wurzel dieses AFS-Namensraumes, wobei jedoch durch die symbolischen Verknüpfungen auch Zyklen in der Verzeichnisstruktur möglich sind.

### Zellen

Weltweit existieren zahlreiche AFS-Zellen – vor allem in größeren Einrichtungen wie Universitäten. Zellen werden unabhängig voneinander verwaltet und können auch öffentlich sein. Dabei zeichnen sich Öffentliche Zellen durch folgende Eigenschaften aus:
* Alle AFS-Datenbankserver und AFS-Dateiserver besitzen öffentliche IP-Adressen
* Die Datenbankserver der Zelle müssen öffentlich bekannt gemacht worden sein (entweder durch Eintrag in eine spezielle Datei auf OpenAFS oder durch Veröffentlichung im DNS).
Die Zellen können sich auch gegenseitig das Vertrauen aussprechen, wodurch Benutzer einer Zelle in ACLs von AFS-Verzeichnissen Rechte erhalten können. Dieses Vertrauen wird durch entsprechende Kerberos-Mechanismen realisiert.

### Volumes

Der Begriff Volume steht im Rahmen von AFS für zwei Dinge:
* Einen Eintrag in der VLDB (Volume Database), der auf verschiedene Instanzen eines Volumes auf einem oder mehreren Dateiservern derselben AFS-Zelle zeigt.
* Ein Objekt auf einem Dateiserver, das Verzeichnisse, Dateien und Verweise zu anderen Volumes enthält. In diesem Artikel wird für ein solches Objekt zur besseren Unterscheidung der Begriff Volumeinstanz bzw. Instanz benutzt.
Volumes und Volumeinstanzen werden ausschließlich vom Administrator verwaltet. Sie besitzen eine änderbare Maximalgröße, welche ähnlich einer Quota benutzt wird und ausschließlich für das Volume und nicht für einzelne Benutzer gilt. Es existieren vier Arten von Volumeinstanzen:

#### RW-Instanzen

    Instanzen, auf die man lesend und schreibend zugreifen kann – z. B. Home-Verzeichnisse von Benutzern. Eine solche Instanz existiert i. d. R. für jedes Volume. Andere Instanztypen sind fakultativ.

#### RO-Instanzen

    Manuelle erstellte Kopien von RW-Instanzen, welche lediglich lesbar sind. Von jeder RW-Instanz können mehrere RO-Instanzen angelegt und auf verschiedenen Dateiservern verteilt werden. Solche Instanzen werden für Daten benutzt, die nur selten verändert werden – z. B. Softwareverzeichnisse oder strukturelle Verzeichnisse, in denen dann z. B. die Benutzer-Home-Verzeichnisse liegen. AFS-Clients suchen sich per VLDB selbstständig eine funktionierende RO-Instanz. Die Existenz mehrerer RO-Instanzen macht die Daten eines Volumes redundant. AFS-Clients machen diese Redundanz für Nutzer transparent. Der Administrator kann manuell veranlassen, dass der aktuelle Zustand der entsprechenden RW-Instanz in alle RO-Instanzen desselben Volumes repliziert wird.

#### Backup-Instanzen

    Dieser Instanz-Typ befindet sich immer auf derselben Datenpartition wie die zugeordnete RW-Instanz – die Speicherung erfolgt differentiell zur RW-Instanz (Copy-On-Write), weshalb eine solche Instanz kein physisches Backup ersetzen kann.

#### Temporäre Clones

    Solche Instanzen werden angelegt, um z. B. Volumes zwischen Dateiservern zu verschieben. Würden temporäre Clones nicht benutzt, müssten Schreibzugriffe auf die RW-Instanz im Namen der Datenintegrität verhindert werden, solange der entsprechende Vorgang läuft. Diese Instanzen werden vom AFS ausschließlich intern verwendet.
Für alle Volumeinstanzen wird jeweils eine Statistik von einem Dateiserver geführt, in der Zugriffe unterteilt nach lesend / schreibend, lokales Netz / anderes Netz und einigen anderen Kriterien erfasst werden. OpenAFS-Dateiserver besitzen zusätzlich einen Modus, damit umfangreiche Protokollierungsinformationen über Zugriffe auf Instanzen ausgegeben werden können – wahlweise direkt an andere Programme (per Pipe).

### Dateiserver

AFS-Dateiserver enthalten eine oder mehrere Datenpartitionen, die wiederum Volume-Instanzen beinhalten. Das AFS-Netzwerkprotokoll kümmert sich prinzipiell nicht darum, in welchem Format die Volumes auf den Datenpartitionen lagern. Allen AFS-Implementierungen ist jedoch gemein, dass man die Dateistruktur des AFS-Namensraumes nicht wiedererkennt, wenn man sich eine Partition auf dem Dateiserver ansieht.
Es ist deshalb auch nicht möglich, die Datenpartitionen mittels eines anderen Filesharing-Protokolls zusätzlich freizugeben.
RW-Instanzen lassen sich im laufenden Produktivbetrieb zwischen Servern verschieben – der Lese- und Schreibzugriff auf die Daten der Instanz ist weiterhin möglich. Dadurch ist die Wartung von Dateiservern möglich, ohne Zugriff auf dort gelagerte Daten zu verlieren.
Bei der heutzutage am meisten benutzten AFS-Implementierung (OpenAFS) besteht der Dateiserver aus mehreren Prozessen (die teilweise aus mehreren Threads bestehen):
* Dateiserver – dieser bedient die Anfragen von AFS-Clients nach Dateien im AFS-Namensraum.
* Solserver – dieser Serverprozess wird hauptsächlich von Administratoren benutzt. Er stellt Funktionen bereit, die jeweils ganze Volume-Instanzen betreffen (z. B. Volume klonen, Volume an- oder abschalten, Volume durchs Netzwerk schicken, …)
* Salvager – Der Salvager testet und repariert die AFS-eigenen Verwaltungsstrukturen auf den Wirtspartitionen eines Dateiservers. Das ist z. B. nach einem Crash nötig und geschieht in diesem Fall automatisch, um den Erhalt der gespeicherten Daten sicherzustellen.
Da AFS nur ein Protokoll ist, kann sich hinter einem Dateiserver jedoch auch z. B. ein Bandroboter verbergen, der AFS-Dateien auf tertiären Speichermedien ablegt (z. B. MR-AFS).
Dateiserver können mehrere IP-Adressen haben. Beim Ausfall eines Datenserver-Netzwerkinterfaces wechseln AFS-Clients automatisch auf ein anderes. Clients testen aus diesem Grund regelmäßig die Erreichbarkeit aller Dateiserver-Netzwerkinterfaces, mit denen sie in Kontakt stehen.

### Datenbankserver

Die Datenbankserver sind untereinander vernetzt und verwalten zwei oder mehr Datenbanken. Obligatorisch sind dabei:
* PTDB (Protection DataBase) – verwaltet Benutzer der Zelle und Benutzergruppen. Eine besondere Eigenschaft ist, dass Benutzer in einem gewissen Rahmen selbst Gruppen anlegen, bearbeiten und in ACLs des AFS benutzen können. Achtung: Diese Datenbank ist kein Verzeichnisdienst für Benutzerdaten wie Home-Verzeichnisse, E-Mail-Adressen oder Passwörter.
* VLDB (Volume DataBase) – führt Buch über Volumes (siehe weiter unten im Artikel) auf Dateiservern. Außerdem speichert sie von jedem Dateiserver die Liste der zugeordneten IP-Adressen.
Folgende Datenbanken sind außerdem noch gängig:
* BDB (Backup DataBase) – verwaltet Bänder, die von speziellen AFS-Serverprozessen im Rahmen von Backups mit Daten beschrieben wurden.
* KDB (Kerberos DataBase) – diese Datenbank verwaltet Benutzerpasswörter (eigentlich Kerberos-Schlüssel). Das zwischen AFS-Client und KDB-Server benutzte Protokoll ist jedoch ein Vorläufer des bereits überholten Protokolls Kerberos v4. Neu errichtete Zellen verwenden heute üblicherweise einen auf Kerberos v5 basierenden Server, der unabhängig von den AFS-Datenbanken betrieben wird.
Alle Datenbanken werden pro Datenbankserver von jeweils einem Prozess verwaltet. Dabei kommt das Protokoll UBIK zum Einsatz. Dieses ermöglicht den Lese- und Schreibzugriff auf die AFS-Datenbanken, solange sich mehr als die Hälfte der Datenbankserver über das Netzwerk erreichen. Für den Lesezugriff muss nur ein Datenbankserver erreichbar sein. Existieren also 5 Datenbankserver, könnte beispielsweise einer dieser Server auf eine neue Maschine migriert werden und der Ausfall eines weiteren Servers würde nicht den Schreibzugriff kosten. Wenn die ausgefallenen Datenbankserver wieder online sind, gleichen sie automatisch den Datenbestand untereinander ab.
Der aufwendige Synchronisationsmechanismus erfordert einen exakten Gleichlauf der internen Uhren der Datenbankserver. Wenn sich die Uhrzeiten zweier beliebiger Datenbankserver um mehr als 10 s unterscheiden, sperrt die Datenbank den Schreibzugriff.
Datenbankserver sind die einzigen Objekte, die ein AFS-Client kennen muss, wenn er auf eine gegebene Zelle zugreifen will. Das kann zum einen über eine lokale Datei (CellServDB) oder auch per Domain Name System (über AFSDB Resource Record) geschehen.

### Andere Server-Prozesse

Der Bosserver kommt auf allen AFS-Servern zum Einsatz. Ähnlich dem Init-Prozess auf Unix-Systemen verwaltet er eine Liste mit Prozessen, die auf einem Server laufen. Diese Prozesse weisen einen AFS-Server dann als Datenbankserver oder Dateiserver aus. Auch eine gleichzeitige Zuweisung ist möglich, allerdings häufig mit Problemen verbunden. Diese Liste und weitere Prozesse lassen sich über das Netzwerk verwalten.
In manchen AFS-Zellen kommen sog. Update-Server und Update-Clients zum Einsatz, die andere Serversoftware (z. B. Dateiserver-Prozesse) bei Bedarf aktualisiert.
Ein sog. butc kommt auf AFS-Tapecontrollern (sprich: AFS-Backup-Servern) zum Einsatz, um Daten von Dateiservern entgegenzunehmen und auf Band oder Festplatte zu speichern.

## Netzwerkprotokoll

AFS arbeitet heutzutage ausschließlich per UDP, allerdings existiert mit RX eine Abstraktionsschicht, die prinzipiell auch andere Protokolle wie TCP zulässt – es gibt Pläne, genau das für OpenAFS zu realisieren.
Das Rx-Protokoll arbeitet im authentifizierten Modus (sprich: wenn ein Benutzer sich vor der Arbeit anmeldet) immer signiert – üblicherweise auch verschlüsselt. Das bezieht sich z. B. auch auf Übertragungen zwischen AFS-Client und AFS-Dateiserver.
AFS ist sehr empfindlich in Bezug auf Firewalls. Folgende (UDP-)Ports müssen zwischen Servern und Clients sowie zwischen den Servern untereinander freigeschaltet sein:
* Für AFS allgemein: 7000, 7001, 7002, 7003, 7005, 7007
* Wenn das AFS-Backup-System zum Einsatz kommt, dann zusätzlich: 7021, 7025–7032
* Wenn Kerberos5 zum Einsatz kommt, dann zusätzlich: 88
Abgesehen von derzeit nicht bekannten Sicherheitsschwachstellen werden alle diese Ports als sicher angesehen, können also auch über das Internet erreicht werden.
AFS arbeitet mit festen Portnummern und hat deshalb keine Probleme mit üblichen NAT-Routern.

## Sicherheit

Die Sicherheit von AFS wird dadurch gewährleistet, dass jeder AFS-Server (Datenbank- wie Dateiserver) einen zellenweit einheitlichen symmetrischen Schlüssel (Shared-Secret) erhält. Dieser Schlüssel ist auch dem Kerberos-Server bekannt und kann deshalb eingesetzt werden, um Benutzer zuverlässig zu authentifizieren. Der Schlüssel ist 56 bit breit und entspricht damit nicht mehr den aktuellen Standards.
Datenübertragungen werden ebenfalls mit einem 56 bit breiten Sitzungsschlüssel signiert und bei Bedarf mit einem AFS-eigenen Algorithmus namens fcrypt verschlüsselt.
Bei anonymen Zugriffen auf das AFS (sprich: wann immer ein Nutzer kein AFS-Token hat) existiert für den Client keine Möglichkeit, den Dateiserver sicher zu authentifizieren, womit weder die Integrität noch die Vertraulichkeit von Datenübertragungen sichergestellt werden kann.

### Schwächen

Wird ein Dateiserver kompromittiert und der Zellenschlüssel fällt in die Hände eines Angreifers, so ist es diesem möglich, mit Superuser-Rechten auf allen Dateiservern zu agieren, Daten sämtlicher Nutzer auszulesen und diese auch zu verändern. DFS, der „ehemalige Nachfolger“ von AFS, räumt mit diesem Problem auf, für AFS gibt es aktuell keine Lösung.
Die geringe Schlüsselbreite ist ebenfalls ein Problem und rückt Brute-Force-Angriffe in den Bereich des Möglichen. Durch die Verwendung von Sitzungsschlüsseln ist die Gefahr noch relativ gering und nicht zu vergleichen mit der Schwäche z. B. von WEP.
Die fehlende Integritätsprüfung bei anonymen Zugriffen ist eine kritische Schwachstelle, da bei der verbreitetsten AFS-Client-Variante „OpenAFS“ ein Shared-Cache zum Einsatz kommt. Anonym vom Dateiserver heruntergeladene Dateien werden deshalb auch angemeldeten AFS-Nutzern zurückgeliefert, wenn diese auf solche zugreifen. Ein Angreifer kann – wenn man keine Gegenmaßnahmen ergreift – mit ein wenig Aufwand die Integritätsprüfung für angemeldete Benutzer aushebeln. Diese Schwachstelle ist unkritisch für Single-User-Maschinen, an denen Benutzer lediglich authentifiziert arbeiten. Mehrbenutzersysteme sind jedoch besonders gefährdet. Es ist derzeit kein praktisch durchgeführter Angriff bekannt.

### Gegenmaßnahmen

Gegen das Problem der zellenweit einheitlichen Schlüssel sind folgende organisatorische Maßnahmen zu treffen:
* AFS-Server absichern und nur die wichtigsten Dienste darauf aktivieren
* Alle AFS-Server in verschlossenen Räumen aufbewahren und den Zutritt auf Serververantwortliche beschränken
* AFS-Schlüssel in einem verschlüsselten Dateisystem aufbewahren. Die Effektivität dieser Maßnahme hat durch neuere Erkenntnisse über mögliche physische Angriffe auf DRAM-Bausteine stark abgenommen
Gegen die geringe Schlüsselbreite hilft nur eine Neuimplementierung der Sicherheitsschicht des verwendeten RPC-Protokolls (Rx). Es existieren Unternehmen, die AFS-Programmierdienste anbieten und gegen Bezahlung auch solche Probleme angehen. Ein regelmäßiger Schlüsselwechsel reduziert das Risiko erfolgreicher Brute-Force-Angriffe.
Um die beschriebenen Angriffe gegen die Integrität übertragener Daten auszuschließen, muss man auf dem jeweiligen Client anonyme AFS-Zugriffe unterbinden. Dies ist nur bei Maschinen praktikabel, auf die keine normalen Benutzer authentifizierten Zugriff (Shell-Accounts, FTP, WebDAV, …) haben. Alle Dienste müssen auf einem solchen Rechner grundsätzlich mit einem Token arbeiten. Auch Cronjobs dürfen dabei nicht vergessen werden.

## Dateisystem-Semantik

Zur Vereinfachung wird der Dateinamensraum im AFS vom Administrator i. d. R. zyklenfrei aufgebaut. Eine Garantie dafür kann es jedoch nicht mehr geben, sobald Nutzer das Recht bekommen, Volume-Mountpoints anzulegen oder Rechte zu verändern. Das kann z. B. für Backup-Software ein Problem darstellen.
Das Dateisystem kennt drei Objekttypen:
* Verzeichnisse – diese enthalten Dateien, andere Verzeichnisse und Mountpoints + eine ACL, die die Zugriffsrechte regelt.
* Dateien – Dateien können in modernen AFS-Zellen (z. B. ab OpenAFS 1.4) – wenn Client und Server das unterstützen – größer als 2 GB sein. Sie besitzen genau einen Datenstrom, Unix-übliche Metadaten wie Benutzer-ID und Gruppen-ID. Dabei werden die Unix-Permissions jedoch nicht für Autorisationszwecke benutzt. Mehrere harte Links können auf Dateien existieren, jedoch nur, wenn sich diese im selben Verzeichnis befinden.
* symbolische Verknüpfungen – Diese verhalten sich, wie es bei Unix üblich ist. Verknüpfungen, deren Ziel eine besondere Form hat, werden vom AFS-Client als Volume-Mountpoint interpretiert. An deren Stelle wird anschließend der Inhalt des Basisverzeichnisses eines anderen Volumes eingehängt.
Der Administrator einer Zelle definiert den Namensraum, indem er Volumes strukturiert ineinanderhängt. Beginnend mit dem Standardvolume root.cell greift man dann z. B. auf Volumes wie home-Verzeichnisse, software, projekte und temp zu und hängt z. B. in das home-Verzeichnis-Volume weitere mit dem Namen home.ernie, home.bert, … ein. Der Pfad zu Bert sieht dann z. B. so aus:
Hinweise:
* Der Pfad eines Verzeichnisses / einer Datei sagt nichts über den Dateiserver aus, auf den zugegriffen wird. Selbiges gilt für Mountpoints.
* Auch die Volumes, die man entlang eines Pfades durchschreitet, gehen aus dem Pfad nicht zwangsläufig hervor, jedoch lassen sich diese z. B. aus den Volume-Mountpoints ermitteln.
Unter Betriebssystemen, denen das Konzept der symbolischen Verknüpfungen fremd ist (z. B. Windows), erscheinen diese als Verzeichnisse im Dateinamensraum des AFS. Neuere Windows-Clients verfügen über entsprechende Erweiterungen, um solche Verknüpfungen als Junction Points darzustellen, sowie über Shell-Erweiterungen, um diese zu verwalten.
Das AFS-Protokoll unterstützt netzwerkweite Dateisperren, jedoch nur sog. Advisory Locks (flock), keine Byte Range locks (lockf). Der OpenAFS-Windows-Client ist ab Version 1.5.10 in der Lage, lokal Byte Range Locks zu emulieren. Dabei können lokale Anwendungen auf der Client-Maschine derartige Locks benutzen, der AFS-Client sperrt entsprechende Dateien auf dem Dateiserver jedoch über einfache Advisory Locks.
Die Anzeige des freien bzw. belegten Speichers des gemounteten AFS (Unix) ist eine Fantasiezahl. Prinzipiell kann in einem verteilten Netzwerkdateisystem der freie bzw. belegte Speicher nur pro Verzeichnis ermittelt werden. Der Windows-Client ist in der Lage, den freien Speicher pro Verzeichnis an Anwendungen zurückzumelden.

## AFS-Clients

AFS-Clients sind Computer (z. B. Workstations), die auf den AFS-Dateinamensraum zugreifen können. Unter Unix-Betriebssystemen ist dazu eine Kernelerweiterung nötig. Dies geschieht entweder über einen generischen Dateisystemtreiber wie FUSE (Arla-AFS-Client) oder über ein umfassenderes AFS-spezifisches Kernel-Modul (OpenAFS). In beiden Fällen sind zusätzliche Userspace-Prozesse nötig, die den Kernel-Treibern zuarbeiten. Der OpenAFS-Windows-Clients basiert auf einem für AFS entwickelten Redirektor, der mit einem Windows-Dienst kooperiert.

### Cache

AFS-Clients (auch Cache-Manager) sind in der Lage, große Datenmengen von Dateiservern zwischenzuspeichern, wobei nicht ganze Dateien, sondern Stückchen anpassbarer Größe abgelegt werden. Die optimale Größe eines solchen Caches ist abhängig von Nutzungsmuster und kann mehrere Gigabyte groß sein.
Die Cache-Integrität wird vom AFS garantiert. Ein Dateifragment, das vom Cachemanager eingelagert wird, ist gültig, bis der entsprechende AFS-Server es aktiv invalidiert. Das geschieht für RW-Instanzen z. B. wenn die entsprechende Datei von einem anderen AFS-Client modifiziert wurde, bei RO-Instanzen z. B. dann, wenn der Administrator die Replikation auslöst.
Aktiv gecacht werden ausschließlich Lesevorgänge. Schreibzugriffe werden zwar auch gepuffert, wenn jedoch eine zum schreibenden Zugriff geöffnete Datei geschlossen wird, blockiert das close-Kommando solange, bis alle Daten zum Dateiserver geschrieben wurden.
Der Cache ist bei OpenAFS für Unix persistent. Die Cache-Integrität wird nach Neustart durch den Abgleich der Änderungszeitstempel von Dateien mit dem Dateiserver realisiert. Die Persistenz des Caches macht u. U. auch in lokalen Netzen die Nutzung von riesigen Caches zur Geschwindigkeitssteigerung sinnvoll.
Unter Windows besteht der Cache aus einer einzigen Datei, die per Memory Mapping benutzt wird. Die Maximalgröße des virtuellen Speichers (4 GB bei einem 32-Bit-System) ist deshalb eine unüberwindbare Hürde für die Cache-Größe.
Unter OpenAFS für Unix-Systemen besteht der Cache aus vielen Dateien in einem Verzeichnis. An das Dateisystem, in dem dieses Verzeichnis liegt, werden erhöhte Ansprüche gestellt:
* kein Journal
* hohe POSIX-Kompatibilität
* Unter Linux am besten Ext2
OpenAFS erlaubt auch die Verwendung des Hauptspeichers (RAM) anstatt eines Verzeichnisses auf der Festplatte für den Cache (Option afsd -memcache).

## Unterstützte Plattformen

AFS wird auf vielen Plattformen unterstützt. Das ist für AFS-Serverprozesse leichter zu realisieren als für AFS-Clients, da keine Kernelerweiterungen nötig sind. Es existieren verschiedene Projekte, die das AFS-Protokoll ganz oder teilweise implementieren – hier eine eventuell unvollständige Liste:
| Plattform/Implementierung | Plattform/Implementierung | OpenAFS | OpenAFS | Arla (Client) | MR-AFS (Server) | Hostafs (Server) | kAFS (Client) |
| Plattform/Implementierung | Plattform/Implementierung | Client | Server | Arla (Client) | MR-AFS (Server) | Hostafs (Server) | kAFS (Client) |
| Linux | Kernel 2.4 | 1.2.11 | V | ? | ? | E | |
| Linux | Kernel 2.6 | V | V | V | V (*) | E | V (*) |
| Windows | Windows 3.11, 3.1 und 3.0 | | | | | | |
| Windows | Windows 98, ME | 1.2.2b | | | | | |
| Windows | Windows 2000, XP | V | V | E | | | |
| Windows | Windows Vista | V | V | ? | | | |
| macOS | 10.1 | 1.2.7 | 1.2.7 | 0.35.9 | | | |
| macOS | 10.2 | 1.2.10 | 1.2.10 | 0.35.10 | | | |
| macOS | 10.3 (Panther) | 1.4.1 | 1.4.1 | 0.37 | | | |
| macOS | 10.4 (Tiger) | V | V | V | | | |
| macOS | 10.5 (Leopard) | V | V | V | | | |
| Solaris | vor 2.0 | ? | ? | ? | ? | | |
| Solaris | 2.0–2.6 | V (*) | V | ? | V (*) | | |
| Solaris | ab 2.6 | V | V | E | V (*) | | |
| BSD | FreeBSD 5.x | | | V | | | |
| BSD | FreeBSD 6.x | | | | | | |
| BSD | NetBSD | | | V | | | |
| BSD | OpenBSD 4.8 | V | V | V | | | |
| AIX | AIX 5.1, 5.2, 5.3 | V | V | | | | |
| AIX | AIX 6.1 | | | | | | |
| SGI Irix 6.5 | SGI Irix 6.5 | ? | ? | | | | |
| HPUX 11i | HPUX 11i | ? | ? | | | | |
Legende:
| Syntax | Bedeutung |
| V | Der entsprechende Plattform-Port wird aktiv gepflegt und weiterentwickelt. Der Einsatz der entsprechenden AFS-Implementierung auf dieser Plattform ist also grundsätzlich zu empfehlen. |
| E | Dieser Port ist experimentell und für produktiven Einsatz nicht zu empfehlen. |
| Version | Dieser Port wurde früher aktiv gepflegt, jedoch gibt es zumindest keine aktuellen Pakete mehr. Die letzte verfügbare Versionsnummer ist angegeben. |
| ? | Dieser Port wird offiziell unterstützt. Wer nähere Informationen zur Qualität des Ports hat, möge diese bitte eintragen. |
| (*) | Unbedingt den Abschnitt zur entsprechenden Implementierung lesen! |
Für AFS-Server sollte auf die empfohlenen Plattformen zurückgegriffen werden. Es existieren zwar z. B. experimentelle AFS-Server-Versionen für Windows oder alte AFS-Server-Versionen für IRIX, jedoch werden diese nicht offiziell unterstützt bzw. von Fehlern befreit.
Transarc-AFS und seine Nachfolger verfügen über einen NFS-Server im Client, der andere Plattformen, für die kein Client existiert, per NFS Zugriff auf den AFS-Namensraum gewähren kann. Allerdings ist nur von Solaris bekannt, dass ein darauf laufender aktueller OpenAFS-Client dies noch unterstützt. Prinzipiell kann jedoch jeder im Userspace laufende Serverprozess (z. B. Samba, Userspace-NFS-Server, Webdav, …) problemlos Dateien aus dem AFS freigeben. Ohne spezielle Anpassungen an der Serversoftware sind so allerdings nur anonyme Zugriffe möglich.

## Historie und Formen der AFS-Implementierungen
### AFS, Transarc-AFS, IBM-AFS

AFS war ursprünglich ein universitäres Projekt der Carnegie Mellon University und umfasste eine Client- sowie eine Server-Implementierung. Es wurde von der Firma Transarc später unter dem Namen Transarc AFS vermarktet. In der Folge kaufte IBM Transarc und vermarktete AFS anschließend unter dem Namen IBM-AFS. IBM gab AFS im Jahre 2000 unter einer Open-Source-Lizenz (IBM Public License) frei – es heißt seitdem OpenAFS und wird aktiv weiterentwickelt. Weiterhin sind jedoch weltweit zahlreiche Transarc- und IBM-AFS-Server im Einsatz.

### OpenAFS

OpenAFS ist die am aktivsten gepflegte AFS-Implementierung.
Das Hauptaugenmerk der Entwicklung bei OpenAFS liegt derzeit für Server auf
* Linux
* AIX
* Solaris
Grundsätzlich gilt, dass der AFS-Server nur in geringem Maße vom Wirtsbetriebssystem abhängig ist. Es sollte also z. B. auch auf einer älteren Version von Linux möglich sein, den Server (der i. d. R. ausschließlich im Userspace arbeitet), zu übersetzen und zu betreiben. Ausnahmen sind Serverversionen, die spezielle Modifikationen am Wirtsdateisystem vornehmen (sog. inode-Server). Diese benötigen zusätzliche Kernelmodule und werden auch für neue AFS-Installationen praktisch nicht mehr eingesetzt.
Unterstützte Client-Plattformen sind:
* Linux. Da das für den Client nötige Kernel-Modul Open Source ist und keine Kernel-Patches benötigt, kann man es für beliebige Linux-Distributionen übersetzen.
* Windows 2000 und Windows XP
* macOS 10.4 (Tiger)
* AIX
* Solaris. Achtung: Der OpenAFS-Client-Support für Solaris vor 2.6 wird aus der Entwicklungsversion von OpenAFS entfernt – OpenAFS 1.4 unterstützt jedoch weiterhin Solaris ab 2.0.
Clients für ältere Plattformen – z. B. für ältere Windowsversionen findet man auf OpenAFS durch etwas suchen in den alten OpenAFS-Releases.
Im Rahmen des DCE-Standards wurde das verteilte Dateisystem DFS als Nachfolger von AFS entwickelt. Dieses bietet u. a. folgende Vorteile:
* Ein geheimer Schlüssel pro Server, nicht wie bei AFS pro Zelle
* ACLs pro Datei und nicht nur pro Verzeichnis
Dem DFS war trotz Abwärtskompatibilität zu AFS kein Erfolg beschieden, da dessen Einsatz an hohe Lizenzgebühren gebunden war.

### Arla

Das Arla-Projekt entstand zu einer Zeit, als es noch keine freie AFS-Implementierung gab und Transarc-AFS mit Lizenzzahlungen verbunden war. Es wurde unabhängig vom „AFS-Mainstream“ (AFS … OpenAFS) an der KTH als Open-Source-Software entwickelt. Bis jetzt existiert nur eine Client-Implementierung, diese deckt jedoch einige von OpenAFS nicht unterstützte Plattformen ab.

### MR-AFS

MR-AFS (Multi-Resident-AFS) entstand als kommerzielle Weiterentwicklung von Transarc-AFS. MR-AFS’ Stärke ist, dass die Dateiserver Dateien aus dem AFS-Namensraum auf Tertiärspeicher (Bänder, optische Datenträger, …) auszulagern können. Die Dateiserver schreiben dazu in ein HSM-Dateisystem und überlassen die eigentlichen Migrationsentscheidungen der HSM-Software. Dabei können normale AFS-Clients mit MR-AFS-Servern Daten austauschen. MR-AFS befasst sich ausschließlich mit Serversoftware. Des Weiteren gibt es MR-AFS-spezifische Funktionen, die z. B. in die Kommandozeilentools von OpenAFS eingebaut sind. Die Zukunft von MR-AFS ist ungewiss, da der einzige Entwickler bereits in Rente ist.

### Hostafs

Hostafs ist eine kleine AFS-Server-Implementierung, die zum Ziel hat, normale Verzeichnisse als Volumes zu tarnen und per AFS freizugeben. Auf diese Weise kann man z. B. CD-ROMs im AFS verfügbar machen. Hostafs stellt jedoch keine Zugriffsschutzmechanismen wie ACLs zur Verfügung – alle Freigaben sind für jeden lesbar.

### kAFS

Diese AFS-Implementierung besteht aus einem Client, der als Linux-Kernelmodul realisiert ist. Er ist Teil des Standard-Linux-Kernels. Der Client ist jedoch nicht für produktiven AFS-Betrieb gedacht, sondern z. B. für das Booten über Netzwerk, wenn der Administrator alles im AFS vorhalten will. Es besitzt keine Möglichkeit, authentifiziert auf das AFS zuzugreifen. Außerdem unterstützt es ausschließlich lesenden Zugriff und spricht nur mit Dateiservern. Letzteres bedeutet, dass man den zu benutzenden Dateiserver explizit angeben muss – das Modul kann dazu nicht den vlserver befragen.

### YFS

Wegen Unzufriedenheit mit den organisatorischen Mechanismen der Weiterentwicklung des AFS-Protokolls arbeiten einige OpenAFS-Entwickler an einem kommerziellen Fork von OpenAFS mit dem Namen YFS. Diese Abspaltung kann sowohl mit dem AFS- als auch mit dem maßgeblich verbesserten YFS-Protokoll umgehen. Es gibt derzeit keine offizielle Veröffentlichung (Stand Januar 2013).

### Ein Blick in die Zukunft

Am Rechenzentrum Garching wurde ein AFS-Server (mit entsprechenden in den OpenAFS-Client einfließenden Client-Modifikationen) mit OSD (Object Storage) entwickelt. Dabei werden die Metadaten (Zugriffsrechte, Timestamps, Verzeichnisstrukturen) weiterhin vom AFS-Server verwaltet, die Daten liegen jedoch auf sog. Object-Storage-Servern, mit denen der Client direkt kommunizieren kann. Auf diese Weise können z. B. Dateien auf mehreren Servern liegen (Striping) und deutlich schneller gelesen und geschrieben werden. Da der Entwickler des OSD-AFS in den Ruhestand ging und der Server nicht hinreichend stabil lief, wurde der Betrieb dieses Servers ca. 2015 wieder eingestellt.

## Beschränkungen und Grenzen

* AFS kann wegen des Callbacks-Prinzips (Rechner werden aktiv über Änderungen auf dem Server informiert) nicht zuverlässig mit NAT-Routern zusammenarbeiten. Faustregel: Es ist kein NAT-Router dazwischen muss für jedes mögliche Paar von Rechnern einer AFS-Zelle gelten – Ab Version 1.4.1 arbeitet OpenAFS besser mit IP-NAT zusammen.
* AFS arbeitet ausschließlich mit IPv4. Die Unterstützung von IPv6 würde Änderungen an den Schemata der AFS-Datenbank sowie an den RPCs der Datenbankserver erfordern.
* Der AFS-Client ist nicht für extrem große Datenmengen ausgelegt. Das liegt an der Organisation des Cache-Managers, der zwar große Dateistücken speicher kann, diese jedoch unabhängig von deren Größe ineffizient verwaltet. Die Beschränkung gilt nur für OpenAFS-Clients vor Version 1.4.0.
* Unter Unix-Betriebssystemen benutzt der verbreitete OpenAFS-Client die GIDs (Unix-Gruppen IDs) 0x7f0 bis 0xbf00. Diese Gruppen zusätzlich für andere Zwecke zu benutzen stellt ein Sicherheitsrisiko dar.
* AFS unterstützt keine netzweiten Bytes-Range-Locks. Der OpenAFS-Windows-Client simuliert Byte-Range-Locks lokal. Eine ähnliche Funktion soll es in Kürze auch für den OpenAFS-Linux-Client geben.
* Jeder Rechner kann Server und Client für jeweils eine AFS-Zelle sein. Es ist nicht möglich, ähnlich einem WWW-Server mehrere AFS-Zellen über einen AFS-Server zu bedienen. Generell ist eine Servervirtualisierung möglich. Clients können unabhängig von ihrer Heimatzelle mit beliebig vielen Zellen gleichzeitig Daten austauschen.
* Im AFS-Namensraum sind ausschließlich die Objekte Verzeichnis, Datei, symbolische Verknüpfung und Volume-Mountpoint (eine Sonderform der symbolischen Verknüpfung) bekannt. Pipes, Gerätedateien oder Sockets werden nicht unterstützt.
* Pro Zelle sind maximal 254 Dateiserver erlaubt.
* Pro Dateiserver werden 255 Datenpartitionen unterstützt.
* Die Blockgröße im AFS beträgt 1 kByte und lässt sich nicht ändern.
* Pro Datenpartition sind unter OpenAFS-Dateiservern 4 Tebibyte (32 Bit * Blockgröße) problemlos nutzbar.
* Einige RPCs des Dateiservers führen zu ungültigen Rückgabewerten, wenn man diese Grenze überschreitet. Ab der Dateiserverversion 1.6.2 ist das jedoch ist das für die regulären Nutzer unproblematisch.
* Volumes können maximal 2^31−1 Blöcke groß werden (etwa 2 Tebibyte). Diese Einschränkung ist marginal, da das Ziel immer sein sollte, Volumes leicht verschiebbar – also klein – zu halten. Seit OpenAFS 1.4.0 sind auch größere Volumes möglich, jedoch beträgt die maximal einstellbare Quota immer noch 4 TiB.
* Volume-Namen können (Instanz-Erweiterungen wie .readonly und .backup nicht hinzugerechnet) maximal 22 Zeichen lang sein.
* AFS-Verzeichnisse sind statische Datenstrukturen mit einer maximalen Kapazität von 64435 Einträgen (dentrys). Die Anzahl der Einträge wird reduziert, wenn eine oder mehrere Einträge Namen länger als 15 Zeichen haben.
* Jede ACL (also positive und negative ACLs unabhängig voneinander) eines Verzeichnisses kann maximal 20 Einträge haben.
* AFS beherrscht keine automatische Replikation. Daten werden in eine RW-Instanz geschrieben und evtl. später manuell (oder auch skriptgesteuert) in RO-Instanzen kopiert. Jedoch kann immer nur eine RW-Instanz pro Volume existieren.
Diverse Programme stören sich daran, wenn sie im AFS laufen.

### Andere Beschränkungen

* AFS ist nicht für die Ablage von Datenbanken geeignet.
* AFS ist nicht als Mailserver-Backend geeignet. Es gibt zwar Beispiele von AFS-Zellen, bei denen E-Mails direkt in die Home-Verzeichnisse von Benutzern gelegt werden, jedoch ist das technisch anspruchsvoll. Außerdem skalieren Lösungen dieser Art bei vielen Nutzern kaum und der Gewinn ist minimal.

## Administrationsaufwand
### Einrichtung vs. Betrieb

Das Aufsetzen einer AFS-Zelle ist deutlich schwerer, als z. B. das Anlegen einer SMB-Freigabe oder eines NFS-Exports. Die kryptografische Absicherung der Authentifikation mittels Kerberos erfordert einen gewissen Aufwand, der unabhängig von der Größe der Zelle ist. Zusätzlich kostet das Design der Zelle Zeit.
Seine Vorteile spielt AFS in folgenden Situationen aus:
* wenn die Skalierbarkeit wichtig ist (Stichwort: Exponentielles Wachstum des Datenbestandes)
* wenn der Datenbestand bereits extrem groß ist. AFS-Zellen mit hunderten Terabytes sind kein Problem.
* wenn die Sicherheit eine größere Rolle spielt.
* wenn Benutzer hohe Flexibilität bei der Rechtevergabe benötigen
* wenn viel automatisiert werden soll. AFS lässt sich komplett über Kommandozeilentools steuern.
* wenn plattformübergreifender Zugriff auf Daten obligatorisch ist. AFS deckt die Plattformen Unix, macOS und Windows ab.
Wenn die AFS-Zelle erstmal läuft, beschränkt sich die Arbeit des AFS-Administrators auf das Aufrüsten und ggf. Austauschen von Servern. Der Administrationsaufwand ist dann im Verhältnis zur Nutzeranzahl und Speichergröße extrem niedrig. Zellen mit vielen Terabytes an Daten und mehreren tausend Nutzern kommen dabei u. U. mit einer Administratorstelle aus.

### Aufwand für normale Benutzer

Die Verwendung von AFS ist mit einem Mehraufwand für Nutzer verbunden – die pro-Verzeichnis-ACLs sind ungewohnt und ACLs allgemein ein Konzept, das vor allem in der Unix-Welt erst langsam an Bedeutung gewinnt.
Als sinnvolle Strategie hat sich erwiesen, die AFS-Home-Verzeichnisse mit gewissen Standardpfaden zu versehen, die das Sicherheitsniveau ausdrücken (z. B. ~/public, ~/secret) und den Benutzer so, abgesehen von Ausnahmefällen, von ACLs fernzuhalten.
Da eine Benutzer-Anleitung jedoch nicht abstrakt sein sollte, wird ein AFS-Administrator eine solche für die eigene Zelle meist selbst schreiben und lokale Besonderheiten darin berücksichtigen.

### Backup

AFS wird von vielen Herstellern verschiedener Backup-Lösungen nicht unterstützt. Die Gründe dafür sind vielschichtig. Eine eigene Backup-Lösung ist jedoch vergleichsweise schnell in Form einiger Shell-Skripts programmiert.

## Einrichtungen, die AFS einsetzen

* Max-Planck-Institut für Kognitions- und Neurowissenschaften
* Universität Hohenheim – betreibt die älteste AFS-Zelle im deutschsprachigen Raum
* Max-Planck-Institut für Plasmaphysik (hat AFS im Februar 2024 abgeschaltet)
* TU Chemnitz
* Georgius-Agricola-Gymnasium Chemnitz
* Universität Paderborn
* CERN
* Institut national de physique nucléaire et de physique des particules
* Stanford Linear Accelerator Center
* Deutsches Elektronen-Synchrotron
* Paul Scherrer Institut
* Ruprecht-Karls-Universität Heidelberg
* Fachschaft Physik an der TU Wien
* Technische Universität Braunschweig
* Technische Universität Berlin
* Technische Universität Graz – SPSC
* Friedrich-Schiller-Universität Jena
* Polizei Niedersachsen
* Wirtschaftsuniversität Wien
* Rheinische Friedrich-Wilhelms-Universität Bonn (bis 1. Dezember 2013)
* Universität zu Köln
* Humboldt-Universität zu Berlin
* Georg-August-Universität Göttingen, am Institut für Informatik
* Hochschule für angewandte Wissenschaften München
* Eberhard Karls Universität Tübingen