exFAT

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


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:

  1. ⚓︎ Installation von Programmen

  2. ⚓︎ Ein Terminal öffnen

  3. ⚓︎ Dateisysteme Übersicht

  4. ⚓︎ Root-Rechte erlangen

  5. ⚓︎ FUSE – Dateisystem im Userspace

Inhaltsverzeichnis
  1. Vor- und Nachteile des exFAT Dateisystems
  2. exFAT für Linux
    1. exFAT über FUSE
    2. Kernel-Treiber für exFAT
  3. Installation
    1. Ubuntu ab 20.04
    2. Ubuntu ab 22.04
  4. Verwendung und Kompatibilität
    1. Automatisches Erkennen und Einbinden
    2. Einbinden manuell oder über fstab
    3. Dateinamen
    4. Simulierte Dateirechte und Besitzer
    5. Dateiattribute und Sicherheit
    6. Dual-Boot und Ruhezustand (Hibernate)
    7. Probleme und Lösungen
    8. Freigaben im lokalen Netzwerk
    9. Formatieren und Pflege des Dateisystems
    10. Beispiele
  5. Links

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.

Vor- und Nachteile des exFAT Dateisystems

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:

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)

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:

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:

In der Praxis ergeben sich folgende Regeln:

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:

Die Routinen mkfs.exfat und fsck.exfat werden auch vom generellen Formatierer mkfs und vom Prüfprogramm fsck verwendet:

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.

  1. 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.
  2. 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 
  3. 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.