Howtos GNU/Linux .: kozaki :. Howtos GNU/Linux

Support des systèmes de fichiers FAT & NTFS sous Linux

Pré-requis

  • Connaitre le partitionnement de ses disques et périphériques formatés en FAT ou NTFS (nombre et taille des partitions) ;
  • Disposer d'un système Linux installé ou Live.
    Pour toute opération sur une partition vous pouvez jettez un oeil à ces articles :
      - LiveCDs permettant le partitionnement, le déplacement de partitions... : GParted, PartedMagic, SystemRescue & TRK ;
      - Logiciels QParted ou Diskdrake.
  • Activer le DMA :
    C'est fait automatiquement dans la majorité des cas. Mais si vous constatez une lenteur importante, il faut vérifier si le mode dma est bien activé. Voici comment l’activer sur le disque hda (passer en root) :
    hdparm -d1 /dev/hda (entrée).
    Pour l’activer sur un second disque, même commande en remplaçant "hda" par "hdb".
    Après ça, le temps de copie est divisé par 4 sur mon PC : environ 300 Mo au lieu de 80 Mo par minute.
    Détails sur le guide optimisation disques avec hdparm.

Conseillé

On peut toujours apprendre en pratiquant. Mais lorsqu'il s'agit de manipuler des outils susceptibles d'accueillir --ou d'effacer-- des centaines de Giga-Octets de données, mieux vaut savoir le B-a-B-a sur les notions suivantes :

  • système de fichiers : (file system ou filesystem en anglais) ou système de gestion de fichiers (SGF) est une structure de données permettant de stocker les informations et de les organiser dans des fichiers sur ce que l'on appelle des mémoires secondaires (disque dur, disquette, CD-ROM, clé USB, disques SSD, etc.).
  • formater un disque (une partition) = lui attribuer un système de fichiers afin de le rendre visible et exploitable par un système informatique. Autrement dit, lui indiquer sous quelle forme les données seront lisibles, écrites et mises en forme. Souvent employé comme synonyme d'effacer : formater une partition remplace la structure des données par une autre (rendant les anciennes données apparemment inaccessibles, bien qu'elles soient toujours présentes sur le disque).

vfat ou ext3 pour un disque intermédiaire Linux/Windows ?

Si vous synchronisez un répertoire entre une machine Windows et une machine Linux vous pourriez être tenté d'installer sur la partition du disque intermédiaire, clé USB ou disque dur externe, le système de fichiers vfat : chacun ou presque sait qu'il est reconnaissable directement par les deux systèmes. Il est bon de savoir que Windows peut très bien avoir accès à l'excellent système de fichier EXT2/3, en lecture et écriture.

Limitations de FAT

vfat ne reconnaît pas les permissions, ne distingue pas les majuscules des minuscules dans les noms de fichiers, et ne permet pas de traiter correctement les noms de fichiers ou répertoires contenant certains caractères particuliers (\, /, * etc.). Enfin, il n'est pas conseillé d'utiliser l'encodage universel UTF-8 dessus.

Conséquence : si vous utilisez un logiciel de synchronisation, il vous faudra désactiver la synchronisation des permissions et la distinction de casse. Exemple pour Unison.

Comment utiliser EXT2/3 par Windows

Il est maintenant possible de rendre les machines Windows 2000, XP et Vista capables de reconnaître le format linuxien ext3 (ou ext2).

Il suffit pour cela d'installer sur la machine Windows le pilote EXT2IFS ou Ext2fsd (Ext2fsd v0.31a supporte Windows 2000, XP et Vista, 32 ou 64-bit !). Dans ce cas, il devient possible de gérer les permissions, majuscules/minuscules et l'Unicode (et donc inutile d'utiliser ignorecase et perms dans le profil situé sur la machine Linux).
Il est alors possible d'avoir aussi un système de fichiers ext2 ou ext3 sur votre disque intermédiaire (clé USB ou partition de disque dur externe) : et cela fonctionnera plutôt mieux, bien sûr...

Précaution : si vous utilisez EXT2IFS ou Ext2fsd sous Windows, évitez de monter les partitions racine (ou système, ou sensibles) de votre OS Linux sous Windows de cette façon, afin d'éviter qu'elles ne soient à la merci des failles de Windows.

Créer, lire et écrire une partition FAT 16/32 (Windows)

FAT (abbr anglais de file allocation table = table d'allocation de fichiers), est un système de fichiers conçu par Bill Gates et Marc McDonald pour le Microsoft Disk BASIC (et des disquettes de 160 Ko), qui a ensuite connu des évolutions (notamment VFAT) étendant ses possibilités (article FAT sur Wikipedia). VFAT supporte les nom de fichiers longs (jusqu'à 255 caractères), et permet d'utiliser les lettres minuscules et les caractères unicode dans les noms de fichiers. Les caractères suivant sont interdits : /, \, ?, *, " car ils ont une signification dans la description de chemin en DOS.

Création du système de fichiers FAT

Formater une partition en FAT16 ou FAT32 est simple sous Linux, et aussi beaucoup plus rapide et souple que sous Wiwi XP/2000. Créer une partition de quelques Go prend une paire de secondes.

Formater en ligne de commande

Plus souple et rapide si vous connaissez un peu cette dernière.

la commande mkdosfs, contenue dans le paquet dosfstools, est nécessaire pour formater une partition en FAT. Vous pouvez aussi employer la commande mkfs.vfat.

formater (créer un système de fichiers) FAT (passez en root) :
mkdosfs -n [Nom] -F 16 /dev/[partition]
-n permet de donner un nom à la partition FAT.
-F suivi de 12, 16 ou 32 permet de choisir la variante de FAT (FAT 16 sous 2 Go, et FAT 32 au-delà).
/dev/[disque_partition] : la partition à formater.

Formater graphiquement

Utilisez les logiciels gparted, qparted ou l'outil graphique incorporé à votre distribution, comme DiskDrake dans le Centre de contrôle Mandriva.

Monter la partition FAT

Si votre partition FAT n'est pas montée comme vous le souhaitez, vous pouvez la monter manuellement en contrôlant les détails :
mount /dev/hda1 /mnt/win -t vfat -o rw (créez le répertoire /mnt/win s'il n'existe pas).
-t vfat indique que la partition est formatée en FAT (16/32).
-o rw avec l'option Read Write (lecture et écriture).

Si ça fonctionne comme vous voulez, rajoutez la ligne suivante dans /etc/fstab :
/dev/hda1   /mnt/win vfat   noauto,rw,user, umask=0   0 0
Un simple mount /mnt/win suffira ensuite.

Si les caractères "spéciaux" (accents, etc...) n'apparaissent pas bien sur vos partitions, ajoutez l'option décrite ci-dessous Encodage des partitions vFAT & NTFS sous Linux.

Vérifier et réparer une partition VFAT

dosfsck - vérifie et répare des systèmes de fichiers MS-DOS (partitions FAT). fsck.vfat est un alias (càd. que c'est le même programe, avec les mêmes options).

la page de manuel est courte, aussi n'hésitez pas à y jetter un oeil avant de lancer la commande.
Exemple, sur une carte MicroSD formatée en FAT16 (c'est long !) :
# dosfsck -lrtv /dev/sdd1

dosfsck 2.11, 12 Mar 2005, FAT32, LFN 
Checking we can access the last sector of the filesystem
Boot sector contents: 
System ID "mkdosfs"
Media byte 0xf8 (hard disk)
       512 bytes per logical sector
     32768 bytes per cluster 
         1 reserved sector 
First FAT starts at byte 512 (sector 1)
         2 FATs, 16 bit entries       
    120832 bytes per FAT (= 236 sectors)
Root directory starts at byte 242176 (sector 473)
       512 root directory entries              
Data area starts at byte 258560 (sector 505)
     60266 data clusters (1974796288 bytes)
62 sectors/track, 61 heads           
         0 hidden sectors      
   3857578 sectors total 
Checking file /...
(...)
Checking for unused clusters.
/dev/sdd1: 1175 files, 12839/60266 clusters

Système de fichiers NTFS sous Linux

État des lieux du support en janvier 2008 (merci Wattazoum) :

  • Le pilote ntfs par défaut (intégré au noyau Linux) permet lecture & écriture de fichiers existants.
    Monter une partition NTFS sur Linux avec le pilote standard :
    - en ligne de commande :
    (créer le point de montage s'il n'existe pas : mkdir -p /mnt/windows)
    mount /dev/hda1 /mnt/windows -t ntfs -o umask=0002,nls=utf8
    - automatiquement en éditant ou ajoutant dans /etc/fstab :
    /dev/hda1 /mnt/windows ntfs ro,umask=0002,nls=utf8
  • Le pilote FUSE : toutes les opérations basiques sur le système de fichier NTFS.
    Le pilote original de ntfsprogs (voir ci-dessous).
    Monter une partition NTFS avec FUSE sur Linux :
    - en ligne de commande :
    (mkdir -p /mnt/windows)
    ntfsmount /dev/hda1 /mnt/windows -o umask=0002,silent
    - automatiquement en éditant ou en ajoutant dans /etc/fstab :
    /dev/hda1 /mnt/windows ntfs-fuse umask=0002,silent,locale=utf8
  • Le pilote ntfs-3g (ntfsprogs) :
    Pilote pour les systèmes de fichiers NTFS (MS Windows Vista, XP, 2000 et Server 2003), support lecture & écriture, à l'exclusion : des fichiers compressés et encryptés, du changement de propriétaire des fichiers et des droits d'accés.
    Guide et configuration ntfs-3g sous Ubuntu (/etc/fstab parfaitement utilisable pour autres distros).
    Outil de configuration NTFS (graphique) sous Mandriva
  • Enfin, ntfsmount vient compléter le pilote read/write ntfs-3g depuis ntfsprogs v-2.0.0 et + (sorti fin septembre 2007).
    Userspace NTFS driver. Support complet en lecture & écriture, libntfs peut lire des fichiers encryptés et ntfsresize ainsi que tous les autres outils supportent Windows Vista®.

Cloner, redimensionner des partitions NTFS

Le Projet Linux NTFS fait celà très bien --je l'ai utilisé sur des Windows variés dont XP 32 sp1/2/3 à plusieurs reprises.

Détail ici : Sauvegarder, déplacer, redimensionner & restaurer Windows® (disques NTFS).

Liens / sources :

NTFS : Récupérer sous linux des données effacées

  • Le labo Linux explique simplement comment faire, avec ntfs-progs justement.
  • Une distribution spécialisée dans la sauvegarde, restauration, clonage eet réinitialisation des mots de passe Windows telle que TRK (Trinity Rescue Kit) permet entre autres de récupérer des données effacées sur des partitions FAT ou NTFS.

Options de montage avancées FAT & NTFS

Niveau : intermédiaire. En cas de doute voyez ces excellentes pages :

Encodage des partitions vFAT & NTFS

Montées sans information concernant les jeux de caractères utilisés, les noms de fichiers avec des caractères "spéciaux" (accents, etc...) n'apparaissent pas bien. Voici une solution :

  • Si vous montez une partition vfat, ajoutez les options suivantes sur la ligne concernant dans le /etc/fstab :
    codepage=850, iocharset=iso8859-15 (ou pour l'Unicode : iocharset=utf8)
  • Si vous montez une partition NTFS, ajoutez les options :
    nls=cp850, iocharset=iso8859-15 (ou pour l'Unicode : iocharset=utf8)

Options de montage optimisées pour les périphériques amovibles FAT(32)

Ou comment obtenir le meilleur compromis vitesse / sécurité pour le montage des périphériques externes ? Avec les options flush & dirsync.

Synchroniser les écritures sur ses périphériques amovibles permet de pouvoir retirer "brusquement" (sans avoir démonté) son périphérique, manuellement ou par accident (ex : électrique) en étant raisonnablement sûr que les données y sont néamoins toutes écrites (cf la commande && sync dans les tests ci-dessous).
Plus de détails sur les pages lea-linux, trustonme indiquées ci-dessus et avec man mount.

  • flush est une nouvelle option (disponible à partir du kernel 2.6.19) pour les périphériques externes usb formattés en vfat. Elle vide le cache écriture à la fin de l'opération (écriture, suppression etc.). Selon le kernel changelog :
    "FAT: Add "-o flush" mount option for fat for removable media devices (USB flash-based memory devices, MP3 players). Mounting with -o flush tells FAT to write things to disk as quickly as possible. It is like -o sync, but much faster (and not as safe). Think of it like a fast "async" mount"
    Celà signifie que ça fonctionne comme async + la commande automatic sync à la fin du processus de copie. Aucun fichier ne demeure dans le cache, aussi on peut dé-plugger le media sans risques (même sans umount) :D Merci à Lanrat pour l'explication sur le forum Arch linux :)
    Note : Fonctionne TB sous Mandriva dès la version 2007.1 (fonctionnalité backportée sur le noyau 2.6.17.13).
  • dirsync.
    All directory updates within the file system should be done synchronously (man mount).
    "J'utilise l'option dirsync dans la commande de montage du disque externe depuis longtemps. Quand tout semble correct mais fonctionne mal, elle a réussi à chaque fois, en particulier pour le lecteur de disquettes." (merci à Zeb_66 sur le forum Mandriva).

Performances comparées de systèmes de fichiers FAT et ext sous Linux

Benchmark de périphériques (disques 2.5" et 3.5", clés USB, cartes Flash) formatés en VFAT, ext2 et ext3 ; comparaison de différentes options de montage : par défaut vs montage avec flush, dirsync & noatime.

Résultats du benchmark des performances en écriture & lecture de partitions FAT16/32 sur divers périphériques, en utilisant les options de montage suivantes dans /etc/fstab :

  1. Options de montage par défaut & sync :
    umask=0,users,sync,codepage=850,iocharset=utf8
  2. Avec flush, dirsync & noatime :
    rw,users,noauto,noexec,nodev,dirsync,noatime,flush,dmask=000,fmask=111,codepage=850,iocharset=iso8859-15
  3. Avec flush & noatime :
    rw,users,noauto,noexec,nodev,dirsync,noatime,flush,dmask=000,fmask=111,codepage=850,iocharset=iso8859-15
  4. Options de montage par défaut :
    umask=0,users,codepage=850,iocharset=utf8

Le meilleur compromis performances / sécurité est en gras et vert, tandis que les meilleures performances pures sont en rouge.
time -f %E : Temps réel écoulé, en [heures:]minutes:secondes.centièmeseconde.

Disque dur Maxtor IDE 160 Go, externe usb2, partition FAT32 de 5,5 Go

Vitesse théorique :

# hdparm -tT /dev/sdd1
            Timing cached reads:   1012 MB in  2.00 seconds = 506.26 MB/sec
            Timing buffered disk reads:   90 MB in  3.07 seconds =  29.36 MB/sec

Copier un rép. de fichier musicaux (29 fichiers totalisant 101 Mo) vers le Maxtor :
$ time -f %E cp -r ~/[rép] /media/MAXTOR1/ && time -f %E sync

  1. Avec les options de montage par défaut & sync :
    1:21.79 + 0:00.05 (81")
  2. Avec flush, dirsync & noatime :
    0:06.27 + 0:00.36 (6"33, 16Mo/sec).
  3. Avec flush & noatime :
    0:08.12 + 0:00.29 (8"41)
  4. Avec les options de montage par défaut (sans synchronisation) :
    0:01.92 + 0:03.59 (4"51., 22,4Mo/sec)

Supprimer ce rép. du Maxtor :
$ time -f %E rm -rf /media/MAXTOR1/[rép] && time -f %E sync

  1. Avec les options de montage par défaut & sync :
    0:00.47 + 0:00.03 (0"50)
  2. Avec flush, dirsync & noatime :
    0:00.25 + 0:00.02 (0"27).
  3. Avec flush & noatime :
    0:00.36 + 0:00.04 (0"40).
  4. Avec les options de montage par défaut (sans synchronisation) :
    0:00.21 + 0:00.05 (0"26).

Copier ce rép. de fichier musicaux (29 fichiers totalisant 101 Mo) depuis le Maxtor sur le disque dur :
$ time -f %E cp -r /media/MAXTOR1/[rép] ~/ && time -f %E sync

  1. Avec les options de montage par défaut & sync :
    ( sec.)
  2. Avec flush, dirsync & noatime :
    0:04.46 + 0:01.66 (6"12).
  3. Avec flush & noatime :
    0:01.80 + 0:02.54 (4"34)
  4. Avec les options de montage par défaut (sans synchronisation) :
    0:04.89 + 0:01.68 (6"57, 15,4Mo/sec)

Copier un fichier (vidéo) de 304 Mo vers le Maxtor :
$ time -f %E cp [gros_fichier] /media/MAXTOR1/

  1. Avec les options de montage par défaut & sync :
    3:48.94 + 0:00.03 (229").
  2. Avec flush, dirsync & noatime :
    0:18.37 + 0:00.60 (19", 16Mo/sec).
  3. Avec flush & noatime :
    0:19.93 + 0:00.44 (20"37).
  4. Avec les options de montage par défaut (sans synchronisation) :
    0:18.87 + 0:02.04 (21").

Effacer ce fichier vidéo sur le Maxtor :
$ time -f %E rm /media/MAXTOR1/[gros_fichier] && time -f %E sync

  1. Avec les options de montage par défaut & sync :
    0:00.93 + 0:00.05 (1").
  2. Avec flush, dirsync & noatime :
    0:00.54 + 0:00.04 (0"58).
  3. Avec flush & noatime :
    0:00.50 + 0:00.07 (0"57).
  4. Avec les options de montage par défaut (sans synchronisation) :
    0:00.48 + 0:00.13 (0"61).
Clé USB "Skymedi" 1Go (Fat16) à 50% pleine

Benchmark comparé entre le montage par défaut vs montage avec flush, dirsync & noatime.
Meilleur compromis performances / sécurité en gras & Meilleures performances en rouge.

Copier un rép. de fichier musicaux (29 fichiers totalisant 101 Mo) :
$ time -f %E cp -rL [rép] /media/SKYMEDI/ && time -f %E sync

  1. Avec les options de montage par défaut & sync :
    22:05.55 + 0:00.03 (1445")
  2. Avec flush & noatime :
    0:17.57 + 0:03.26 (20"83).
  3. Avec flush, dirsync & noatime :
    0:22.84 + 0:01.36 (24"20).
  4. Avec les options de montage par défaut (sans synchronisation) :
    0:05.12 + 0:11.68 (16"80, 6Mo/sec)

Supprimer ce rép. de la clé USB :
$ time -f %E rm -rf /media/SKYMEDI/[rép] && time -f %E sync

  1. Avec flush & noatime :
    0:00.01 + 0:00.49 (0"50).
  2. Avec flush, dirsync & noatime :
    0:03.27 + 0:00.10 (3"37).
  3. Avec les options de montage par défaut (sans synchronisation) :
    0:00.15 + 0:00.30 (0"45).

Copier un fichier (vidéo) de 304 Mo :
$ time -f %E cp [gros_fichier] /media/SKYMEDI/

  1. Avec les options de montage par défaut & sync :
    53:09.38 + 0:00.07 (3189").
  2. Avec flush, dirsync & noatime :
    0:41.59 + 0:01.86 (43"45).
  3. Avec flush & noatime :
    0:50.02 + 0:02.29 (52"31).
  4. Avec les options de montage par défaut (sans synchronisation) :
    0:40.63 + 0:05.34 (46").

Effacer ce fichier vidéo sur la clé :
$ time -f %E rm /media/SKYMEDI/[gros_fichier] && time -f %E sync

  1. Avec les options de montage par défaut & sync :
    0:01.72 0:00.02 (1"74).
  2. Avec flush, dirsync & noatime :
    0:00.53 + 0:00.39 (0"92).
  3. Avec flush & noatime :
    0:00.39 + 0:00.12 (0"51).
  4. Avec les options de montage par défaut (sans synchronisation) :
    0:00.42 + 0:00.37 (0"79).
Memory Stick Duo Pro Sony MagicGate 2 Go FAT16

À venir

Micro SD SanDisk 2Go FAT16

Copie de la sauvegarde complète du contenu de la Micro SD (utilisée sur un Télphone GSM Nokia N95) : fichiers Nokia Map et musicaux essentiellement (313 sous-dossiers, 947 fichiers totalisant 354 Mo) depuis le disque dur vers la carte Micro SD fraichement formatée :
$ time -p cp -a /tmp/microsd1/* /media/cartes/MICROSD1/ real 1047.74 user 0.05 sys 2.42
time -f %E : Temps réel écoulé, en [heures:]minutes:secondes.centièmeseconde.

  • Avec flush, dirsync & noatime :
    17:50.1 (soit 0,33 Mo/sec) Celà connecté à mon lecteur de cartes ; c'est pas mieux directement depuis le téléphone . . .

Pour comparer, voici 2 tests effectués avec le système de fichiers ext3.

Disque dur Hitachi SataII 320 Go externe eSataII, partition ext3 (option dir_index) de 40 Go

Options de montage dans /etc/fstab : relatime,noauto,users

Copier un rép. de fichier musicaux (29 fichiers totalisant 101 Mo) vers le Maxtor :
$ time -f %E cp -r ~/[rép] /media/travax/ && time -f %E sync
time -f %E : Temps réel écoulé, en [heures:]minutes:secondes.centièmeseconde.
0:04.24 (soit 28,8 Mo/sec)

Supprimer ce rép. du disque Hitachi :
$ time -f %E rm -rf /media/travax/[rép] && time -f %E sync
0:00.19 + 0:00.04

Copier ce rép. de fichier musicaux depuis le DD Hitachi sur le disque dur :
$ time -f %E cp -r /media/travax/[rép] ~/ && time -f %E sync
0:02.75 (soit 36,7 Mo/sec)

Copier un fichier (vidéo) de 304 Mo :
$ time -f %E cp [gros_fichier] /media/travax/
0:06.88 + 0:00.74 (7"62 soit 44,2 Mo/sec)

Effacer ce fichier vidéo sur le disque Hitachi :
$ time -f %E rm /media/travax/[gros_fichier] && time -f %E sync
0:00.34 + 0:00.16

Copier ce rép. de fichier musicaux depuis le DD Hitachi sur le disque dur :
$ time -f %E cp -r /media/travax/[rép] ~/ && time -f %E sync
0:08.94 (soit 34 Mo/sec)

Gros déplacement de fichiers entre 2 disques externes USB : un disque 2,5" USB et un disque 3,5". Les partitions sont en ext3 (option dir_index) et font 100 et 80 Go

Options de montage dans /etc/fstab : relatime,noauto,users

Déplacement de fichiers (3725 fichiers avec de nombreux fichiers vidéo, 104 dossiers totalisant 23,5 Go) du Samsung 2,5" vers l'Hitachi 3,5" :
time -p mv /media/samsung160/ext3_100G/travax/* /media/hitachi/travax/ real 3174.92 + user 1.61 + sys 150.14, soit 3326" ou 55' (7.25 Mo/sec).

À vos fichiers fstab ;)

Optimisation des disques SSD

Résolution de soucis de montage

Messages d'erreur org.freedesktop.hal.storage

Hal ne parvient pas à gérer correctement les partitions et quand on essaye de les monter on obtient ce message d’erreur :

org.freedesktop.hal.storage.mount-fixed auth_admin_keep_always <– (action, result)

Le problème se résoud :
- Soit en inscrivant les partitions dans le fstab (note : sous Mandriva, passez par le centre de contrôle > Disques locaux > Gérer les partitions de vos disques durs),
- Soit en éditant le fichier /etc/PolicyKit/PolicyKit.conf pour y rajouter ces quelques lignes entre les balises <config version=”x.x”> et </config> :

<match user="votre_nom">
<match action="org.freedesktop.hal.storage.*">
<return result="yes"/>
</match>
</match>

Source et détails sur le Blog de didier : Disque dur externe (s'applique à tout type de disque, interne ou externe).

Articles liés


Trop cool pour Internet Explorer