# Installer le pilote NTFS pour FreeBSD

Copyright © 1999 Groupe de Documentation de FreeBSD. Tous droits réservés.

La redistribution du code source (SGML), modifié ou non, et compilé (HTML, PostScript, etc.) est soumise aux conditions suivantes :

1. Le copyright ci-dessus, la présente liste de conditions et l'avertissement qui la suit doivent figurer dans le code source.

2. Le code source distribué sous forme compilée doit faire apparaître le copyright ci-dessus, la présente liste de conditions et l'avertissement qui la suit.

CE DOCUMENT EST FOURNI ``TEL QU'EN L'ÉTAT'' PAR LE PROJET DE DOCUMENTATION FRANÇAISE DE FreeBSD ET IL N'EST DONNÉ AUCUNE GARANTIE, IMPLICITE OU EXPLICITE, QUANT À SON UTILISATION COMMERCIALE, PROFESSIONNELLE OU AUTRE. LES COLLABORATEURS DU PROJET DE DOCUMENTATION FRANÇAISE DE FreeBSD NE PEUVENT EN AUCUN CAS ÊTRE TENUS POUR RESPONSABLES DE QUELQUE DOMMAGE OU PRÉJUDICE DIRECT, INDIRECT, SECONDAIRE OU ACCESSOIRE (Y COMPRIS LES PERTES FINANCIèRES DUES AU MANQUE À GAGNER, À L'INTERRUPTION D'ACTIVITÉS, OU LA PERTE D'INFORMATIONS ET AUTRES) DÉCOULANT DE L'UTILISATION DE LA DOCUMENTATION OU DE L'IMPOSSIBILITÉ D'UTILISER CELLE-CI, ET DONT L'UTILISATEUR ACCEPTE L'ENTIÈRE RESPONSABILITÉ.

Version française de Pierre-François Laurand `<pushf@club-internet.fr>`.

[ Multiples pages HTML / Page HTML unique ]

## 1. Installer le pilote NTFS pour FreeBSD 3.x

Pour installer ce pilote, vous aurez besoin de recompiler un noyau car les fichiers d'en-tête utilisés seront mis à niveau. Pour autant, aucun changement dans le fichier de configuration ne sera nécessaire. Si vous n'avez pas installé les sources du noyau, vous pouvez soit recourir à `sysinstall`, ou bien entrer successivement en tant que `root` :

    # mount -t cd9660 /dev/cd0c /mnt
    #  cd /mnt/src
    #  cat ssys.?? | tar --unlink -zxpvf - -C /usr/src

Le pilote requiert également le fichier `mntopt.h` de l'archive source. Pour extraire son contenu :

    #  cd /mnt/src
    #  cat ssbin.?? | tar --unlink -zxpvf - -C /usr/src sbin/mount

Ensuite, en tant que `root`, créez un répertoire pour y extraire le contenu de l'archive du pilote ntfs :

    #  cd /tmp
    #  mkdir ntfs

Téléchargez le fichier d'archive compressé contenant le code source du pilote ainsi que son fichier de mise à niveau - patch - dans `/tmp/ntfs`. Les deux fichiers dont vous avez besoin sont `ntfs-0.17beta.tgz` et `ntfs.0.17beta-0.18beta.diff`.

Extrayez le contenu du fichier d'archive :

    #  cd /tmp/ntfs
    #  tar xzvf ntfs-0.17beta.tgz

Il se peut que le numéro de version (0.17beta) soit différent.

Ensuite, appliquez la mise à niveau de la version 0.17 à la version 0.18.

    #  cd /tmp/ntfs/src/sys/ntfs
    #  patch < /tmp/ntfs/ntfs.0.17beta-0.18beta.diff

Prenez garde à ce qu'aucune partie ne fasse défaut. patch(1) génère des copies de sauvegarde des fichiers qu'il met à jour (avec l'extension `.orig`), par conséquent, si un problème survient, recopiez les fichiers `.orig`, et recherchez-en la cause.

Recopiez maintenant les fichiers sources là où ils doivent normalement être :

    # cd /tmp/ntfs
    # cp -p -R -i src /usr/

Il faut ensuite mettre à jour `vnode.h` :

    # cd /usr/src/sys/sys
    # patch < /tmp/ntfs/diff/vnode.h.diff

Encore une fois, vérifiez que la mise à niveau s'est bien passée, vous devriez avoir :

    Hmm...  Looks like a new-style context diff to me...
    The text leading up to this was:
    --------------------------
    |*** ./sys/sys/vnode.h.orig      Fri Jan  1 06:12:51 1999
    |--- ./sys/sys/vnode.h  Wed Dec   2 12:31:31 1998
    --------------------------
    Patching file vnode.h using Plan A...
    Hunk #1 succeeded at 62.
    done

Vous allez maintenant pouvoir maintenant compiler l'exécutable `mount_ntfs` :

    # cd /usr/src/sbin/mount_ntfs
    # make
    # make install

ainsi que le module du noyau :

    # cd /usr/src/sys/modules/ntfs
    # make
    # make install

Pour finir, il faudra aussi recompiler le noyau (parce que `vnode.h` a été modifié). Si vous utilisez le noyau `GENERIC`, faites une copie du fichier de configuration du noyau `GENERIC` (ce n'est pas absolument nécessaire, mais de cette manière le nom du noyau sera mis à jour, et il sera plus facile d'identifier celui avec lequel vous démarrez). J'ai pour habitude d'utiliser des noms assez représentatifs, aussi `GENERIC_NTFS` me semble-t-il approprié :

    # cd /usr/src/sys/i386/conf
    # cp GENERIC GENERIC_NTFS
    # /usr/sbin/config GENERIC_NTFS
    # cd ../../compile/GENERIC_NTFS
    # make depend
    # make
    # make install

Ok, parfait, mais avant de redémarrer avec votre nouveau noyau, il faut identifier la tranche - slice - NTFS. Le numéro de cette tranche va dépendre du format de votre disque. Pour l'instant, si vous avez une tranche FAT suivie d'une tranche NTFS et que votre tranche FreeBSD est la dernière, elles seront numérotées (```da`'' ou peut-être ```sd`'' pour les disques SCSI, si vous avez mis à jour votre système 2.2.x pour passer en 3.1, et ce sera ```wd`'' si vous avez des disques IDE) :

    FAT     - da0s1
    NTFS    - da0s2
    FreeBSD - da0s3

Si votre tranche NTFS et votre tranche FreeBSD sont inversées et que vous avez installé NT avant FreeBSD, ce qui est d'ailleurs la méthode recommandée, vos numéros de tranches seront les mêmes, mais pas dans le même ordre :

    FAT     - da0s1
    FreeBSD - da0s3
    NTFS    - da0s2

Vous pouvez jeter un coup d'oeil au fichier `/etc/fstab` pour être sûr du numéro de la tranche de FreeBSD (et également de celui de la tranche FAT).

Il y a cependant une exception à tout cela, lorsque votre tranche NTFS est une ``partition logique'' dans une ``partition étendue''. Les ``partitions logiques'' sont toujours numérotées à partir de 5, peut importe le nombre de ``partitions'' sur le disque. Mon disque, par exemple, est agencé comme ceci :

    FAT                - da0s1
    FreeBSD            - da0s3
    Extended partition - da0s2
                  NTFS - da0s5

Notez qu'une ``partition étendue;'' se voit attribuer une tranche - ``slice'', mais celle-ci ne peut pas être utilisée en tant que telle, c'est-à-dire que vous ne pouvez pas la monter.

Après avoir identifié la tranche NTFS, vous pouvez ajouter une entrée dans le fichier `/etc/fstab`. Notez que l'option `ro` signifie que le montage se fera en lecture seule (souvenez-vous que le pilote est en lecture seule). Cette entrée provoquera le montage automatique de la tranche NTFS lors du démarrage. Si vous voulez désactiver cette dernière option, modifiez `ro` en `ro,noauto`, sans aucun espace ni avant ni après la virgule ! Vous aurez également besoin d'un point de montage, `/ntfs` dans cet exemple, ou si vous préferez, `/mnt` à la place de `/ntfs` dans le fichier `/etc/fstab` :

    # Device            Mountpoint       FStype    Options          Dump     Pass#
    /dev/da0s5  	    /ntfs            ntfs      ro               0        0

Si vous préferez ne pas monter la ``partition'' au démarrage, montez-la ensuite en tant que `root` avec la commande :

    # mount -t ntfs /dev/da0s5 /ntfs

Bien entendu, ajustez le fichier de pilote de périphérique ainsi que le point de montage à votre système.

C'est fait ! Il ne reste plus qu'à redémarrer.

Bon courage !

## 2. Installation du pilote NTFS sous FreeBSD 2.2.X

Pour installer ce pilote, vous aurez besoin de recompiler un noyau car les fichiers d'en-tête utilisés seront mis à niveau. Pour autant, aucun changement dans le fichier de configuration ne sera nécessaire. Si vous n'avez pas installé les sources du noyau, vous pouvez soit recourir à `sysinstall`, ou bien entrer successivement en tant que `root` :

    # mount -t cd9660 /dev/cd0c /mnt
    #  cd /mnt/src
    #  cat ssys.?? | tar --unlink -zxpvf - -C /usr/src

Le pilote requiert également les fichiers `mntopt.h` de l'archive source. Pour extraire son contenu, tapez :

    #  cd /mnt/src
    #  cat ssbin.?? | tar --unlink -zxpvf - -C /usr/src sbin/mount

Ensuite, en tant que `root`, créez un répertoire pour extraire le contenu de l'archive du pilote ntfs :

    #  cd /tmp
    #  mkdir ntfs

Téléchargez le fichier d'archive compressé contenant le code source du pilote ainsi que son fichier de mise à jour dans `/tmp/ntfs`.

Extrayez le contenu de l'archive :

    #  cd /tmp/ntfs
    #  tar xzvf ntfs-releng22-0.12beta.tgz

Il se peut que le numéro de version (0.12beta) soit différent.

Recopiez maintenant les fichiers sources à l'endroit adéquat :

    # cd src
    # cp -p -r * /usr/src

Ensuite, vous devez mettre à niveau les 3 fichiers d'en-tête du système. Utilisez l'option `-l` (L minuscule) qui permet d'ignorer la différence d'espacement, car j'ai remarqué que l'utilisation des touches TAB et Espace rendait incompatible les fichiers originaux et les fichiers `diff`.

    # cd /usr/src/sys/sys
    # patch -l malloc.h /tmp/ntfs/diff/malloc.h.diff
    # patch -l mount.h /tmp/ntfs/diff/mount.h.diff
    # patch -l vnode.h /tmp/ntfs/diff/vnode.h.diff

Si cette opération réussit, vous verrez s'afficher quelque chose de similaire à :

    Hmm...  Looks like a new-style context diff to me...
    The text leading up to this was:
    --------------------------
    |*** ./sys/sys/vnode.h.orig      Fri Jan  1 00:17:30 1999
    |--- ./sys/sys/vnode.h  Fri Jan   1 00:17:35 1999
    --------------------------
    Patching file vnode.h using Plan A...
    Hunk #1 succeeded at 58.
    done

Si malencontreusement, un (ou plusieurs) fichier de mise à jour faisait défaut, sachez que patch fait toujours des copies des fichiers originaux avec le même nom suivi de l'extension `.orig`.

Maintenant, vous pouvez compiler le pilote. Il est nécessaire d'ajouter `BINDIR=/usr/sbin` qui n'est pas défini dans le `Makefile`.

    # cd /usr/src/sbin/i386/mount_ntfs
    # make
    # make BINDIR=/usr/sbin install

Compilez ensuite les modules du noyau :

    # cd /usr/src/lkm
    # make
    # make install

Pour finir, vous devez recompiler le noyau. Si vous utilisez le noyau `GENERIC`, faites une copie du fichier de configuration du noyau `GENERIC` (ce n'est pas absolument nécessaire, mais de cette manière le nom du noyau sera mis à jour, et ce sera plus facile pour identifier le noyau avec lequel vous démarrez). J'ai pour habitude d'utiliser des noms assez représentatifs, aussi `GENERIC_NTFS` me semble approprié :

    # cd /usr/src/sys/i386/conf
    # cp GENERIC GENERIC_NTFS
    # /usr/sbin/config GENERIC_NTFS
    # cd ../../compile/GENERIC_NTFS
    # make depend
    # make
    # make install

Ok, parfait, mais avant de redémarrer avec votre nouveau noyau, il faut identifier la tranche - slice - NTFS. Le numéro de cette tranche va dépendre du format de votre disque. Pour l'instant, si vous avez une tranche FAT suivie d'une tranche NTFS et que votre tranche FreeBSD est la dernière, elles seront numérotées (remplacez ```w`'' par ```s`'' pour les disques SCSI) :

    FAT     - wd0s1
    NTFS    - wd0s2
    FreeBSD - wd0s3

Si votre tranche NTFS et votre tranche FreeBSD sont inversées et que vous avez installé NT avant FreeBSD, ce qui est d'ailleurs la méthode recommandée, vos numéros de tranches seront les mêmes, mais pas dans le même ordre :

    FAT     - wd0s1
    FreeBSD - wd0s3
    NTFS    - wd0s2

Vous pouvez jeter un coup d'oeil au fichier `/etc/fstab` pour être sûr du numéro de la tranche FreeBSD (et également de celui de la tranche FAT).

Il y a cependant une exception à tout cela, lorsque votre tranche NTFS est une ``partition logique'' dans une ``partition étendue''. Les ``partitions logiques'' sont toujours numérotées à partir de 5, peut importe le nombre de ``partitions'' sur le disque. Mon disque, par exemple, est agencé comme ceci :

    FAT                - sd0s1
    FreeBSD            - sd0s3
    Extended partition - sd0s2
                  NTFS - sd0s5

Notez qu'une ``partition étendue'' se voit attribuer une tranche - ``slice'', mais celle-ci ne peut pas être utilisée en tant que telle, c'est-à-dire que vous ne pouvez pas la monter.

Après avoir identifié la tranche NTFS, vous pouvez ajouter une entrée dans le fichier `/etc/fstab`. Notez que l'option `ro` signifie que le montage se fera en lecture seule (souvenez-vous que le pilote est en lecture seule). Cette entrée provoquera le montage automatique de la tranche NTFS lors du démarrage. Si vous voulez désactiver cette dernière option, modifiez `ro` en `ro,noauto`, sans aucun espace ni avant ni après la virgule ! Vous aurez également besoin d'un point de montage, `/ntfs` dans cet exemple, ou si vous préferez, `/mnt` à la place de `/ntfs` dans le fichier `/etc/fstab` :

    # Device            Mountpoint       FStype    Options          Dump     Pass#
    /dev/sd0s5  	    /ntfs            ntfs      ro               0        0

Si vous préferez ne pas monter la ``partition'' au démarrage, montez-la ensuite en tant que `root` avec la commande :

    # mount -t ntfs /dev/sd0s5 /ntfs

Bien entendu, ajustez le fichier de pilote de périphérique ainsi que le point de montage à votre système.

C'est fait ! Il ne reste plus qu'à redémarrer. Si vous avez choisi de monter la ``partition'' au démarrage, vous verrez s'afficher quelques messages de diagnostic tout à fait inoffensifs :

    ntfs_init():
    ntfs_mountfs(): bps: 512, spc: 1, media: f8, mftrecsz: 2 (2 sects)
    ntfs_mountfs(): mftcn: 0x315e5|0x287245
    ntfs_mountfs(): case-sens., uid: 0, gid: 0, mode: 777
    ntfs_iget(): read $MFT ntnode
    ntfs_mountfs(): reading $UpCase....OK

Bon courage !

Ce document, ainsi que d'autres peut être téléchargé sur ftp.FreeBSD.org/pub/FreeBSD/doc/.

Pour toutes questions à propos de FreeBSD, lisez la documentation avant de contacter <questions@FreeBSD.org>.
Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.