Massenspeichergeräte wie Festplatten-, CD-ROM- und Diskettenlaufwerke haben normalerweise eine Blockstruktur, d.h. aus Betriebssystemsicht lassen sich Daten nur als Folge ganzer Datenblöcke lesen oder schreiben ([[storage_level|Block-Zugriff]]). **Ein Speichergerät präsentiert das Speichermedium gegenüber dem Betriebssystem lediglich als große lineare Anordnung vieler nummerierter (und darüber adressierbarer) Blöcke**. Ein Block umfasst heute meistens 512 (= 2^9) oder 4096 (= 2^12) Bytes, auf optischen Medien (CD-ROM, DVD-ROM) 2048 (= 2^11) Bytes. **Moderne Betriebssysteme fassen aus Performance- und Verwaltungsgründen mehrere Blöcke zu einem Cluster fester Größe zusammen**. Heute sind Cluster mit acht oder noch mehr Blöcken üblich, also 4096 Bytes pro Cluster. Die Clustergröße ist im Allgemeinen eine Zweierpotenz (1024, 2048, 4096, 8192, …). **Eine Datei ist ein definierter Abschnitt eines Datenspeichers, der auf dem Gerät aus einem oder mehreren Clustern besteht**. Jede Datei erhält außerdem eine Beschreibungsstruktur, die die tatsächliche Größe, Referenzen auf die verwendeten Cluster und evtl. weitere Informationen wie Dateityp, Eigentümer, Zugriffsrechte enthalten kann (Metadaten). [[https://de.m.wikipedia.org/wiki/Liste_von_Dateisystemen|Liste von Dateisystemen]] =====Fehlertoleranz===== Fehlertoleranz ist ein zentrales Thema in Dateisystemen – die Aufrechterhaltung der Funktionalität und Abstraktionen von Dateisystemen im Fall eines physischen Problems (Stromausfall) oder eines Softwareproblems (Systemabsturz). Es ist von entscheidender Bedeutung, dass die Datenstrukturen eines Dateisystems auch bei Abstürzen ordnungsgemäß aktualisiert und gewartet werden können – dies wird als **crash consistency** bezeichnet . Wenn beispielsweise ein Schreibvorgang für eine Datei ausgeführt wird und es zu einem Stromausfall kommt, sollte das Dateisystem versuchen, diesen Schreibvorgang aufzuzeichnen (zu protokollieren) und diesen Vorgang dann wiederherstellen, wenn das Dateisystem alleine zurückkehrt. Journaling und protokollstrukturierte Dateisysteme sind zwei Architekturen von Dateisystemen, die Absturzkonsistenz ermöglichen und somit die Fehlertoleranz verbessern. =====Journaling===== Ein Journaling-Dateisystem ist ein Dateisystem, das alle Änderungen vor dem eigentlichen Schreiben in einem dafür reservierten Speicherbereich, dem Journal, aufzeichnet. Damit ist es zu jedem Zeitpunkt möglich, einen konsistenten Zustand der Daten zu rekonstruieren, auch wenn ein Schreibvorgang an beliebiger Stelle abgebrochen wurde. Diese Eigenschaft ist im Fall von Systemabstürzen oder Stromausfällen von Vorteil. So kann die bei herkömmlichen Dateisystemen nach solchen Vorfällen oft automatisch gestartete Überprüfung des ganzen Dateisystems mit oft erfolglosen Reparaturversuchen entfallen. Speziell bei großen Festplatten mit Partitionsgrößen über 100 Gigabyte ergibt sich hieraus auch eine beträchtliche Zeitersparnis beim Booten, da das Überprüfen dieser durchaus mehrere Stunden dauern kann. Man unterscheidet zwischen Metadaten-Journaling und Full-Journaling. Während Metadaten-Journaling lediglich die Konsistenz des Dateisystems garantiert, wird beim Full-Journaling auch die Konsistenz der Dateiinhalte gewährleistet. Umgangssprachlich wird oft der allgemeine Begriff des Journaling verwendet, wenn eigentlich Metadaten-Journaling gemeint ist. =====Logbasiert===== In den späten 1980er Jahren fanden Informatikforscher heraus, dass sie das Protokoll einfach in das Dateisystem selbst einbetten können, anstatt das Protokoll getrennt vom Dateisystem zu machen. Mit anderen Worten, das gesamte Dateisystem ist im Wesentlichen ein Protokoll. Dadurch entfällt die Notwendigkeit, eine Aktualisierung sowohl in das Protokoll als auch in die eigentliche Datei an ihrem permanenten Speicherort zu schreiben. =====Pseudo Dateisysteme===== Dazu zählen u. a. sysfs, usbfs oder devpts; unter einigen BSDs gibt es ein kernfs. All diese Dateisysteme enthalten nur rein virtuell vorhandene Dateien mit Informationen oder Geräten, die auf eine „Datei“ abgebildet werden. =====Netzwerkdateisysteme===== Es gibt auch Dateisysteme die sich über das Netzwerk erstrecken. Siehe z.b [[dfs|DFS]], [[nfs|NFS]], [[smb|SMB]], [[ceph|Ceph]], [[zfs|ZFS]]. **Verschiedene Netzwerkdateisysteme authentifizieren den Client PC oder den Benutzer, nicht alle unterstützen ACLs**. Systemaufrufe wie open, read usw. können auch über ein Netzwerk an einen Server übertragen werden. Dieser führt dann die Zugriffe auf seine Massenspeicher durch und liefert die angeforderte Information an den Client zurück. Da dieselben Systemaufrufe verwendet werden, unterscheiden sich die Zugriffe aus Programm- und Anwendersicht nicht von der auf die lokalen Geräte. Für Netzwerkdateisysteme stehen spezielle Netzwerkprotokolle zur Verfügung. Kann auf ein Dateisystem etwa in einem **Storage Area Network** ([[san|SAN]]) von mehreren Systemen parallel direkt zugegriffen werden, spricht man von einem Globalen- oder Cluster-Dateisystem. Dabei sind **zusätzliche Maßnahmen** zu ergreifen, um Datenverlust (englisch data corruption) durch gegenseitiges Überschreiben zu vermeiden. Dazu wird ein Metadaten-Server eingesetzt. Alle Systeme leiten die Metadaten-Zugriffe – typischerweise über ein LAN – an den Metadaten-Server weiter, der diese Operationen wie Verzeichniszugriffe und Block- beziehungsweise Clusterzuweisungen vornimmt. Der eigentliche Datenzugriff erfolgt dann über das SAN, als ob das Dateisystem lokal angeschlossen wäre. Da der Zusatzaufwand (englisch overhead) durch die Übertragung an den Metadaten-Server insbesondere bei großen Dateien kaum ins Gewicht fällt, kann eine Übertragungsgeschwindigkeit ähnlich der eines direkt angeschlossenen Dateisystems realisiert werden. =====Windows===== [[Windows]] * FAT12 - frühes Dateisystem der FAT-(File-Allocation-Table)-Dateisystemfamilie unter ROM-BASIC und MS-DOS, heute noch gängig für Disketten (wird von nahezu jedem Betriebssystem unterstützt) * FAT16 - neuere Variante in der FAT-Dateisystemfamilie mit erweiterten Limits gegenüber FAT12 (wird von nahezu jedem Betriebssystem unterstützt) * FAT32 - neuere Variante der FAT-Dateisystemfamilie mit erweiterten Limits gegenüber FAT16, ab Windows 95b bzw. Windows 2000 (wird von neueren Betriebssystemen unterstützt) * exFAT - für den Einsatz auf Flash-Speicher spezialisierte Version von FAT32 * NTFS - (New Technology File System): Journaling-Dateisystem der Windows-NT-Produktlinie, dort das Standarddateisystem. * ReFS - (Resilient File System; deutsch Robustes Dateisystem): Neues Dateisystem, eingeführt mit Windows 8. * VFAT - (Virtual FAT): Optionale Erweiterung von FAT12/FAT16/FAT32, um Unterstützung für lange Dateinamen und Sonderzeichen zu gewährleisten. =====Linux===== [[Linux]] * EXT - (Extended File System) – mit dem Linux-Kernel entwickeltes Dateisystem * EXT2 - (Second Extended File System) – weiterentwickelte Variante von ext mit erweiterten Grenzen; war lange Zeit das Standard-Dateisystem unter Linux. * EXT3 - (Third Extended File System) – weiterentwickelte Variante von ext2 mit Journaling * EXT4 - (Fourth Extended File System) – weiterentwickelte Variante von ext3, u. a. mit erweiterten Grenzen; ist rückwärtskompatibel und ersetzt ext2/3 vollständig * JFS - Linux-Portierung des Enhanced Journaled Filesystem (JFS2) von IBM * ReiserFS * Reiser4