Nie wieder exFAT
« | 13 Jun 2020 | »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 adressieren 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
adressieren. 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 adressierbar 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 ist 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.
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 Cluster-Enden.