Si vous souhaitez accéder à un périphérique de stockage (disque CD-ROM, clé USB, partition de disque dur...) il est recommandé de lire au préalable le partitionnement. Ce tutoriel rappelle notamment ce qu'est un système de fichiers, un device etc.
Si vous utilisez une interface graphique comme KDE ou gnome, une interface graphique permet de gérer facilement les périphériques sous réserve que /etc/fstab soit bien configuré.
Pour modifier ce fichier de configuration /etc/fstab il faut des droits root. Pour plus de détails sur la marche à suivre, vous pouvez consulter le tutoriel sur le mode texte et le tutoriel sur nano.
Sous Windows, la provenance (disque CD-ROM, partition de disque dur, partage réseau...) d'un fichier détermine dans quel lecteur il apparaîtra. Exemple :
Sous Linux, aucune de ces contraintes n'existe. On peut accéder à autant de partages, de partitions et de périphérique qu'on le souhaite. Chacune de ces sources de fichiers apparaîtra dans l'arborescence Linux et dans un répertoire de son choix appelé point de montage. Quand il s'agit d'un périphérique ou d'une partition qui ne concerne pas le système Linux, ce point de montage est souvent placé dans /media. Exemple :
Une fois l'arborescence constituée, la provenance d'un fichier est complètement transparente.
Les blocks devices sont des devices particuliers sous Linux qui permettent de manipuler un espace de stockage (ou média). Par exemple, une disquette, une clé USB, une partition de disque dur ou un disque CD-ROM sont autant de médias. Ils sont créés au moment de brancher le périphérique ou au lancement de Linux si le périphérique était déjà lancé.
Les devices associés aux périphériques USB/SCSI/SATA sont généralement notés /dev/sd..., suivi d'une lettre associé au périphérique et d'un chiffre associé à la partition. Par exemple /dev/sdb2 désigne la deuxième partition du disque /dev/sdb. Les périphériques IDE sont généralement notés /dev/hd...
Toutefois, la manière dont sont nommés les devices découlent de conventions de nommage mais peuvent être personnalisés. En réalité, les devices sont créés et supprimés par udev. Il est possible de raffiner le comportement d'udev afin de nommer systématiquement un périphérique avec un nom de device particulier (par exemple /dev/phone pour son téléphone). En effet, udev est capable d'interroger le périphérique et récupérer notamment ses caractéristiques constructeurs (marque, modèle...). Il peut donc différencier par exemple une téléphone portable d'un appareil photo et leur attribuer à chacun un nom bien précis (par exemple /dev/phone et /dev/camera).
Comme un device n'est jamais qu'un fichier (rangé dans /dev), celui-ci ne permet pas de manipuler directement les données stockées sur le média. Il s'agit donc de faire apparaître son contenu dans un répertoire vide. Ainsi, on cherche à faire apparaître le contenu d'un média (référencé par un device) dans un répertoire vide (le point de montage). Cette étape consiste à monter (mount) un périphérique.
Remarques
Concrètement, quand on monte un espace de stockage, linux crée un VFS (virtual filesystem) qui représente l'arborescence de fichiers stockée sur le média. C'est une couche d'abstraction qui permet de manipuler ces fichiers "normalement" sans se préoccuper de leur média de provenance.
Comme le VFS est une représentation créée en mémoire, il est possible d'associer des droits particuliers, aux fichiers qu'il représente. Ceci est y compris possible si ces fichiers sont stockés sur un système de fichiers sans droits POSIX (comme de la FAT32 ou de la NTFS), puisque le VFS n'est qu'une représentation en mémoire. Cependant comme ces systèmes de fichiers ne stockent pas de droits, ces informations seront "perdues" au moment de démonter ce périphérique (voir étape 4).
Un utilisateur ne manipule pas directement les fichiers stockés sur le média, mais le VFS (qui est stocké en mémoire). Il faut donc répercuter les modifications faites au niveau du VFS sur le média proprement dite avant de retirer le média. Ceci consiste à synchroniser le VFS et le média. C'est le fameux "retirer le périphérique en toute sécurité" que l'on trouve sous Windows.
Remarque : on peut également demander au système d'exploitation de synchroniser en permanence le VFS et le média, mais on perd certains bénéfices apportés par le VFS. Par exemple, si on efface et réécrit 3 fois un fichier de 1Go sur une clé USB et que cette synchronisation est permanente, on transfèrera l'équivalent de 3Go sur ce disque. Si par contre on l'on ne fait la synchronisation qu'au moment du umount, seul 1Go sera transféré (au moment de lancer la commande umount). C'est pour cela que dans ce cas de figure, la commande umount prend quelques secondes à s'exécuter et ne doit pas être interrompue sous peine de ne pas synchroniser complètement le VFS et le média.
Retirer un périphérique revient à faire disparaître l'arborescence associée à ce média. On dit alors que l'on démonte le périphérique. Sous Linux, ceci se fait via la commande umount. La commande umount synchronise implicitement le VFS et le média en plus de faire disparaître le VFS associé.
S'il s'agit d'un périphérique amovible (clé USB...) celui-ci peut désormais être retiré en toute sécurité.
Dans cette section, nous allons illustrer les différentes étapes
Il suffit de créer un répertoire vide. Comme celui-ci est placé en général dans /mnt, /media ou /users, cette opération requiert des droits root. On utilise la commande mkdir (make directory) ave l'option -p qui permet de créer en cascade les répertoires parents.
Exemple :
mkdir -p /mnt/usb
Cette commande crée (si nécessaire) le répertoire /mnt, puis le sous-répertoire "usb".
Cette sous-section ne concerne que les espaces de stockage autres que les partages réseaux (samba, nfs...).
Si votre disque dur était branché au moment de lancer linux, le device associé à son en-tête et à ses partitions est déjà créé. On peut retrouver l'ensemble des tables de partitions de disque dur grâce à la commande fdisk. Cette commande requiert des droits root.
(root@silk) (~) # fdisk -l
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf09a050d
Device Boot Start End Blocks Id System
/dev/sda1 * 1 52 409600 27 Unknown
Partition 1 does not end on cylinder boundary.
/dev/sda2 52 15755 126134272 7 HPFS/NTFS
/dev/sda3 15756 15876 971932+ 82 Linux swap / Solaris
/dev/sda4 15877 60801 360860062+ 83 Linux
Ici, on constate que la machine contient un disque dur (ici SATA, d'où son nom en /dev/sd...) composé de 4 partitions :
La commande cfdisk permet de retourver les différents systèmes de fichiers utilisés :
cfdisk /dev/sda
... affiche dans cet exemple ceci :
cfdisk (util-linux-ng 2.17.2)
Disk Drive: /dev/sda
Size: 500107862016 bytes, 500.1 GB
Heads: 255 Sectors per Track: 63 Cylinders: 60801
Name Flags Part Type FS Type [Label] Size (MB)
-----------------------------------------------------------------------------------------------------
Unusable 1,05 *
sda1 Boot Primary Unknown (27) 419,44 *
sda2 Primary NTFS [^O] 129161,50 *
Unusable 7,32 *
sda3 Primary Linux swap / Solaris 995,26
sda4 Primary Linux ext3 369520,71
On retrouve par exemple ici que /dev/sda4 est en réalité un système de fichier ext3, information qui n'apparaissait pas clairement avec fdisk.
Si c'est un périphérique USB que l'on vient de brancher, il suffit de regarder lequel est apparu. On peut également à dmesg de nous donner cette information.
Exemple :
(mando@silk) (~) $ ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4
(mando@silk) (~) $ ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4 /dev/sdb
(mando@silk) (~) $ dmesg | tail
[ 3013.766276] sd 7:0:0:0: Attached scsi generic sg2 type 0
[ 3013.766735] sd 7:0:0:0: [sdb] 16025600 512-byte logical blocks: (8.20 GB/7.64 GiB)
[ 3013.766742] sd 7:0:0:0: [sdb] Assuming Write Enabled
[ 3013.766746] sd 7:0:0:0: [sdb] Assuming drive cache: write through
[ 3013.768737] sd 7:0:0:0: [sdb] Assuming Write Enabled
[ 3013.768742] sd 7:0:0:0: [sdb] Assuming drive cache: write through
[ 3013.768747] sdb:
[ 3013.773927] sd 7:0:0:0: [sdb] Assuming Write Enabled
[ 3013.773934] sd 7:0:0:0: [sdb] Assuming drive cache: write through
[ 3013.773939] sd 7:0:0:0: [sdb] Attached SCSI removable disk
Dans cet exemple on constate qu'on a juste un device /dev/sdb mais pas de device /dev/sdb1, comme on pourrait s'y attendre. En temps normal on aurait monté /dev/sdb1, mais pour ce genre de périphérique USB, on monte bien /dev/sdb.
Les disques CD-ROM/DVD sont accessibles via le device associé au lecteur de disque. Celui-ci est généralement accessible via le lien symbolique /dev/cdrom. Si la machine comporte plusieurs lecteurs, il y a un lien par lecteur (/dev/cdrom0...).
(mando@silk) (~) $ ls -l /dev/cdrom
lrwxrwxrwx 1 root root 3 3 sept. 15:11 /dev/cdrom -> sr0
Dans cet exemple, le lecteur CD/DVD est en réalité /dev/sr0.
Le lecteur de disquette est noté /dev/fd0 (et ainsi de suite pour chaque lecteur de disquette).
S'il s'agit d'une partition de swap, on utilise la commande swapon. On peut avoir plusieurs partitions de swap. Dans ce cas les différents espaces de swap sont automatiquement "agrégées" et se comportent comme s'il n'y avait qu'une seule partition de swap.
Exemple :
swapon /dev/sda3
On peut vérifier que la taille de la swap a augmenté avec la commande top.
Sinon, on utilise la commande mount. Il faut lui préciser le système de fichier utilisé sur l'espace de stockage, (-t) le nom du device à monter et le point de montage. On peut également préciser certaines options (-o) décrites dans la page de man de mount. Pour plus de détails :
man mount
La commande mount requiert des droits root (sauf si l'option user a été activée dans /etc/fstab pour ce device).
Exemples :
mount -t ntfs-3g /dev/sda2 /mnt/windows
mount -t iso9660 -o rw /dev/cdrom /mnt/cdrom
mount -t vfat -o umask=0022,noauto,quiet /dev/sdb /mnt/archos
Comme une commande mount est fastidieuse à taper, on se repose généralement sur le fichier /etc/fstab afin de pouvoir sous-entendre les options, le système de fichiers, et soit le device, soit le point de montage. Il suffit juste qu'il n'y ait pas d'ambiguïté dans ce fichier, qui sera détaillé un peu plus loin dans le tutoriel.
Ainsi les commandes précédentes peuvent devenir :
mount /dev/sda2
mount /dev/cdrom
mount /dev/sdb
ou encore :
mount /mnt/windows
mount /mnt/cdrom
mount /mnt/archos
Si le périphérique est monté avec succès (ce qui sous-entend que le noyau prenne en charge ce type de périphérique, son système de fichiers et que la table des partitions de ce média soit cohérente avec son contenu), alors les fichiers de ce média apparaissent dans le point de montage. Dans ce cas, toutes les informations de montage (device, options, système de fichiers) sont référencées dans /etc/mtab.
On utilise simplement la commande swapoff. Exemple :
swapoff /dev/sda2
On peut vérifier que la swap a diminué avec la commande top.
On utilise la commande umount qui se base sur /etc/mtab. Ainsi on peut passer au choix le point de montage ou le device et on ne passe pas d'option à la commande umount.
Exemple :
umount /dev/sda2
umount /dev/cdrom
umount /dev/sdb
ou encore :
umount /mnt/windows
umount /mnt/cdrom
umount /mnt/archos
Ce fichier permet d'indiquer à quel endroit de l'arborescence Linux va apparaître un système de fichiers (filesystem en anglais, souvent abrégé fs sous Linux). En tant que fichier de configuration global à la machine, il est naturel de le retrouver dans /etc. Il est postfixé "tab" car il est structuré comme un tableau, au même titre que /etc/mtab.
Voici un exemple du fichier /etc/fstab :
Seules les lignes concernant /proc, / et la swap étaient initialement présentes dans ce fichier. Les autres ont été rajoutées à la main.
Chaque ligne correspond à un point de montage (et donc à un device quand il s'agit d'un périphérique de stockage ou l'adresse d'un serveur de fichier s'il s'agit d'un partage réseau). A priori vous devriez avoir moins une ligne concernant /, /proc et la swap. Il ne faut pas modifier ces lignes. Nous allons toutefois compléter ce fichier afin de référencer de nouveaux périphériques et de nouveaux partages réseaux.
Chaque colonne à un rôle bien défini. On peut mettre autant d'espace ou de tabulation qu'on le souhaite, l'objectif étant de rendre le fichier aussi lisible que possible :
Le mapping entre les UUID et les devices générés par udev figure dans /dev/disk/by-uuid.
Exemple :
(mando@silk) (~) $ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 16 sept. 10:58 315746c7-a31f-4d3f-b982-7901cf5f4c59 -> ../../sda4
lrwxrwxrwx 1 root root 10 16 sept. 10:58 487f1e89-985c-4f83-87b7-85e3a8ef128d -> ../../sda3
lrwxrwxrwx 1 root root 10 16 sept. 10:58 60863F6F863F4536 -> ../../sda1
lrwxrwxrwx 1 root root 10 16 sept. 10:58 D0DA4397DA43792C -> ../../sda2
Si l'on reprend notre exemple de fichier /etc/fstab :
On peut utiliser dans /etc/fstab aussi bien la notation /dev/sd... que la notation basée sur les UUID. Quand un point de montage n'est pas associé à un device amovible, on privilégie la seconde notation. Dans le cas contraire (typiquement un point de montage associé à un périphérique USB), on n'utilise pas d'UUID car celui-ci diffère en fonction du périphérique USB inséré.
Les options de montage peuvent exister ou non selon le type du système de fichiers. On retiendra essentiellement les options suivantes.
Comportement :
Propriétaire et groupe propriétaire :
Droits :
Remarque : si un système de fichier est monté en lecture seule (ro), peu importe les droits UNIX associés à ses fichiers et l'utilisateur qui tente d'y accéder, il ne sera pas possible de le modifier, même en root. C'est la raison pour laquelle les options ro et rw ne sont pas rattaché à un utilisateur.
Options spécifiques :
La première étape consiste à déterminer :
Cette information sera répercutée dans la première colonne de /etc/fstab.
On se place dans le cas d'un PC stockant sur son disque des partitions windows et des partitions Linux. L'objectif est d'accéder aux partitions Windows sous Linux. Commençons par déterminer le device associé avec fdisk :
(root@silk) (~) # fdisk -l
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf09a050d
Device Boot Start End Blocks Id System
/dev/sda1 * 1 52 409600 27 Unknown
Partition 1 does not end on cylinder boundary.
/dev/sda2 52 15755 126134272 7 HPFS/NTFS
/dev/sda3 15756 15876 971932+ 82 Linux swap / Solaris
/dev/sda4 15877 60801 360860062+ 83 Linux
La partition qui nous intéresse est ici /dev/sda2 et est écrite en NTFS (appelée ntfs-3g sous Linux). On souhaite faire apparaître cette partition dans /mnt/windows, et ce point de montage ne servira que pour cette partition. On peut donc utiliser son UUID.
(mando@silk) (~) $ ls -l /dev/disk/by-uuid/ | grep sda2
lrwxrwxrwx 1 root root 10 16 sept. 10:58 D0DA4397DA43792C -> ../../sda2
Dans cet exemple l'UUID est D0DA4397DA43792C. Il ne reste plus qu'à créer le répertoire /mnt/windows :
mkdir -p /mnt/windows
... et à corriger /etc/fstab en y ajoutant la ligne :
Ici, la partition est montable/démontable par un utilisateur. Comme on n'a précisé ni l'UID, ni le GID, ce système de fichier est attribué à root et au groupe root. L'umask défini n'autorise que root à modifier les fichiers qui s'y trouvent. Les autres utilisateurs ne peuvent que lire ces données. Cette partition est montée au démarrage.
Il ne reste plus qu'à monter la partition :
mount /mnt/windows
On repère le device associé avec la commande :
dmesg | tail
A priori le nom commence par /dev/sd... La lettre qui suit /dev/sd... dépend de l'ordre de branchement des périphériques USB (Linux prend la première lettre disponible, par exemple /dev/sdc si /dev/sda et /dev/sdb sont déjà utilisés). Pour s'en affranchir on peut définir des règles udev. Supposons que le périphérique que l'on tente de monter s'appelle /dev/sdb
En général, les données sont accessibles via /dev/sdb1 (et /dev/sda2, /dev/sda3 etc... s'il y a plus d'une partition). Pour certains périphériques USB, on accède aux données directement via /dev/sdb. Ceci se reconnaît quand /dev/sdb1 n'apparaît pas dans /dev. C'est typiquement le cas de certains lecteurs MP3.
On créé ensuite un point de montage, par exemple /mnt/usb en tant que root :
mkdir -p /mnt/usb
On complète ensuite le fichier /etc/fstab. On n'a pas intérêt à préciser le type de système de fichiers utilisé (vfat ou ntfs), on laisse plutôt carte blanche en utilisant le mot clé auto. Ainsi, la ligne résultante dans /etc/fstab deviendrait :
Le système de fichiers peut être monté/démonté par un utilisateur et sera monté, attribué à cet utilisateur et au groupe root. Le périphérique ne sera pas monté au démarrage (un support amovible n'étant pas forcément branché, cela paraît naturel !).
Si l'on utilise KDE ou gnome, la prochaine fois que le périphérique sera branché, il devrait être automatiquement monté. On peut d'ores et déjà y accéder en tapant la commande mount appropriée.
Le lecteur CD/DVD est généralement pointé par /dev/cdrom. Si la machine comporte plusieurs lecteurs, d'autres liens sont créés (/dev/cdrom0, /dev/cdrom1 etc..., /dev/cdrom pointant sur l'un deux). En général cette ligne est déjà générée pour le lecteur CD /DVD par défaut, mais quand on a plusieurs lecteurs il faut souvent ajouter une ligne pour les autres.
Exemple : la commande suivante indique cette machine ne contient qu'un lecteur/graveur CD/DVD (/dev/sr0) pointé par deux liens symboliques : /dev/cdrom et /dev/cdrw :
(mando@silk) (~) $ ls -l /dev/cd*
lrwxrwxrwx 1 root root 3 16 sept. 10:58 /dev/cdrom -> sr0
lrwxrwxrwx 1 root root 3 16 sept. 10:58 /dev/cdrw -> sr0
Il suffit de copier coller la ligne associée au lecteur CD/DVD par défaut et corrigé le device associé.
Remarque : il n'est pas nécessaire de préciser plus de droits (notamment rw). Les logiciels de gravure (k3b, brasero...) disposent d'un assistant qui leur permettra d'accéder avec des droits root au disque qu'ils doivent graver.
Si l'on utilise KDE ou gnome, la prochaine fois que le disque sera inséré, il devrait être automatiquement monté. On peut d'ores et déjà y accéder en tapant la commande mount appropriée.
Dans ce tutoriel nous ne détaillerons pas trop la mise en place des partages réseaux. Il existe principalement deux solutions :
Le serveur (au sens nfs ou samba) est la machine qui effectue le partage et met à disposition des fichiers. Le client (au sens nfs ou samba) est la machine qui accède à ces fichiers. Une même machine peut donc avoir à la fois un rôle de serveur et de client. Utiliser samba n'est pas exclusif avec utiliser nfs (que ce soit en tant que serveur ou client). Tous ces rôles sont décorrélés.
Pour plus de détails sur la mise en oeuvre d'un partage réseau, on pourra se référer à ces liens :
http://doc.ubuntu-fr.org/samba
Si le fichier /etc/fstab est correctement renseigné, l'arborescence stockée sur ce périphérique apparaît déjà dans l'arborescence de l'explorateur de fichiers (nautilus sous gnome, konqueror ou dolphin sous KDE).
Si le fichier /etc/fstab est correctement configuré, l'applet KDE "notification de nouveaux de périphériques" s'occupera de lancer les commandes mount automatiquement, dès que le périphérique amovible sera branché.

Pour accéder aux fichiers correspondants, il suffit de cliquer sur "ouvrir dans le gestionnaire de fichiers".
La commande umount sera déclenché au moment de cliquer sur le bouton "eject" correspondant.

L'ensemble des tutoriels Mistra by Mistra est mis à disposition selon les termes de la licence Creative Commons et Paternité - Partage des Conditions Initiales à l'Identique 3.0 Unported. Les autorisations au-delà du champ de cette licence peuvent être obtenues à http://www.mistra.fr/contact-mistra.html.