Coda ist ein Netzwerk-Dateisystem für mobile Rechner. Mehrere Rechner teilen sich ein Dateisystem, dass i.d.R. auf mehreren Servern verteilt ist. Dies erhöht die Verfügbarkeit des Systems. Die Server gleichen Inhalte untereinander ab.
Ein Klient liest bei Verbindungsunterbrechung die Daten aus seinem Cache und schreibt sie auch dort wieder zurück. Sobald eine Verbindung zu einem Server aufgebaut werden kann gleicht er seine Daten mit ihm ab.
Der Cache eines Klienten speichert üblicherweise nur Ausschnitte des gesamten Dateisystems aufgrund von Resourcenknappheit mobiler Systeme. Dabei greift er auf Daten zurück, die am meisten genutzt werden.
Datenkonsistenz
Bei Zugriff mehrerer Klienten auf gleiche Resourcen kann es zu Inkonsistenzen kommen. Deswegen wird der Zugriff jeweils nur an einen Klienten übertragen. Durch die Mobilität der Teilnehmer kann es aber zu dead-locks kommen, d.h. Sperren auf eine Resource durch einen Teilnehmer werden nicht aufgehoben weil dessen Verbindung zusammenbricht.
Coda verzichtet deswegen auf Ausschlussverfahren und erteilt allen Klienten Zugriff. Bei einer Änderung wird ein Log (Replay-Log) über die Änderung geschrieben. Danach ist es dem Benutzer selbst überlassen möglich auftretende Konflikte aufzulösen.
Grenzen
Coda ist von einem idealen Dateisystem, bei dem die gerade benötigten Dateien überall verfügbar und gleichzeitig vor Verlust geschützt und miteinander synchronisiert sind, noch weit entfernt (auch wenn es, verglichen mit anderen Dateisystemen, dem wahrscheinlich am nächsten kommt). Gründe dafür sind unter anderem:
- Schreib-Geschwindigkeit: Die Schreib-Geschwindigkeit auf Coda-Dateisystemen ist sehr viel langsamer als auf lediglich lokalen Dateisystemen. (Um Divisor 60 langsamer beim Löschen, um Divisor 20 langsamer beim Datei-erzeugen.) (Mehr dazu hier)
- mangelnde Unterstützung für sehr große Dateien: Greift ein Coda-Client auf eine Datei zu, dann muss diese vollständig vorliegen. Bei großen Dateien (z.B. DVD-Images) heißt dies: Der lokale Cache des Clients muss z.B. mindestens 5 GB groß sein.
- mangelnde Unterstützung für ständig offene Dateien: Dateien werden erst "persistent", wenn sie wieder geschlossen wurden, nicht schon vorher z.B. mittels des Kommandos flush. Das bedeutet, dass Änderungen auf einer Datenbank oder Log-File-Einträge nicht erhalten bleiben, sollte der Coda-Client einmal nicht ordnungsgemäß heruntergefahren werden. (z.B. Strom-Ausfall bzw. leerer Akku) Dies widerspricht den üblichen UNIX-artigen semantiken, dass geschriebene Daten früher oder später ohne weiteres Zutun der Applikation den persistenten Speicher (die Festplatte) erreichen.
Siehe auch
- Andrew File System (AFS) - IBM
- Network File System (NFS) - Sun Microsystems
- Distributed File System (DFS) - Microsoft