exFAT
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 22.04 Jammy Jellyfish
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
exFAT (extensible FAT; "extended" ist zwar eine extrem weit verbreite, aber falsche Lesart, da der Urheber Microsoft "extensible" verwendet), ist ein proprietäres Dateisystem von Microsoft, optimiert für den Einsatz auf Flash-Speichern. Der Hauptvorteil gegenüber dem älteren FAT/FAT32-Dateisystem ist die Unterstützung von Dateien mit mehr als 4 GiB Größe. Von NTFS unterscheidet sich exFAT unter anderem darin, dass es, wie auch FAT/FAT32, keine Verwaltung von Benutzer- und Dateirechten kennt und wegen des fehlendem Journal keine gleiche Datensicherheit bieten kann.
Microsoft empfiehlt für ein Dateisystem FAT/FAT32 wegen schlechter Skalierbarkeit offiziell eine maximale Größe von 32 GiB und begrenzt in seinen Produkten das auch auf diesen Wert. Externe Programme wie z.B. GParted sind durchaus imstande, größere Datenträger bzw. Partitionen mit FAT32 zu formatieren; die maximale Größe eines FAT32-Dateisystems auf einem Datenträger mit einer Blockgröße von 512 Byte endet bei 2 TiB. Trotzdem bleibt bei FAT32 die technisch mögliche Dateigröße auf 4 GiB begrenzt. Daher sehen die Spezifikationen z.B. für die größeren Memory-Stick-XC- und SD-XC-Flashspeicher-Kartentypen die Verwendung des moderneren und performanteren exFAT-Dateisystems vor.
Dieser Artikel ergänzt den generellen Übersichtsartikel zur Verwendung von Windows-Partitionen unter Linux um spezielle Details zu exFAT.
Vor- und Nachteile des exFAT Dateisystems¶
exFAT erlaubt im Gegensatz zu FAT32 Dateien mit mehr als 4 GiB Dateigröße.
exFAT speichert Dateinamen in Unicode mit bis zu 255 Zeichen in der Kodierung UTF-16 (früher: UCS-2). Jedes Zeichen belegt 2 Byte oder in seltenen Fällen 4 Byte. Kurze 8.3-Namen gibt es nicht mehr.
exFAT erlaubt Cluster-Größen bis 32 MiB, daher ist exFAT auch für sehr große Datenträger geeignet.
exFAT verwendet nur eine FAT. Das spart Platz und Verwaltungsaufwand.
exFAT minimiert per Design die notwendigen Schreibzugriffe und ist deshalb für Flash-Speicher besser geeignet als die alten FAT-Modelle.
Im Gegensatz zu NTFS verwaltet exFAT keine Benutzerrechte (weder ACL noch Unix-Dateirechte) und erlaubt keine Datenkompression auf Dateisystem-Ebene.
Auch wenn in exFAT Mechanismen zur Erhöhung der Datensicherheit vorhanden sind, ist es doch nicht einem Dateisystems mit Journal (z.B. NTFS, ext3 oder ext4) gleichzusetzen.
Als allgemeiner Ersatz für FAT/FAT32 ist exFAT jedoch nicht gedacht. Als Dateisystem für interne Festplatten ist exFAT nicht vorgesehen und auch nicht zu empfehlen.
exFAT wird inzwischen von allen gängigen Betriebssystemen unterstützt. Ab Windows 7 und ab Mac OS X Version 10.6.4 ist ein exFAT-Treiber nativ ins jeweilige Betriebssystem integriert. Für Android gibt es als App einen USB-Treiber von Paragon. Ab Android 13 ist ein exFAT-Treiber von Samsung nativ integriert. Auch viele "Nicht-Rechner" (wie z.B. Fernseher, Kameras, Radios) unterstützen heute exFAT (im Gegensatz zu NTFS).
exFAT für Linux¶
Seit dem Jahr 2013 kann exFAT auch in Linux bzw. Ubuntu verwendet werden.
exFAT über FUSE¶
Im Januar 2013 veröffentlichte Andrew Nayenko einen mittels Reverse Engineering erstellten exFAT-Treiber für Linux zusammen mit einer Utility-Sammlung exfat-utils. Aus patentrechtlichen Gründen wurde dieser Treiber jedoch weder in den Kernel integriert noch in die Grundausstattung von Ubuntu übernommen. Er steht aber als über FUSE laufende Version exfat-fuse in der Sektion universe
der Paketquellen nach wie vor zur nachträglichen Installation zur Verfügung.
Die weitere Konfiguration von FUSE-spezifischen Einstellungen (z.B. die Option user_allow_other
) ist im Wiki-Artikel FUSE ausführlich beschrieben.
Kernel-Treiber für exFAT¶
Im Oktober 2018 ist Microsoft dem "Open Invention Network" beigetreten und hat damit zahlreiche Software-Patente für die Mitglieder dieser Gruppe freigegeben. Daraufhin hat Paragon den Quellcode seines exFAT-Treibers veröffentlicht, und dieser wurde vorübergehend in den Linux-Kernel 5.4 übernommen. Doch als dann im März 2020 auch Samsung seinen für Android entwickelten exFAT-Treiber quelloffen freigab, hat Linus Torvalds sofort im Kernel 5.7 den Paragon-Treiber durch diesen ersetzt. Damit steht dieser ab Ubuntu 22.04 ohne Installation zur Verfügung. Zudem wurde auch die Utility-Sammlung (Paket exfat-utils) von Samsung überarbeitet und an den Kernel-Treiber angepasst. Sie kann als exfatprogs aus den Paketquellen installiert werden.
Installation¶
Ubuntu ab 20.04¶
Vor 22.04 benötigt man unbedingt das Paket exfat-fuse (den Dateisystemtreiber) und optional das Paket exfat-utils (Dienstprogramme). Der Treiber muss – am besten zusammen mit der passenden Dienstprogramm-Sammlung – erst über die Paketquellen installiert werden:
exfat-fuse (universe)
exfat-utils (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install exfat-fuse exfat-utils
Oder mit apturl installieren, Link: apt://exfat-fuse,exfat-utils
Ubuntu ab 22.04¶
Seit 22.04 muss für exFAT kein Dateisystemtreiber mehr installiert werden. Für die Dienstprogramme (optional) ersetzt das Paket exfatprogs das bisherige exfat-utils (nötigenfalls muss letzteres vorher deinstalliert werden)
exfatprogs (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install exfatprogs
Oder mit apturl installieren, Link: apt://exfatprogs
Möchte man aus Gründen der Kompatibilität (s.u.) nach wie vor den FUSE-Treiber verwenden, so kann dieser nach wie vor wie oben beschrieben aus den Paketquellen installiert werden
Hinweis:
Auch mit gparted können exFAT-Partitionen nur dann bearbeitet oder formatiert werden, wenn die Dienstprogramm-Sammlung exfat-utils bzw. exfatprogs installiert ist.
Verwendung und Kompatibilität¶
Automatisches Erkennen und Einbinden¶
Beim Erkennen und automatischem Einbinden von exFAT-Dateisystemen verwendet Ubuntu ab Version 22.04 stets den Kernel-Treiber. Außer der besseren Performance wird der Anwender jedoch in diesem Fall kaum einen Unterschied zwischen den Treibern erkennen können. Probleme der Kompatibilität treten hier nicht auf.
Einbinden manuell oder über fstab¶
Falls einer der Treiber vorhanden ist, kann jedes exFAT-Dateisystem mit dem Befehl mount oder mit einem Eintrag in fstab eingebunden werden. In diesem Fall unterscheiden sich die beiden Treiber aber wesentlich:
exfat-fuse¶
Falls kein Kernel-Treiber vorhanden ist, wird dann, wenn kein Dateisystem oder nur exfat
angegeben ist, transparent das Hilfsprogramm mount.exfat-fuse
verwendet, d.h. die Befehle
mount -t exfat … mount -t exfat-fuse … mount.exfat-fuse …
bewirken das gleiche. Entsprechendes gilt für fstab-Einträge.
Das Hilfsprogramm mount.exfat-fuse
kennt folgende spezifischen Mount-Parameter:
uid=
…gid=
…umask=
…fmask=
…dmask=
…ro
noatime
Weil der Treiber über FUSE läuft, werden außerdem alle in der Datei /etc/fuse.conf für FUSE generell vorgenommenen Einstellungen, darunter vor allem auch user_allow_other
und mount_max
, berücksichtigt.
Kernel-Treiber¶
Falls vorhanden und nichts anderes vorgegeben, wird zum Einbinden der Kernel-Treiber verwendet. Dies geschieht dann direkt ohne ein besonderes Hilfsprogramm. Die dabei berücksichtigten Dateisystem-spezifischen Mount-Optionen sind bisher noch nicht in man mount
dokumentiert (Stand Januar 2024). Neben den allgemeinen, vom jeweiligen Dateisystem unabhängigen Optionen sind dies:
umask= …
dmask= …
fmask= …
uid= …
gid= …
allow_utime
iocharset
errors
discard
keep_last_dots
sys_tz
time_offset
zero_size_dir
Die Bedeutung der einzelnen Optionen ist in mount (Abschnitt „Optionen“) sowie mount (Abschnitt „Windows-Dateisysteme“) ausführlich beschrieben.
Hinweis:
Da exFAT kein Journal kennt, ist es hier besonders wichtig, dass Schreibvorgänge niemals unterbrochen oder vorzeitig abgebrochen werden und entfernbare Datenträger immer korrekt ausgehängt werden. Mit der Option "´sync´" lässt sich die Gefahr eines Datenverlusts durch Unachtsamkeit verringern, allerdings eventuell auf Kosten der Lebensdauer des Speichermediums.
Da die beiden Treiber voneinander unabhängig zu verschiedenen Zeitpunkten von verschiedenen Entwicklern verfasst wurden, muss man davon ausgehen, dass sie auf gleichnamige Parameter nicht genau gleich reagieren. Es kann deshalb geschehen, dass Mount-Befehle mit Optionen, die früher von exfat-fuse fehlerfrei ausgeführt werden, nun vom Kernel-Treiber als fehlerhaft zurückgewiesen werden. Besonders fatal kann sich dies bei Einträgen in fstab auswirken, weil dann möglicherweise das System gar nicht mehr bootet.
Wichtig ist, dass auch alle generell für FUSE vorgenommenen Einstellungen vom Kernel-Treiber ignoriert werden.
Hinweis:
Möchte man aus Gründen der Kompatibilität auch bei vorhandenem Kernel-Treiber den Treiber exfat-fuse verwenden, so kann man diesen, falls er installiert ist, direkt mit dem Hilfsprogramm mount.exfat-fuse
ansprechen.
Dateinamen¶
Windows unterscheidet bei Datei- und Ordnernamen nicht zwischen Groß- und Kleinbuchstaben, die Windows-Dateisysteme aber sehr wohl. Man kann in einem exFAT-Dateisystem durchaus wie auf einem nativen Linux-Dateisystem Groß- und Kleinbuchstaben verwenden, wenn man eine Besonderheit beachtet:
Man kann zu keinem Zeitpunkt gleichzeitig Dateinamen verwenden, wenn diese nach Umwandlung aller Buchstaben in Großbuchstaben gleich lauten würden.
Ist bereits in einem Ordner eine Datei XYZ
vorhanden, kann am gleichen Ort keine Datei xyz
erstellt oder dorthin kopiert werden, und man kann XYZ
auch nicht direkt in xyz
umbenennen (auf dem Umweg über einen anderen Dateinamen schon), weder mit dem Dateimanager noch übers Terminal. Im Terminal führt der Versuch zu einer Fehlermeldung:
~$ mv XYZ xyz mv: das Verschieben von 'XYZ' nach 'xyz' ist nicht möglich: Eingabe-/Ausgabefehler
Dies ist bei jedem exFAT-Dateisystem eine normale Restriktion und kein Anzeichen für einen Schaden der Hardware, sondern besagt nur, dass man eine Datei nicht direkt auf ein Synonym ihres Namens umbenennen kann.
Experten-Info:
Von diesem Effekt sind alle Zeichen betroffen, welche im Dateisystem in einer besonderen Tabelle (Up-case table) gespeichert sind. Diese Tabelle kann grundsätzlich zwar auch für jedes Dateisystem individuell gepflegt werden, allerdings fehlt bei Linux dafür ein geeignetes Dienstprogramm. Automatisch und unveränderlich sind aber immer die ASCII-Zeichen a-z/A-Z
dieser Einschränkung unterworfen.
Anders als bei NTFS-3G bestehen bei exFAT auch in Linux für Sonderzeichen in Dateinamen die in Windows gültigen Einschränkungen: Unzulässig sind folgende Zeichen: Alle Steuerzeichen (ASCII 0-31) und " * : < > ? / \ |
In einem exFAT-Dateisystem gibt es nur die Dateitypen „reguläre Datei“ und „Verzeichnis“, und jede Datei hat genau einen Namen. Feste und Symbolische Verknüpfungen (Hardlinks und Symlinks) sowie weitere von anderen Dateisystemen bekannte Dateitypen werden von exFAT nicht unterstützt.
Experten-Info:
In Linux-Dateisystemen sind die Zeichen . und .. spezielle Hardlinks. Diese werden in exFAT simuliert, sodass diese Zeichen auch dort in gleicher Weise verwendbar und deshalb auch als Dateinamen verboten sind.
Wenn Dateinamen auch unter Windows problemlos verwendbar sein sollen, dann empfiehlt es sich, ihre Länge für den ganzen Pfad auf 255 Zeichen zu beschränken.
Simulierte Dateirechte und Besitzer¶
In exFAT ist, wie auch in FAT32, keine Verwaltung von Dateirechten oder Besitzern möglich. Damit sich eingebundene exFAT-Dateisysteme in Linux-Dateistrukturen einfügen, werden für diese dann beim Einbinden für die Dauer der Einbindung temporäre Dateirechte und Besitzer simuliert. Auch alle anschließend im exFAT Dateisystem neu angelegten bzw. dorthin kopierten oder verschobenen Ordner und Dateien erhalten dann dort temporär diese Metadaten. Nachträgliche Veränderungen derselben mit dem Dateimanager oder den Befehlen chmod und chown sind nicht möglich. Alle derart simulierten Metadaten werden aber nicht ins eingebundene Dateisystem eingetragen, d.h. sie gehen beim Aushängen wieder verloren und können beim erneuten Einhängen in die gleiche oder eine andere Dateistruktur wieder anders sein.
Die Verhältnisse beim Einhängen bestimmen endgültig Besitzer, Gruppe und Dateirechte. Wenn über die Optionen uid, gid, dmask, fmask
und umask
nichts explizit festgelegt wird, gilt:
Besitzer aller Dateien wird der Besitzer des einbindenden Prozesses.
Die Gruppe entspricht der primären Gruppe des Besitzers.
Die Dateirechte berechnen sich aus dem Wert
777
und dem aktuellen Wert für UMASK.
In der Praxis ergeben sich folgende Regeln:
Beim automatischen Einhängen einer exFAT-Partition (Hotplug oder Dateimanager) gelten folgende Standard-Einstellungen: Besitzer ist der jeweils eingeloggte Benutzer. Nur dieser hat vollen Zugriff, Gruppe und Andere haben kein Schreibrecht.
Beim Einhängen mit mount-Befehl oder fstab-Eintrag lassen sich mit den Optionen
uid, gid, dmask, fmask
undumask
beliebige UNIX-Dateirechte simulieren.Zum manuellen Einbinden mit Schreibrechten kann man so vorgehen:
sudo mount -o umask=000 QUELLE /mnt
Damit wird zwar root zum temporären Besitzer aller Dateien und Ordner, aber trotzdem kann jeder in dieses Dateisystem schreiben, weil ja „Andere“ zum Schreiben berechtigt sind.
Dateiattribute und Sicherheit¶
Die Sicherheit der Daten ist bei allen internen und externen Datenträgern, die abwechselnd in verschiedenen Betriebssystemen verwendet werden, ein heikles Thema. Ganz besonders gilt dies für Dateisysteme, die wie FAT32 und exFAT keine Verwaltung von Benutzerrechten erlauben.
Windows kennt unabhängig von den Benutzerrechten als zusätzlichen Schutz noch die vier allgemeinen Dateiattribute schreibgeschützt, System, Archiv und versteckt. Diese Attribute sind auch in exFAT gültig. Linux nimmt sie aber nicht zur Kenntnis; Dateien und Ordner mit diesen Windows-Attributen werden in Linux gleichermaßen angezeigt und können auch uneingeschränkt bearbeitet oder gelöscht werden. Diese vier bei Windows typischen Dateiattribute können unter Ubuntu weder angezeigt noch bearbeitet werden.
Experten-Info:
Ab der Version 1.4.0 enthält exfat-utils jedoch das Programm exfatattrib
. Diese Version ist über die offiziellen Paketquellen von Ubuntu nicht verfügbar; man muss es von der Projektseite als Quellcode herunterladen und selbst compilieren.
Die noch differenzierteren Attribute unter Linux sind vom Dateisystem abhängig und werden von exFAT nicht unterstützt.
Dual-Boot und Ruhezustand (Hibernate)¶
Wird in einem Dual-Boot-System ein Speichermedium abwechselnd in Linux und Windows verwendet, so muss unbedingt darauf geachtet werden, dass der Ruhezustand (Hibernate) und in Windows auch die Schnellstart-Funktion immer ausgeschaltet sind, da sonst Datenverlust und Beschädigung des Datensystems drohen. Siehe dazu auch Hinweis und Warnung im Artikel NTFS-3G. Einen sich nötigenfalls automatisch einschaltenden Schreibschutz wie bei NTFS-3G bietet exFAT leider nicht.
Achtung!
Windows schaltet bei "großen" Updates gelegentlich die Schnellstart-Funktion selbständig wieder ein. Deshalb muss in Dual-Boot-Systemen die Einstellung regelmäßig überprüft werden!
Probleme und Lösungen¶
Zeitstempel¶
Beim Kopieren oder Verschieben von Ordnern und Dateien zwischen Linux-Dateisystemen (z.B. ext3, ext4) und dem Dateisystem exFAT kann man feststellen, dass nicht alle Zeitstempel immer unverändert übertragen werden. Bei Backup- und Kopierprogrammen kann dies zu Problemen führen.
Begründung¶
Zwischen Linux- und Windows-Dateisystemen gibt es grundsätzliche Unterschiede in der Definition und Handhabung der Zeitstempel. Außerdem unterscheiden sich die Dateisysteme FAT32, NTFS und exFAT auch untereinander.
Lösung¶
Es gibt hier keine rundum befriedigende Lösung. Bei den üblichen Backup-Programmen wie rsync oder FreeFileSync lassen sich die Kriterien einstellen, nach denen Dateien unterschieden werden; je nach Programm muss man evtl. auf Datum und Uhrzeit als Unterscheidungsmerkmal verzichten.
Freigaben im lokalen Netzwerk¶
Ordner und Dateien in exFAT-Dateisystemen können im lokalen Netzwerk freigegeben werden. Dabei sind jedoch Fehlfunktionen möglich.
Samba behandelt die simulierten Dateirechte gleich wie echte UNIX-Dateirechte. Diese werden dann noch ggf. durch die jeweiligen Samba-Einstellungen weiter eingeschränkt.
NFS ist für Dateisysteme mit benutzerspezifischen UNIX-Dateirechten und einem zu Linux-Dateisystemen kompatiblen internen Aufbau konzipiert. Bei der Freigabe von Ordnern und Dateien in FAT32 und exFAT-Dateisystemen mittels NFS muss deshalb mit Problemen gerechnet werden.
Formatieren und Pflege des Dateisystems¶
Hierfür ist das Paket exfat-utils (Ubuntu 20.04) bzw. exfatprogs (ab Ubuntu 22.04) nötig.
Die Dienstprogramm-Sammlung exfatprogs wird noch ständig weiter entwickelt. Die jeweils aktuelle Version kann von der Projektseite heruntergeladen werden.
Die aktuelle Version exfatprogs 1.2.2-1 (Januar 2024) enthält folgende Routinen:
mkfs.exfat: Erstellen eines exFAT-Dateisystems
fsck.exfat: Überprüfung und Reparatur eines exFAT-Dateisystems
tune.exfat: Anzeigen von Strukturdaten und Bearbeiten des Datenträger-Labels
dump.exfat: Anzeigen von Informationen über das exFAT-Dateisystem auf der Festplatte
exfat2img: Auslesen von exFAT-Metadaten
Die Routinen mkfs.exfat
und fsck.exfat
werden auch vom generellen Formatierer mkfs
und vom Prüfprogramm fsck
verwendet:
mkfs -t exfat ...
(siehe Formatieren)fsck ...
(siehe Dateisystemcheck)
Beispiele¶
Die ersten beiden Beispiele sind für "Nicht-Computer" (z.B. USB an Radio, Fernseher, Kameras usw.) ggf. ungeeignet, da diese meist eine MBR-Partitionierung und eine bestimmte Clustergröße verlangen. Sinnvoll sind sie aber für eine externe Festplatte, auf der man wenige, sehr große Dateien unterbringen möchte.
Ein Flash-Speicher unter /dev/sdd1 soll als exFAT formatiert werden [3][4]:
sudo mkfs -t exfat /dev/sdd1
mkexfatfs 1.0.1 Creating... done. Flushing... done. File system created successfully.
Oder man schreibt das Dateisystem nicht in die erste Partition, sondern direkt auf das Gerät, vergibt den Datenträger-Namen "SD-Karte" und setzt die Clustergröße auf 1 MiB (
-s 2048
) hoch (Default ist 4k =-s 8
):sudo mkfs.exfat -n "SD-Karte" -s 2048 /dev/sdd
Das ausgehängte Dateisystem kann mit
fsck
überprüft werden:sudo fsck /dev/sdd
fsck from util-linux 2.20.1 exfatfsck 1.0.1 Checking file system on /dev/sdd. File system version 1.0 Sector size 512 bytes Cluster size 1 MB Volume size 932 GB Used space 9944 KB Available space 932 GB Totally 0 directories and 0 files. File system checking finished. No errors found.
Hier kann man auch sehen, dass die Clustergröße 1 MiB ist.
Links¶
NTFS in Linux verwenden: In NTFS gelten andere Regeln als in exFAT.
Microsoft exFAT Dateisystemspezifikation 🇩🇪 bzw. Microsoft exFAT file system specification 🇺🇸 – (Man sollte diese automatisch übersetzte Seite im Original lesen, da manche Begriffe schlecht übersetzt sind.)