{{tag>Bionic système partitions}}
====== exFAT======
**[[wpfr>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, et moins sécurisé que les systèmes de fichiers **UNIX**, privilégiés sur Linux ([[:ext4]], [[:BTRFS]]) :
* il ne gère pas de droit d'accès par utilisateur (les fichiers sont accessibles à toute personne ayant accès au support)
* il ne peut pas être redimensionné
* il n'accepte pas les caractères spéciaux dans les noms de fichiers ou de répertoires
* il ne distingue pas majuscules et minuscules dans les noms de fichiers ou de répertoires
* il n'implémente pas de journalisation (il est donc moins fiable)
* il ne propose pas de chiffrement
* il ne défragmente pas à la volée, et peut finir après de nombreux cycles écriture / effacement par être très fragmenté, ce qui réduit les vitesses d'accès.
Jusqu'au 27 août 2019, exFAT était la propriété de **Microsoft**. Des royalties étaient perçues. Les brevets exFAT sont maintenant propriété de //[[wpfr>Open invention network]]// qui en a libéré l'utilisation. L'implémentation Linux est libre.
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.((voir //[[https://www.techzine.eu/news/devops/92986/you-can-now-repair-exfat-drives-with-linux/|you can now repair exfat]]//))
===== Installer le support d'exFAT =====
Par défaut, le support du format exFAT n'est pas installé sur Ubuntu.
Pour que vos clefs USB, disques USB, cartes mémoire et autres périphériques utilisant exFAT soient lus et montés automatiquement dès leur branchement, mais aussi pour pouvoir les (re)formater, il faut [[:tutoriel:comment_installer_un_paquet|installer]] le support de ce format :
* À partir de Ubuntu 22.04 : cliquez ici pour installer **[[apt>exfatprogs]]** (ou au terminal : **sudo apt install exfatprogs**)
* Avant Ubuntu 22.04 : cliquez ici pour installer **[[apt>exfat-utils,exfat-fuse|exfat-utils exfat-fuse]]**
(Rappel : Pour utiliser les liens d'installation ci-dessus, l'utilitaire **apturl** doit être installé. Si ce n'est pas encore le cas : **sudo apt install apturl**)
===== Formater une partition en exFAT =====
==== Le principe ====
Rappel : le support de exFAT doit être installé, ce qui n'est pas le cas par défaut.
Pour pouvoir être formatée, la partition doit exister.
* Concrètement, pour un support **entier** (clé, carte SD, disque), il n'y a rien de spécial à faire.
* Par contre, pour formater un volume ne prenant **pas la totalité** du support physique, il faut d'abord créer ce volume (via [[:GParted]] ou [[:gnome-disk-utility|GNOME Disques]]). Ce second type d'utilisation (formatage d'une partie du support) est moins fréquent.
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|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
Internet indique que si la taille du disque dépasse 2 To, la taille du secteur logique (cluster) ne peut être abaissée en dessous de 512 KiB
==== En mode graphique ====
Pour une **clé USB** dans Gnome, vous pouvez juste utiliser l'explorateur de fichier (nautilus) 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-disk-utility]] ("Disques") ou [[gparted]]. Si vous utilisez Kubuntu, ce sera [[kde_partition_manager|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-disk-utility]]** ("Disques"), au moment du formatage, prenez l'option "autre" qui vous permettra alors d'utiliser l'exFat.
==== En ligne de commande ====
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.
==== Sur des appareils spécifiques ====
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.
===== Opération sur une partition exFat =====
Formater en exFat la partition d'un disque dur classique : c'est possible, même si exFat est surtout conçu pour des supports mobiles à mémoire flash (carte, clé,disque externe).
Réparer une partition : c'est possible sous linux depuis 2022.
Déplacer une partition : possible avec [[gparted]], mais impossible avec [[gnome-disk-utility]].
Redimensionner une partition exFat : 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 : impossible, que ce soit sous linux ou windows (en 2024).
Installer un système d'exploitation (windows ou linux) directement sur une partition exFat : impossible ou formellement déconseillé. C'est un format réservé aux échanges de fichiers.
===== Contrôler la qualité =====
La commande **sudo fsck /dev/xxx** vous permet d'avoirs des informations sur le support xxx utilisé : taille, utilisation, ...
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
===== Contrainte et limites =====
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 "**.**" en __début/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 équivalents. Linux peut avoir dans le même répertoire 2 fichiers avec le même nom __si__ la casse est différente : **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
===== Voir aussi =====
* [[https://www.pcastuces.com/pratique/materiel/fat32_exfat_ntfs/page4.htm|PC astuce]]
* [[https://www.touslesdrivers.com/index.php?v_page=3&v_code=7351|Freebox]]
* [[https://support.wdc.com/knowledgebase/answer.aspx?ID=5521&lang=fr|WDC]]
* [[https://forum.ubuntu-fr.org/viewtopic.php?pid=22726424#p22726424|Un témoignage.]]
* [[https://forum.ubuntu-fr.org/viewtopic.php?id=2084413|Un comparatif]]