Nommer les disques selon vos goûts
Le 13 octobre 2008 à 12:47, 4ième version du billet (Mise à jour unification PATA/SATA, procédure HAL et FAT).

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.

Historique (tout afficher)
  • v4 - Mise à jour unification PATA/SATA, procédure HAL et FAT (2008-10-25 15:05)
  • v3 - Labels et UUID (2008-10-13 11:45)

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 :

  <?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
  <device>
    <match key="volume.uuid" string="a78f4795-08a4-4d7f-855d-23c61c769d49">
      <merge key="volume.ignore" type="bool">true</merge>
    </match>
  </device>
</deviceinfo>

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.

Commentaires

Osku , le 8 November, 2007 - 11:31

Je me demande comment j'ai pu passer à coté de ton site jusque là.
Je le mets dans mes "favoris" !

Chouette article, j'avais cherché puis laissé tomber.. Wink

Ulhume, le 8 November, 2007 - 11:52

Voilà bien une remarque qui fait plaisir Smiling

domo , le 8 November, 2007 - 13:02

Et bien, moi qui voulait justement changer le label de mes disques.
Mon Rss feeder me donne la reponse toute cuite, merci pour l'article Ulhume.

sidney_v , le 8 November, 2007 - 15:03

Très bon article, et surtout de très bonne qualité (tout comme le reste du site).

Merci d'avoir pris le temps de partager cette astuce qui va s'avérer bien pratique au quotidien.

zetotof , le 9 November, 2007 - 00:30

Je note.

Trancept , le 29 June, 2008 - 09:13

Super article, voila qui va m'être très utile !

Ulhume, le 29 June, 2008 - 09:19

@Trancept Il n'est pas tout jeune mais ravis que cela puisse servir Smiling

i M@N , le 13 October, 2008 - 13:01

Hello.

Pour mettre un label à une partition FAT32 (ça fonctionne sous Ubuntu en tout cas) :
sudo mlabel -i /dev/sdaX ::label
avec sdaX = la partition et label = ce que vous voulez

@+...

Ulhume, le 13 October, 2008 - 14:38

@M@N Alors c'est là que ça coince étrangement chez moi, j'ai pas l'option -i dans ma version de mlabel (3.9.11). Sinon c'est bien la syntaxe que j'ai tenté d'utiliser. Vu que ma partition était vide, je n'y ai pas non plus passé des heures.

i M@N , le 13 October, 2008 - 15:10

reuh ...

iman@ubuntu:~$ mlabel -v
Mtools version 3.9.11, dated May 31st, 2007
Usage: mlabel [-vscVn] [-N serial] drive:

Apparemment on a la même ... mais en effet le -i n'apparaît pas dans le man mlabel ... j'avais trouvé la commande sur le net en fait.

@+...

Ulhume, le 13 October, 2008 - 15:16

@i M@N

Ah donc c'était pas ça le problème. Je viens de retenter l'outil et voilà ce que j'obtiens :

gaston$sudo mlabel -i /dev/sde1 ::label
Total number of sectors (989792) not a multiple of sectors per track (63)!
Add mtools_skip_check=1 to your .mtoolsrc file to skip this test
gaston$ 

A y regarder de plus prés, c'est la taille de ma partition que semble lui poser problème. Pourtant elle est bel et bien lisible sous WilanOS. J'ai donc rajouté l'option indiquée et là en effet, ça semble fonctionner....

Merci de m'avoir obligé à regarder cela un peu moins rapidement Smiling Je vais mettre à jour le tuto.

i M@N , le 13 October, 2008 - 18:59

reuh ...

De rien ... c'est pour toutes les fois où c'est moi qui apprends de ce blog. : )

Sinon c'est "i M@N" ... avec un i devant. ; )

@+...

slc66 , le 13 October, 2008 - 23:00

Je te lis très régulièrement avec plaisir et voilà une nouvelle fois une mine d'info. surper bien présentées.

Si je peux me permettre pour compléter cet article, il y a une commande qui permet de lister d'un seul coup tous les UUID : blkid

Cette commande est distribuée sous Debian dans le package e2fsprogs.

Ulhume, le 13 October, 2008 - 23:30

@i M@N Ok, je vais faire gaffe mais c'est donnant-donnant, de ton côté tu n'appelles plus ce "site", un "blog" Wink

Ulhume, le 13 October, 2008 - 23:32

@slc66 Ah oui, très bon ça ! C'est dans le même paquet sous Mandriva. merci Smiling

AP , le 21 October, 2008 - 10:06

Pour assigner un UUID aux volumes formatés en reiserfs, il y a la commande "reiserfstune" qui a pour syntaxe :
reiserfstune -u | --uuid UUID|random device

Le "random" économise l'étape du "uuidgen". Petit détail caractéristique du "reiserfstune" (et peut être valable pour les filesystems ext2/3) : le filesystem doit être démonté avant que son uuid soit modifié. Pour le reiserfs, en tout cas, ça ne peut se faire "à chaud" (c'est à dire filesystem monté).

Poster un nouveau commentaire

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

Connexion utilisateur
Les derniers bavardages...