Nie wieder exFAT

Wenn man den Inhalt einer 2 TB Festplatte auf eine 4 TB Platte kopiert und am Ende die Meldung kommt:

Es ist nicht genügend Speicherplatz verfügbar um den Vorgang abzuschließen.

dann ist entweder die Zielfestplatte kaputt oder man hat als Dateisystem exFAT eingesetzt.

W-T-F


Ein bisschen Geschichtsunterricht

Disketten waren Scheiben, auf denen Daten in Spuren (auch “Cylinder” oder “Track” genannt) von innen nach außen gespeichert wurden. Eine Spur wurde in mehrere Sektoren unterteilt und man hatte sich (bei IBM) darauf geeinigt, dass ein Sektor einer Spur immer 512 Bytes speichern können soll.

Dieses Schema galt auch für Festplatten und wurde erst zwischen den Jahren 2007 bis 2010 auf 4 KBytes pro Sektor umgestellt.

Die ersten Dateisysteme (z.B: FAT12 für Disketten) nutzten diese kleinste Blockeinheit 1 zu 1 um jeden Sektor addressieren zu können.

Doch als Festplatten größer als 512 MB wurden, gab es ein Problem: Die alte BIOS Spezifikation sah vor, dass ein Speichermedium nur maximal 1024 Spuren mit 63 Sektoren haben durfte und maximal 255 Platten parallel laufen konnten. So errechnet sich 1024 * 63 * 255 * 512 = 528 482 304 Bytes. Also wurde das BIOS erweitert um mit einer 24-Bit ID Sektoren einzeln zu addressieren. Die Übersetzung auf Spuren und Köpf geschah somit im Hintergrund und wir konnten uns auf Festplatten mit bis zu 8 GB freuen.

Parallel dazu hatte das FAT16 Dateisystem ein internes Limit von 65538 (2^16) Blöcken. Man führte dort sogenannte “Cluster” ein, womit ein “logischer” Datenblock mehrere physische Sektoren zusammenfasste.
Eine Clustergrüße von 512 Bytes konnte also maximal 32 MB pro Partition ansprechen, mit 8 KByte Clustern waren 512 MB addressierbar und mit 32 KByte pro Cluster waren maximal 2 GByte möglich (64 KByte Cluster gab es zwar, waren aber eine Spezialität von NT 4 und unter DOS oder Win 9x nicht möglich).

Eine Datei belegt in diesen Dateisystemen immer ein Vielfaches der Clustergröße. Je größer der Cluster, desto mehr Bytes fallen dem Verlust zum Opfer, wenn die wahren Dateigrößen kein genaues Vielfaches eines Clusters sind.

Mit FAT32 und NTFS pendelten sich Clustergrößen übrigens bei 4 KByte ein und das ist bis heute aus meiner Sicht ein vernünftiger Wert. Im Schnitt verliert man hier also 2 KB pro Datei ans Cluster-Alignment.

Heute … exFAT

Ich kaufe mir also eine neue externe Festplatte mit 4 TB für Backups und stehe vor der Wahl des Dateisystems. Und da denke ich mir:

Probieren wir es mal mit exFAT, denn NTFS ist zu Windows spezifisch und FAT32 mit seinen Limits unpassend.

Ohne viel Nachsehen wird mit exFAT formatiert und der Kopiervorgang startet. Es dauert ewig lange bis alle meine vielen Quellcodes und Dokumente kopiert sind und kurz vor Ende des Jobs bricht mir der Kopiervorgang ab und meldet die Festplatte sei voll.

Wie kann es sein, dass beim Kopieren von 1.8 TB auf eine 3.6 TB Partition die Platte voll ist?

Nun, die unglaubliche Clustergröße von 1 MB erklärt das Problem verdammt gut.

Ja, eh klar. Einzelne Quellcodes sind wenige Kilobytes groß, belegen aber mindestens einen Cluster von 1 MB. Damit belegt jede Datei intern mindestens 1 MB und nicht die paar Kilobytes, die sie wirklich groß ist.

Und wenn das hunderttausende Male passiert (ja ich habe viele Quellcodes), dann benötigt exFAT weit mehr als 1.5 TB um meine 400 GB Codes zu sichern.

Image

Videos und Fotos sind hier statistisch kein Problem. Sie sind in der Regel mehrere Megabytes bis Gigabytes groß, aber im Verhältnis gering in der Anzahl. Damit geht wenig Speicherplatz verloren.

Eine 100 KB Datei produziert mit 1 MB eine Verzehnfachung des Speicherbedarfs, also 900% Zuwachs, während eine 1 GB Video Datei nur maximal ein Tausendstel, also 0.1% Speicherverlust generiert.

Fazit

Ab sofort mag ich exFAT nicht mehr!
Vermutlich kann man die Clustergröße manuell einstellen, aber dass ohne Angaben die Standardeinstellungen 1 MB benutzt wird ist nur für Filme in Ordnung. Jede andere Form von Datenmaterial wird damit exponentiell aufgebläht.

Ich darf jetzt alle Daten wieder zurückkopieren, die Platte neu partitionieren und wieder von Vorne beginnen.

NTFS ist am Ende doch die beste Lösung, weil es kleine Dateien in seiner MFT speichert und somit das Cluster-Verlust-Problem effizient umgeht.

Es gibt auch noch die Alternative alle Verzeichnisse als ZIP oder TAR Dateien abzulegen. Das verringert die Anzahl der Dateien und somit auch den Verlust von Speicher an Clusterenden.


Wenn sich eine triviale Erkenntnis mit Dummheit in der Interpretation paart, dann gibt es in der Regel Kollateralschäden in der Anwendung.
frei zitiert nach A. Van der Bellen
... also dann paaren wir mal eine komplexe Erkenntnis mit Klugheit in der Interpretation!