Utiliser les périphériques de stockage USB sous Linux



Ce document est distribué selon les termes de la licence G.P.L. Documentation. Vous êtes autorisés à le diffuser sur tout support de votre choix, à le publier sur un site internet ou intranet, à la condition que l'auteur original soit mentionné, ce afin d'assurer un meilleur suivi des mises à jour de ce document.

Ce document est fourni tel quel, dans l'espoir qu'il sera utile. Aucune garantie n'est fournie quant aux conséquences résultant de son utilisation.

La distribution Linux que j'utilise est une Slackware 8.1; aussi toutes les indications de répertoires concernent cette distribution. Les utilisateurs d'autres distributions devront adapter cette fiche à leur distribution (notamment pour le chargement des modules dans les distributions à base de RPM). Je ne peux être d'aucun secours à ce niveau à part peut-être vous conseiller d'utiliser une Slackware ou une Debian -;))

Date de création: 2 février 2003
Auteur: Jacques Abada <Jacques.Abada@arcanthea.com>


Le tarball de ce document est disponible ici





Introduction
Sommaire
Comment Linux voit les périphériques de stockage USB

Etapes de mise en service

Conclusion



Introduction


L'histoire de ce papier est assez simple. Quelqu'un m'a donné, voici quelques semaines, un petit porte-clé USB, le Memorybird™ de Fujitsu. Ce petit appareil permet de stocker 64 Mo de données dans quelques centimètres. Une disquette accompagnait naturellement ce dispositif, et, naturellement, l'étiquette mentionnait "driver disk for W...". Pour Linux, rien. Ma première question a été de demander s'il y avait des drivers pour Linux. A cet instant, plus personne devant moi. Alors, j'ai commencé à faire des recherches sur internet, et Google me renvoya quelques liens, l'un d'eux pointant vers une fiche en allemand traitant de l'utilisation du Memorybird sous Linux. Je n'ai rien compris à la description, mais les captures d'écran, elles, m'ont parlé, et j'ai pu faire fonctionner le Memorybird sous Linux.
Récemment, j'ai décidé d'acheter un disque externe USB parce que j'avais besoin d'un moyen commode de transférer des fichiers entre plusieurs machines, mais également pour remplacer la quarantaine de CD que je devais transporter chaque jour. De plus le Memorybird ne permettait pas de transporter de grandes quantités de données.
J'ai appliqué la même méthode pour configurer mon disque externe et l'utiliser sous Linux. Vu que le constructeur ne fournit que des drivers pour Redmond, j'ai décidé de rédiger cette petite fiche technique afin que la communauté des utilisateurs de Linux puisse l'utiliser en cas de besoin.

Les deux dispositifs, Memorybird et disque externe, se configurent et s'utilisent exactement de la même manière sous Linux à ceci près que le Memorybird est une mémoire flash livrée préformatée en fat32 (hé oui, je sais y en a que pour la daube de Redmond), mais il est très aisé de reformater en ext2 si on le souhaite. C'est ce que je vous propose de voir au fil des lignes qui suivent.


L'utilisation des disques durs transportables USB sous Linux, ne pose pas de problème particulier, pour peu qu'on ait compilé le support USB dans le noyau ou sous forme de modules. Les deux modules nécessaires à l'utilisation des disques durs USB sont usb-uhci.o et usb-storage.o.  Ces modules se trouvent dans le répertoire /lib/modules/2.4.18/kernel/usb (sur une Slackware 8.1). Leur chargement se fait par la commande /sbin/modprobe. Sous Slackware, il suffit d'ôter le signe # devant les lignes correspondantes dans le fichier /etc/rc.d/rc.modules pour que le chargement de ces modules se fasse au démarrage de l'ordinateur.

Mobidisk
Disque dur USB
Memorybird
Memorybird


Comment Linux voit les disques durs USB ?

Linux dispose d'excellents modules pour supporter l'USB (1.1 et 2.0) ainsi que les périphériques tels que les claviers, les souris, et, bien sûr, les périphériques de stockage externes (à base de mémoires flash ou de disques durs).

Les disques durs USB transportables sont à la norme UDMA100 et plus. Lorsqu'on les utilise sous Linux, ils sont vus comme des périphériques SCSI par le biais d'une émulation SCSI sur des périphériques IDE. Le module usb-storage.o se charge de cela. De plus, les disques sont en général livrés non partitionnés et non formatés, ce qui est logique puisqu'on est sensé pouvoir les utiliser sous différents systèmes d'exploitation. Une fois les modules chargés et le périphérique reconnu, il s'agira de créer une ou plusieurs partitions et de la (les) formater.

Etapes de la mise en service
Notez que toutes les étapes qui suivent se feront sous compte root.

Nous devons d'abord nous assurer que les modules usb-uhci.o et usb-storage.o sont chargés. /sbin/modprobe est la commande qu'il faut utiliser, comme sur la capture ci-dessous:




Lorsqu'on a chargé les modules (usb-uhci.o et usb-storage.o), puis allumé le périphérique on peut voir dans le fichier /var/log/messages les lignes suivantes:


Cela indique que le module est bien initialisé et qu'il a détecté un périphérique de stockage, qu'il lance l'émulation SCSI et affiche la partition. Ici la ligne sda: signifie qu'un disque non partitionné a été trouvé. Il s'agit maintenant de le partitionner et de le formater. La méthode est identique à celle employée sous Linux pour partitionner et formater des disques durs fixes.

On va lancer cfdisk pour créer la partition.


L'écran ci-dessus indique que le disque /dev/sda a une capacité totale de 80 Go et qu'aucune partition n'existe sur ce périphérique. Nous allons donc créer une partition Linux.



La nouvelle partition (/dev/sda1) est créée. Il faut sauvegarder la table des partitions en choisissant le menu Write. On quitte cfdisk. A ce stade il nous faut vérifier si notre nouvelle partition est disponible. Logiquement oui. En effet l'USB est un système qui permet de brancher des périphériques "à chaud" sans nécessiter de redémarrage de l'ordinateur. Le module aura détecté la nouvelle partition et va nous l'indiquer dans le fichier /var/log/messages. Ce que nous voyons dans l'illustration ci-dessous:



On remarque bien que la dernière ligne indique sda: sda1 (ce qui ne figurait pas dans le fichier quand le disque n'était pas partitionné).

Maintenant, nous allons créer un système de fichiers ext2 sur notre partition.




Notez que le processus peut être un  peu long. Plusieurs minutes ont été nécessaires pour formater une partition de 20 Go malgré la connexion du disque à une carte USB 2.0.

Ensuite, nous testons la nouvelle partition avec e2fsck.



Cette étape peut également être un peu longue. Mais, au moins, on est assuré que le système de fichiers est propre.

Quand on a terminé avec e2fsck, on peut monter la nouvelle partition sous /mnt pour vérifier qu'elle est disponible et fonctionnelle. La commande mount -t ext2 /dev/sda1 /mnt fera le travail.



ls /mnt indique bien que la partition /dev/sda1 est montée sous /mnt et qu'elle est disponible.

Il ne reste plus maintenant qu'à créer un répertoire de montage (par exemple /mobidisk) et d'ajouter la ligne

/dev/sda1            /mobidisk        ext2        noauto,user        0    0

dans le fichier /etc/fstab. On pourra remplacer user par owner si l'on souhaite que seul root puisse monter cette partition. Sur ma machine je laisse la possibilité à l'utilisateur de monter les périphériques.

On s'assurera également que le fichier /etc/rc.d/rc.modules lance bien les lignes

/sbin/modprobe usb-uhci

et

/sbin/modprobe usb-storage

pour qu'aux prochains démarrages de l'ordinateur, les modules soient chargés.

Conclusion

Voilà, c'est tout ce qu'il faut faire pour mettre en service et utiliser un disque dur externe USB sous Linux. J'espère que cette documentation sera utile. Je ne suis pas un expert en USB. Aussi pour toutes questions relatives à la gestion de l'USB par Linux, vous pouvez consulter http://www.kernel.org ou d'autres sites plus spécialisés dans le port USB.

Pour toute question relative à ce papier, ou si vous constatez une erreur, merci de me contacter à Jacques.Abada@arcanthea.com.