le NTFS sous GNU/linux
et aussi un peu FreeBSD

Mise à jour du 5 novembre 2006 : ajout du pilote NTFS-3G, quelques modification pour captive

Mise à jour du 14 janvier 2006 : précisions sur l'écriture et le nouveau pilote

Mise à jour du 11 novembre 2005 : précision sur le retaillage

1° POINT : Comment Linux gère t'il le NTFS ?

1.1 Lecture :

aucun pb, Linux lit le NTFS sans soucis depuis pas mal de temps , il suffit que le noyau soit compilé comme il faut (cf le cas RedHat/Fedora)

1.2 Ecriture :

Là, c'est déjà plus problématique.

Noyaux de la série 2.4.xx

avec les noyaux 2.4 classiques, l'écriture est très vivement déconseillée car elle peut provoquer des pertes de données.

Noyaux de la série 2.6.xx

Avec les noyaux 2.6 inférieurs au 2.6.15 ; l'écriture est possible mais seulement si vous ne modifiez pas la taille du fichier !

Avec les noyaux 2.6 supérieurs à la version 2.6.15, il est maintenant possible d'écrire sur du NTFS avec le driver noyau libre. Cette écriture reste limitée à la modification de fichiers existants mais on peut maintenant en changer la taille (y compris la mettre à 0 si j'ai bien tout saisi). Il y a également des risques que ça ne fonctionne pas avec des fichiers extrêmement fragmentés. Néanmoins, les fonctionnalités actuelles du pilotes sont sures et il est possible d'activer le support pour l'écriture sans crainte pour ses données.

Il y a également un deuxième driver (libre également, et venant du même projet) qui se trouve en espace utilisateur. Il utilise FUSE et est beaucoup plus avancé en terme d'écriture sur le NTFS : on peut créer des fichiers, les supprimer etc ; ça marche pas trop mal et il ne semble pas y avoir de risques de corruptions de données. Il sert plus ou moins de test grandeur nature au driver noyau. (Encore que d'un point de vue personnel, le NTFS est un bon candidat pour un système de fichier en espace utilisateur).

Vous trouverez un tutorial (très incomplet) plus bas sur cette page.

Il existe également un deuxième pilote libre, appelé ntfs-3g qui est une amélioration très importante du précédent. A terme, il sera intégré à NTFSmount mais pour le moment, il reste séparé. Il est plus efficace que ntfsmount mais ne tourne pas sur autant d'architectures : x86, x86-64 et probablement PowerPC.

Vous trouverez également un tutorial sur son installation plus bas sur cette page.

Et si tout ça ne me convient pas ?

Et bien il y a un autre projet qui permet l'écriture sur du NTFS !

Le projet Captive permet l'écriture sur une partition NTFS, MAIS car il y a un mais, il utilise pour cela le driver windows ntfs.sys ce qui signifie que :

  1. c'est pas libre (le pilote windows, pas le projet en lui même)
  2. vous devez avoir ce driver sur votre machine
  3. je ne suis pas certains que ce soit compatible avec la licence de ce driver
  4. c'est super lent en lecture et écriture
  5. au contraire du driver précédent, le projet Captive n'est inclus que dans une distribution de ma connaissance (knoppix) ; vous devrez donc la plupart du temps l'installer en plus

Vous trouverez un tutorial (très incomplet et probablement plus très à jour) pour captive plus bas sur cette page.

1.3 Sauvegarde/restauration

La sauvegarde et la restauration de partitions NTFS depuis un poste sous GNU/Linux ou BSD ne sera pas traitée dans ce tutorial. Néanmoins sachez qu'elle ne pose pas de problèmes. En particulier, elle ne nécessite pas de pouvoir écrire sur du NTFS, les outils de restauration travaillant à un niveau inférieur.

Je vous conseille de vous reporter au tutorial d'Alain Deroche qui traite cet aspect en détail.

De façon plus théorique, vous pouvez également regarder le man de l'outil NTFS Clone sur le site du driver NTFS.

2° POINT : Ma distribution me permet t'elle de lire du NTFS ?

oui à ma connaissance

sauf pour RedHat/Fedora Core qui ne compilent pas leur noyau avec le support NTFS. pour ceux là, 2 solutions :

  1. recompiler le noyau ; pas forcément évident quand on débute
  2. utiliser les RPMS précompilés fournis par le projet linux-ntfs (le même qui fait le driver du noyau) ; vous téléchargez le RPMS qui correspond à votre noyau en cours (uname -r pour le connaitre) et vous double-cliquez dessus pour l'installer, tout simplement ! votre système supporte maintenant le NTFS en lecture.

3° POINT : Comment je peux accéder à mes partitions NTFS ?

Avant tout il faut savoir que GNU/Linux ne gère pas les partitions comme MS-Windows, ici, pas de c:, d: etc ; les partitions sont accessibles directement dans un dossier de l'arborescence, on dit qu'elles sont montées. Pour mieux comprendre ce point je vous conseille la lecture de cette page (courte et en français) qui explique bien le principe : http://doc.mandrivalinux.com/MandrakeLinux/92/fr/Command-Line.html/ch08s01.html

Revenons au NTFS ; sur certaines distributions (Mandrake entre autre), la procédure d'installation configurera votre système pour monter vos partitions NTFS automatiquement. Vous les trouverez habituellement dans des dossiers comme /mnt/win_c (ex c: ) /mnt/win_d (ex d: ) etc.

Sur d'autres distributions, il va falloir configurer vous même votre système pour qu'il monte vos partitions NTFS. C'est ce que nous allons voir maintenant.

3.1 créer le point de montage

ça semble évident mais si le dossier n'existe pas, vous ne pourrez pas l'utiliser. Nous allons donc le créer. L'arborescence sous GNU/Linux essayant de suivre une norme (le FHS), nous allons le mettre dans /mnt. Pour cela, ouvrez une console :

 su  là on passe root
        
mkdir /mnt/win_c je reprend la même dénomination que Mandrake, mais vous pouvez utiliser ce que vous voulez
exit on sort du mode root, on peut aussi utiliser CTRL+D

3.2 identifier la partition NTFS

Ensuite, il faut savoir quelle partition de votre disque est la partition NTFS ; pour cela, le mieux est d'utiliser fdisk :

 su 
        
fdisk -l

vous devriez alors avoir une sortie de ce type là :

 /dev/ide/host0/bus0/target0/lun0/part1   *         1       268   2152678+   b  Win95 FAT32 
        
/dev/ide/host0/bus0/target0/lun0/part2 269 2495 17888377+ f Win95 Etdue (LBA)
/dev/ide/host0/bus0/target0/lun0/part5 269 797 4249161 b Win95 FAT32
/dev/ide/host0/bus0/target0/lun0/part6 798 916 955836 b Win95 FAT32
/dev/ide/host0/bus0/target0/lun0/part7 917 2364 11631028+ b Win95 FAT32
/dev/ide/host0/bus0/target0/lun0/part8 2365 2495 1052226 b Win95 FAT32

repérer alors les partitions marquées NTFS et leur nom en particulier le dernier numéro (part1, 8 etc) ; il correspond au numéro de la partition.

Bien maintenant, pour que ce soit plus lisible (même si ce n'est pas obligatoire pour la suite), nous allons convertir ces valeurs dans l'ancienne notation des disques : si vos partitions sont sur le disque maitre du 1° controlleur le nom devient /dev/hdaX ou X est le numéro de la partition. ex :

 /dev/ide/host0/bus0/target0/lun0/part7    ---> /dev/hda7 
      

pour le disque esclave, c'est /dev/hdbX
le disque maitre du 2° controlleur /dev/hdcX
le disque esclave du 2° controlleur /dev/hddX

3.3 tester le point de montage

pour monter une partition, rien de bien compliqué ; en root faites :

 mount -t ntfs -o ro /dev/hdaX /mnt/win_c 
      

si vous n'avez pas de messages d'erreur, votre partition est bien montée et vous pouvez l'explorer :

 ls /mnt/win_c 
      

pour la démonter, il suffit de faire :

 umount /dev/hdaX 
      

l'ennui, c'est qu'il faut faire ça à chaque fois, nous allons voir maintenant comment automatiser tout ça grâce au fichier fstab.

3.4 automatiser le montage

Le fichier fstab est celui qui fait la correspondance entre les différentes partitions et l'arborescence. Il est vital à Linux, donc je vous déconseille d'y toucher seul si vous ne savez pas exactement ce que vous faites.
/!\ Les utilisateurs de Mandrake peuvent utiliser Diskdrake pour réaliser simplement toutes les actions décrites dans ce chapitre.
fstab se situe dans /etc et se présente de la façon suivante :

 partition  point_de_montage options 
      

ex :

 /dev/hdb6 /home ext3 defaults,noatime 1 2 
      

Ici, je monte la partition 6 de mon disque esclave du 1° controlleur en tant que dossier perso (/home) Passons à notre cas. La plupart du temps, la ligne suivante devrait convenir :

 /dev/hdXY /mnt/point_montage ntfs ro,gid=windows,umask=007,auto,user 0 0 
      

détaillons cette ligne :

noter que les options ne sont séparés que par une virgule et sans espace.
pour plus de détails sur ces options, je vous invite à consulter les manuels de mount et fstab : man mount et man fstab
pour éditer le fichier :

 su 
        
kedit /etc/fstab

une fois ceci fait, taper mount -a pour prendre en compte le nouveau fstab.

ensuite, si vos partitions ne sont pas encore montées, sorter du mode root, et monter là :

 mount /dev/hdXY 
      

si vos partition sont déjà montées, démontez les et remontez les :

 umount /dev/hdXY 
        
mount /dev/hdXY

ou bien

 mount -o remount /dev/hdXY 
      

maintenant, vous n'avez plus qu'à les utiliser.

Il est également possible de monter sa partition NTFS de façon à ce que tout le monde puisse la lire, pour cela, montez là avec les options suivantes :

 /dev/hda1 /mnt/windows ntfs umask=0,user,nls=iso8859-15,ro 0 0 
      

C'est plus simple mais nettement moins sécurisé

4° POINT : Guide incomplet du pilotes NTFS utilisateur

Ce guide n'est pas beaucoup plus qu'une traduction de la page correspondante du projet linux-ntfs.

Vérification de la présence de FUSE

Le pilote NTFS en espace utilisateur (ntfsmount) fait appel à un fonction du noyau Linux qui a été introduite à partir de la version 2.6.14 : FUSE. Certaines distributions comme Ubuntu Breezy incluent FUSE malgré un noyau inférieur au 2.6.14. Pour savoir si vous êtes dans ce cas, ouvrez une console :

 /sbin/modprobe -l|grep fuse 
      

Si vous obtenez une ligne du type

 /lib/modules/2.6.8.1-26mdk/kernel/3rdparty/fuse/fuse.ko.gz 
      

C'est que le module est déjà installé sur votre système. Si vous n'obtenez rien, c'est qu'il ne l'est pas.

Installation de FUSE sur un système ne le possédant pas

Il vous faut tout d'abord télécharger la dernière version des sources de FUSE

Vous devez ensuite installer les sources de votre noyau afin que le driver se compile correctement. Habituellement, elles se trouvent dans le paquetage kernel-source fournis avec votre distribution. Vous devez ensuite vérifier qu'il existe un lien symbolique entre ces sources et /usr/src/linux :

 [jules@tue_amour jules]$ ll /usr/src 
        
lrwxrwxrwx 1 root root 13 avr 18 20:59 linux -> linux-2.4.26/ le lien symbolique
drwxr-xr-x 15 573 573 4096 avr 18 20:59 linux-2.4.26/ les sources du noyau

si ce lien n'existe pas ou ne pointe pas vers le bon dossier, il faut le créer :

 ln -sf /usr/src/linux-2.4.26 /usr/src/linux  la version est bien sur à remplacer par la votre
      

Il n'y maintenant plus qu'à installer FUSE :

 tar zxvf fuse-2.4.1.tar.gz 
        
cd fuse-2.4.1
./configure && make
su
make install

Installation de FUSE sur un système préconfiguré

Si le module est déjà inclus avec votre noyau, il vous suffit alors d'installer les bibliothèques et les softs idoines. Utilisez pour ce faire votre gestionnaire de paquet préféré (urpmi, apt, yum, emerge etc).
Par exemple, sous mandriva, les paquets à installer sont fuse et libfuse2.

Installation du pilote proprement dit

Il est toujours préférable de prendre la dernière version existante du pilote, au 16/01/2006, c'est la 1.12.1. Utilisez préférentiellement votre système de paquet pour l'installer, c'est le paquet ntfsprogs.

Si vous n'avez pas de paquets disponibles sur votre distribution ou si vous voulez installer la toute dernière version, la marche à suivre est la suivante :

 tar zxvf ntfsprogs-1.12.1.tar.gz 
        
cd ntfsprogs-1.12.1
./configure --enable-fuse-module && make
su
make install

NB : il vous faudra libfuse2-devel pour pouvoir compiler ntfsprogs. Je vous conseille également d'utiliser checkinstall en lieu et place de make install. Ce petiti soft permet de créer des paquets basiques à partir des sources et ainsi de garder trace de ce que vous installez manuellement.

Pour utiliser le pilote, vous pouvez utiliser directement le programme ntfsmount ou alors remplir fstab (voir plus haut) en remplaçant le module ntfs par ntfs-fuse.

5° POINT : Guide d'installation de NTFS-3G

Il faut tout d'abord récupérer la dernière version sur le site de ntfs-3g. Certaines distributions fournissent des paquets tout fait mais le développement étant rapide, ils sont très rapidement obsolètes. Cela dit, rien ne vous empêche de les utiliser.

Assurez vous ensuite d'avoir une installation de FUSE fonctionnelle. Pour cela, voir le chapitre ci-dessus.

Installer le pilote (l'utilisation de checkinstall est toujours conseillée, voir le chapitre précédent) :

 tar zxvf ntfs-3g-VERSION.tar.gz
cd ntfs-3g
./configure
make 
su 
make install 
      

Si il n'y a pas eu d'erreur, la partition est montable en lecture/écriture via la commande (elle ne doit pas être monté avec un autre pilote)

 ntfs-3g /dev/hda1 /mnt/windows 
      

Le pilote accepte des options pour configurer les locales (voir le man) et ainsi éviter les problèmes de caractères accentués mal reproduit.

Enfin, vous pouvez rendre ça définitif en modifiant fstab de la façon suivante (j'ai mis la locale fr_FR mais c'est à adapter):

 /dev/hda1 /mnt/windows ntfs-3g defaults,locale=fr_FR 0 0 
      

6° POINT : Guide incomplet de Captive (probablement pas à jour)

il vous faut tout d'abord télécharger le paquet contenant le soft : pour Mandrake, Red Hat, Fedora, prenez le RPM :
http://www.jankratochvil.net/project/captive/dist/captive-static-1.1.7-0.i386.rpm

Pour Debian, ça se passe à cette adresse :
http://www.jankratochvil.net/project/captive/CVS.html.pl#debian

Pour les autres, le paquet binaire est à cette adresse :
http://www.jankratochvil.net/project/captive/dist/captive-static-1.1.7.tar.gz

Vous devez ensuite installer les sources de votre noyau afin que le driver se compile correctement. Habituellement, elles se trouvent dans le paquetage kernel-source fournis avec votre distribution. Vous devez ensuite vérifier qu'il existe un lien symbolique entre ces sources et /usr/src/linux :

 [jules@tue_amour jules]$ ll /usr/src 
        
lrwxrwxrwx 1 root root 13 avr 18 20:59 linux -> linux-2.4.26/ le lien symbolique
drwxr-xr-x 15 573 573 4096 avr 18 20:59 linux-2.4.26/ les sources du noyau

si ce lien n'existe pas ou ne pointe pas vers le bon dossier, il faut le créer :

 ln -sf /usr/src/linux-2.4.26 /usr/src/linux  la version est bien sur à remplacer par la votre
      

Ensuite, vous n'avez plus qu'à installer le paquet :
pour les rpm :

 rpm -Uvh captive-static-1.1.7-0.i386.rpm 
      

pour les deb :

 dpkg -i les_paquets.deb 
      

pour le paquet binaire tar.gz :

 tar xzf captive-static-1.1.7.tar.gz 
        
cd captive-static-1.1.7
su
./install

Une fois le package installé il faut lancer la commande suivante (en root) :

 captive-install-acquire 
      

Vous aurez alors une fenêtre qui vous permettra soit de rechercher les fichiers systeme sur tous vos disques soit d'indiquer le répertoire où ils se trouvent. Il vous faut au moins les 2 fichiers ntoskrnl.exe et ntfs.sys, les autres sont recommandés mais pas indispensables.

Si cela ne fonctionne pas, vous pouvez utiliser la commande suivante (en root) :

 captive-install-acquire --scan-disks 
      

Vérifier la présence des fichiers suivants dans /var/lib/captive :

Et voilà, l'installation est terminée ! Vous disposez maintenant d'un nouveau module qui s'appelle captive-ntfs. C'est lui que vous devez utiliser lors du montage pour avoir un accès en écriture.

Une fois installé, le fichier fstab a du être mis à jour et vous pouvez monter votre partition avec un

 mount /mnt/captive-LABEL 
      

ou label est le nom de votre partition. Vous devrez peut-être faire prendre en compte le nouveau fstab avec :

 mount -a 
      

Si le fstab est correct rien n'apparaît,sinon des lignes d'erreurs s'affichent.

Il sera peut-être nécessaire de redémarrer l'ordinateur (fermer la session ne suffit pas!!) ou de charger manuellement le module captive-ntfs.

si le fstab a été mal installé, vous pouvez vous reporter au tutorial + haut pour le modifier ; il vous suffit de changer le type "ntfs" en "captive-ntfs" et "ro" en "rw" (read write) ; notez que le paramètre umask reste sans effets avec le pilote captive mais que l'option gid (ainsi que uid) fonctionne. Il existe également les paramètres dmask et fmask qui ont la même fonction que umask mais respectivement pour les dossiers et les fichiers.

voilà un exemple de ligne pour votre fstab qui devrait fonctionner :

 /dev/hdXY /mnt/win_d captive-ntfs user,dmask=777,fmask=666 0 0 
      

un autre exemple :

 /dev/hda5 /mnt/win_d captive-ntfs gid=501,dmask=777,fmask=777 0 0 
      

Où gid est égal à un groupe d'utilisateurs autorisés à écrire, lire, supprimer.

Pour la création, c'est instantané par contre pour la suppression il faut parfois insister en passant par la poubelle, puis supprimer à nouveau.

7° POINT : La cas de FreeBSD

La méthode est grosso modo la même que pour Linux mais il subsiste quelques différences.
Premièrement, les partitions ne sont pas nommés de la même façon mais selon un schéma de type adXsY :

ex : ad0s2 est la 2° partition logique du premier disque dur IDE

Deuxièmement, l'étape de montage s'effectue avec une "variante" de la commande mount : mount_ntfs

 mount_ntfs /dev/adXsY /mnt/point_montage 
      

Comme sous Linux, la lecture est OK (FreeBSD 5.1.2-release) mais l'écriture est déconseillée.

8° POINT : Questions fréquentes

8.1 puis je redimensionner du NTFS sous Linux ?

oui avec NTFS resize en ligne de commande :
http://wiki.linux-ntfs.org/doku.php?id=ntfsprogs
En graphique, Il est possible de retailler du NTFS avec diskdrake (la défragmentation est indispensable), avec l'installeur de Suse et avec des logiciels indépendant des distributions, Qtparted (en Qt, la bibliothèque graphique de KDE) et Gparted (en gtk, celle de Gnome).
Jusqu'à la version 1.11.2 de ntfsresize, il est nécessaire de défragmenter sa partition au préalable, cette limite est abolie depuis la version 1.11.2 ; assurez vous donc bien de disposer au minimum de cette version. Sortie le 9 août 2005, elle est incluse au moins dans les distributions Knoppix 4.02 et Suse Linux 10.0.

8.2 où trouver de l'aide sur ce tutorial ?

soit en m'envoyant un mail (mjules chez free point fr ) soit en posant votre question sur ce forum : http://forum.hardware.fr/hardwarefr/OSAlternatifs/sujet-33366-2.htm

9° POINT : Liens importants

http://www.linux-ntfs.org le projet libre qui développe le driver NTFS du noyau Linux
http://www.ntfs-3g.org/ le site du projet ntfs-3g
http://www.jankratochvil.net/project/captive/ Le site du projet Captive

Remerciements

Ce tutorial ne s'étant pas fait tout seul, je remercie les personnes qui m'ont aidées et corrigées. En particulier, les intervenants du forum hardware.fr, arghbis, riwan, Initiatik, yannick77 (Captive) et Le Chimiste Fou (BSD). Je remercie également Alain Deroche pour son tuto et pour m'avoir pointé Qtparted et quelques bugs avec diskdrake.

Bonne journée sous Linux
retour à l'accueil

Valid XHTML 1.0! Valid CSS!