exFAT (Extended File Allocation Table) est un système de fichiers créé en 2006 par Microsoft et conçu essentiellement pour les mémoires flash (comme les clés USB ou les cartes SD).
Il est une évolution plus moderne de FAT32 dont il permet de dépasser les limites : 16 exaoctets pour la taille maximale des fichiers (contre 4 Go pour FAT32), 128 pétaoctets pour la taille maximale des partitions (contre 2 To). Il est donc mieux adapté au stockage de gros fichiers : ISO, films…
Il est particulièrement utilisé pour partager des fichiers entre systèmes hétérogènes, car il a l'avantage d'être compatible avec de nombreux appareils : TV connectées, media center, Windows, macOS, Linux, appareils photos…
exFAT est toutefois plus limité, moins fiable, moins performant et moins sécurisé que les systèmes de fichiers UNIX, tels que ext4 et Btrfs, privilégiés sur Linux (lui-même étant basé sur UNIX) :
Jusqu'au 27 août 2019, exFAT était la propriété de Microsoft qui percevait des royalties lors de son implémentation. Microsoft a ensuite transféré la propriété de ses brevets à Open invention network qui en a libéré l'utilisation. L'implémentation Linux est donc désormais libre.
Le support du format exFAT est installé par défaut sur Ubuntu à partir de la version Plucky 25.04.
Vos clefs USB, disques USB, cartes mémoire et autres périphériques utilisant exFAT sont donc lus et montés automatiquement dès leur branchement, et il est possible de les (re)formater.
Pour les versions précédentes d'Ubuntu il faut installer le support de ce format :
Rappel : le support de exFAT doit être installé, ce qui n'est pas le cas par défaut avant la 25.04.
Pour une clé ou un disque dur USB dans Gnome, le plus simple est d'utiliser l'explorateur de fichier (nautilus). Clic droit sur la clé/DD > "formater". Restera à choisir exFAT dans les options proposées.
Cette option devrait vous suffire, mais à défaut, vous avez plus d'informations ci-dessous.
Pour pouvoir être formatée, la partition doit exister.
Le formatage découpe l'espace physique du support (clé USB, disque USB, carte SD) en secteurs logiques (clusters) stockant des données de fichiers. Même si le fichier ne fait qu'un seul caractère, un secteur logique entier est utilisé. Par exemple, le secteur logique d'une partition ext4 occupe par défaut 512 octets (quelle que soit la taille de la partition).
Ce n'est pas le cas pour le formatage en exFAT, la taille des secteurs logiques dépend de la taille de la partition. Plus la partition est grande, plus la taille des secteurs par défaut est importante (mais c'est modifiable au formatage). Si les fichiers à sauvegarder sont majoritairement très petits, on perd de la place. Il peut donc être utile de baisser la taille des secteurs (clusters) sous peine de perdre une grande quantité d'espace disque. La valeur minimale est de 1024 octets (1 ko).
Voici le tableau par défaut (donc modifiable) des clusters (secteurs) en fonction des tailles de partition / support (selon man mkfs.exfat).
Taille mini/maxi taille du cluster Taille max de la clé / disque / secteur des fichiers ────────────────────────────────────────────────────── ≤8 MiB 8 KiB 8 KiB >8 MiB ≤64 MiB 16 KiB 16 KiB >64 MiB ≤256 MiB 16 KiB 32 KiB >256 MiB ≤1 GiB 16 KiB 64 KiB >1 GiB ≤2 GiB 32 KiB 64 KiB >2 GiB ≤32 GiB 32 KiB 4 MiB >32 GiB ≤128 GiB 128 KiB 16 MiB >128 GiB ≤512 GiB 256 KiB 32 MiB >512 GiB ≤2 TiB 512 KiB 64 MiB
Pour une clé USB dans Gnome, vous pouvez juste utiliser l'explorateur de fichier GNOME Fichiers et y faire un clic droit sur la clé > "formater". Restera à choisir exFAT dans les options proposées.
Pour plus d'options, vous pouvez passer par un logiciel dédié. Il en existe 2 principaux dans Ubuntu : GNOME Disques et GParted. Si vous utilisez Kubuntu, ce sera plutôt KDE Partition Manager.
Avec ces logiciels, procédez de manière habituelle pour formater votre clé, disque externe ou carte mémoire au format exFAT.
Par exemple, avec GNOME Disques, au moment du formatage, choisissez l'option "Autre" qui vous permettra alors d'utiliser l'exFAT.
sudo mkexfatfs -n nom_partition /dev/sdXN
ou
mkfs.exfat -n nom_partition /dev/sdXN
en remplaçant sans vous tromper X et N par les bonnes valeurs du support à formater (par exemple sdc2). En cas d'erreur vous formaterez le mauvais support et perdrez les données qui y sont stockées.
-n nom_partition est optionnel et sert à donner un nom ("étiquette") à votre volume (partition) exFAT. Le nom est limité à 15 caractères et il faut éviter les espaces, les caractères accentués, cédilles et autres signes diacritiques.
Autres options (à n'utiliser que si vous comprenez ce que vous faite) :
-c Nk Permet de forcer la taille du cluster à une autre valeur que celle prévue au tableau ci-dessus. Utile en cas de multitudes de petits fichiers.
–pack-bitmap : Met la description en fin de zone allouée. C’est plus performant mais contraire à la norme.
-i VOL_ID : Définit l’ID du volume à la valeur spécifiée dans VOL_ID. Il s’agit d’un nombre hexadécimal de 32 bits. S’il n’est pas défini, un ID basé sur l’heure actuelle est défini.
-p SECTOR : Spécifie le premier secteur de la première partition du disque. Ce paramètre est facultatif et la valeur par défaut est zéro.
-s SECTORS : Définit le nombre de secteurs physiques par grappe d’allocation. Il doit s’agir d’une puissance de deux, comme 1, 2, 4, 8, etc. Facultatif.
Pour une carte-mémoire que vous destinez à votre caméscope ou à votre appareil photo, le mieux (si la fonctionnalité existe), et de loin, est de procéder depuis l'option intégrée dans ces appareils. Le format est alors contrôlé par le fabricant de l'appareil utilisateur, ce qui garantit une compatibilité maximale.
Formater en exFAT la partition d'un disque dur classique est possible, même si exFAT est surtout conçu pour des supports mobiles à mémoire flash (carte, clé,disque externe).
Jusqu'en 2022, Linux savait lire ou créer une partition exFAT, mais pas la réparer. Depuis 2022 et la version 1.2 de exfatprogs, une partition exFAT peut être lue, créée et réparée.1)
Déplacer une partition est possible avec GParted, mais impossible avec GNOME Disques.
Redimensionner une partition exFAT est impossible, que ce soit sous Linux ou Windows. Il faut alors supprimer et recréer la partition à la bonne taille.
Défragmenter une partition exFAT est impossible, que ce soit sous Linux ou Windows (en 2024).
Les supports prévus pour ce système de fichiers ne sont pas sensibles aux effets de la fragmentation.
Installer un système d'exploitation (Windows ou Linux) directement sur une partition exFAT est impossible ou formellement déconseillé. Ce format est réservé aux échanges de fichiers.
Monter un système de fichier signifie le rendre accessible à n'importe quelle application sur votre ordinateur.
Normalement, les supports externes se montent automatiquement lors de leurs connexions à votre PC, il n'y a alors rien à faire. Cependant des cas particuliers peuvent se poser et on peut avoir besoin de procéder manuellement :
/etc/fstab :/dev/disk/by-uuid/77FE-F707 /media/fred/film/ exfat defaults,rw,uid=1000,gid=1000,umask=0002 0 1
Le point important est defaults,rw,uid=1000,gid=1000,umask=0002 qui permets un accès en lecture / écriture. Un simple defaults passerait le support en lecture seule. Un disque exFAT étant généralement mobile, il est possible qu'à certains démarrages il ne soit pas branché, bloquant ainsi le démarrage du PC. Si le risque existe, il faut ajouter l'option nofail, qui permettra le démarrage (mais sans le montage, le disque étant déconnecté) ⇒ nofail,defaults,rw,uid=1000,gid=1000,umask=0002
sudo mount UUID=77FE-F707 /media/chris/film_music/ -o defaults,rw,uid=1000,gid=1000,umask=0002
Sans l'option -o (et la valeur qui suit), le support sera en lecture seule.
La commande sudo fsck /dev/xxx vous permet d'avoirs des informations sur le support xxx utilisé : taille, utilisation, etc.
sudo fsck /dev/sdb17 fsck de util-linux 2.34 exfatfsck 1.3.0 Checking file system on /dev/sdb17. File system version 1.0 Sector size 512 bytes Cluster size 128 KB Volume size 39 GB Used space 1806 KB Available space 39 GB Totally 0 directories and 0 files
sudo fsck /dev/sdc1 fsck de util-linux 2.37.2 exfatprogs version : 1.1.3 /dev/sdc1: clean. directories 86, files 1683
ExFAT ne prend pas en charge les liens symboliques et les fichiers cachés.
Les noms de répertoires et de fichiers ne peuvent contenir ces caractères spéciaux / \ | : * ? " < >.
Les copies vers un disque / partition exFAT échoueront donc pour les fichiers contenant ces caractères, sauf correction.
Les noms de fichiers et répertoires ne peuvent pas non plus avoir de caractère espace ou point . en début ou fin de nom (mais ils peuvent en avoir à l'intérieur).
Enfin, ces noms sont insensibles à la casse : les caractères minuscules et majuscules sont considérés comme équivalents. Hors Linux peut avoir dans le même répertoire 2 fichiers différents ayant les mêmes caractères et une casse différente dans leurs noms : pas exFAT.
Exemples :
touch '/' ; touch '\' ; touch ':' ; touch '?' ; touch '*' ; touch '<' ; touch '>' ; touch '"' ; touch ' b C ' ; touch ' B c ' ; ls -ls touch: initialisation des dates de '/': Permission non accordée touch: initialisation des dates de '\': Aucun fichier ou dossier de ce type touch: initialisation des dates de ':': Aucun fichier ou dossier de ce type touch: initialisation des dates de '?': Aucun fichier ou dossier de ce type touch: initialisation des dates de '*': Aucun fichier ou dossier de ce type touch: initialisation des dates de '<': Aucun fichier ou dossier de ce type touch: initialisation des dates de '>': Aucun fichier ou dossier de ce type touch: initialisation des dates de '"': Aucun fichier ou dossier de ce type total 0 0 -rwxr-xr-x 1 a a 0 oct. 26 12:25 ' b C '
Il est possible d'effectuer un contrôle préventif de la qualité des répertoires à transférer.
rm -f /tmp/TriEXFAT.txt ## Recherche des liens symboliques exclus find $HOME/Test $HOME/Documents $HOME/Images $HOME/Musique $HOME/Vidéos $HOME/Téléchargements -type l -name "*" > /tmp/ProblèmesEXFAT.txt find $HOME/Test $HOME/Documents $HOME/Images $HOME/Musique $HOME/Vidéos $HOME/Téléchargements -type f -name "*" -print0 | while IFS='' read -r -d '' file; do ## Test des caractères spéciaux. if [[ "$(echo "'$file'" | tr '><"|?*:\\' '!!!!!!!!' )" != "'$file'" ]]; then echo "'$file'" >> /tmp/ProblèmesEXFAT.txt ;fi # Test des fichiers cachés. if [ "$(echo $(basename "$file")|cut -c1)" = "." ]; then echo "'$file'" >> /tmp/ProblèmesEXFAT.txt ;fi # Test des fichiers en double echo "'$file'" $(echo "'$file'" | tr '[:lower:]' '[:upper:]') >> /tmp/TriEXFAT.txt done sort -f /tmp/TriEXFAT.txt | uniq -f1 -D>>/tmp/ProblèmesEXFAT.txt echo Liste des fichiers à contrôler; cat /tmp/ProblèmesEXFAT.txt