Un point généralement assez irritant sous GNU/Linux lorsque l'on cherche à
identifier précisément une partition issue d'un média amovible est que tout
se passe comme si le kernel tirait le nom du périphérique aux dés. Le but
ici est donc de se débrouiller pour que notre volume ait toujours le même nom sans
aller torpiller UDEV, que chaque partition puisse avoir le sien, et, tant qu'à faire,
qu'il soit compréhensible par un humain standard.
Une affaire d'alias
Sous Linux, un disque, qu'il soit branché à chaud ou pas, est visible sous /dev. Il
y a encore peu de temps le nommage était /dev/hdX si le disque était IDE (PATA) et
/dev/sdX dans le cas contraire. Si le disque possédait des partitions, celle-ci prenaient
le même nom suivi d'un chiffre indiquant son numéro. Aujourd'hui, après une
récente unification de la gestion des disques PATA/SATA dans le kernel, qu'il soit USB,
IDE ou SCSI, il apparaîtra en /dev/sdX. Le X est ici la base de notre problème car
en fonction de l'ordre d'insertion des médias, cette lettre n'est à peu prés
jamais la même.
La solution à notre problème réside en le fait qu'une partition
formatée avec un système de fichier donné possède, outre ce nom, au
moins deux attributs modifiables par l'utilisateur : un label et un UUID.
L'UUID est une suite de chiffre que l'on peut considérer comme unique et le label est une
simple une chaîne de caractères. Pour un système FAT32 c'est le numéro
de série (XXXX-YYYY) qui fait office est d'UUID.
Ces deux attributs sont utilisés par udev pour créer automatiquement des alias des
partitions permettant de s'affranchir du nommage pseudo aléatoire du kernel en utilisant
des identifiants stables dans le temps.
Ainsi un même volume /dev/sda3 ayant pour UUID 2e39c022-589c-11dd-a48a-7162f299b21d et pour
label ma_partition, va apparaître sous la forme d'un alias en
/dev/disk/by-uuid/2e39c022-589c-11dd-a48a-7162f299b21d et d'un autre en
/dev/disk/by-label/ma_partition.
Modifications des attributs
Chaque système de fichier a ses outils propres pour ce genre de travail. Pour lire les
attributs d'un système EXT2/EXT3 nous utiliserons la commande dumpe2fs : dumpe2fs
/dev/sda3
La commande va entre autre nous indiquer le nom de volume, son UUID, et son Label. Ne reste
maintenant plus qu'à utiliser la commande tune2fs pour changer ces valeurs. Tout d'abord,
le label : tune2fs -L ma_partition /dev/sda3
Pour changer l'UUID, il faut déjà en générer un avec la commande
uuidgen puis encore utiliser la commande tune2fs :
- uuidgen
- > dec3cbc6-0b42-11db-9e45-7542811b6ad4
- tune2fs -U dec3cbc6-0b42-11db-9e45-7542811b6ad4 /dev/sda3
Pour donner le numéro de série dec3cbc6-0b42-11db-9e45-7542811b6ad4 à la
partition sda3, et ainsi pouvoir y accéder par un
/dev/disk/by-uuid/dec3cbc6-0b42-11db-9e45-7542811b6ad4, il suffit de taper : tune2fs -U
dec3cbc6-0b42-11db-9e45-7542811b6ad4 /dev/sda3
Une fois ces modifications réalisée, il suffit de débrancher puis de
rebrancher le disque (ou démonter/remonter les partitions s'il s'agit de disques IDE ou
SATA), pour que notre /dev/sda3 soit disponible sous le nom de
/dev/disk/by-uuid/dec3cbc6-0b42-11db-9e45-7542811b6ad4 ou beaucoup mieux
/dev/disk/by-label/ma_partition.
Pour les disques en FAT32, je n'ai pas trouvé le moyen de changer dynamiquement
numéro de série et label (mlabel du paquet mtools devrait pourtant permettre de le
faire). Le choix se fait donc au formatage de la partition : mkdosfs -n truc_en_fat -i ABDE1234
/dev/sd4
Ce qui dans ce cas nous donne un /dev/disk/by-uuid/ABCD-1234 et un /dev/disk/by-label/truc_en_fat
Utiliser les attributs pour le montage
La syntaxe de fstab a été modifiée pour prendre directement en compte les
deux attributs, soit par UUID : UUID=dec3cbc6-0b42-11db-9e45-7542811b6ad4 /media/ma_partition
ext3 noatime,nodiratime 1 2
Encore un peu cryptique, ce serait plus sympathique directement avec le label :
label=ma_partition /media/ma_partition ext3 noatime,nodiratime 1 2
Voilà qui est beaucoup mieux.
Utiliser les attributs pour désactiver des
volumes
Dans de nombreuses situations il n'est pas souhaitable que certaines partitions apparaissent sur
le bureau de Gnome ou même qu'elle soit montées automatiquement. C'est le cas
lorsque l'on a un disque "Alien" contenant une série de partitions utilisées par
exemple par VMWare ou encore
pour la partition de pam_usb
contenant les clefs.
Il est possible d'utiliser gconf-editor et de basculer /apps/nautilus/desktop/volumes_visible
à false. Mais l'on perd du coup tous les volumes ce qui n'est pas acceptable.
Une autre solution consiste à ajouter un "noauto" dans les options de montage de
gnome-volume-manager par un click-droit/propriétés sur le volume. Mais cela ne
marche pas avec tous les millésimes de Gnome.
La solution que j'ai retenue est d'ajouter ses propres préférences à HAL qui
est chargé de la découverte des volumes. Pour cela, il suffit simplement de
créer un fichier /usr/share/hal/fdi/policy/preferences.fdi et d'utiliser les UUID des
volumes à ne pas monter :
A partir de maintenant cette partition sera systématiquement ignorée. Pour que cela
fonctionne à chaud, il faut redémarrer HAL par /etc/init.d/haldaemon restart,
retirer la clef et la repositionner. Le volume devrait du coup ne plus être affiché
sur le bureau.
Conclusion
Voilà nos disques sont maintenant un peu plus civilisés. Ce type de nommage est
particulièrement utile dés qu'il s'agit de périphériques USB, par
exemple un disque de backup ou une clef de stockage. En gros à chaque fois que l'on a
besoin d'utiliser un montage dans un script. Outre cet usage, les labels sont aujourd'hui
universellement prise en charge par les bureaux pour nommer dynamiquement les icônes.
Billet original de Artisan
Numérique.Votez pour cet article sur le Planet Libre.