Linux sans magie #38 — UUID, LABEL, PARTUUID : identifier le bon filesystem sans dépendre de /dev/sdX

Comprendre UUID, LABEL, PARTUUID et PARTLABEL sous Linux, puis identifier un filesystem de façon fiable avec lsblk, blkid et findmnt.

Dans l’article précédent, nous avons appris à distinguer disque, partition, filesystem et point de montage.

Une nouvelle question apparaît immédiatement : comment identifier durablement le bon filesystem ?

Un nom comme /dev/sda1 est pratique à lire, mais il dépend de la manière dont Linux détecte les périphériques. Ajouter, retirer ou réordonner du matériel peut changer ces noms.

Linux dispose donc d’autres identifiants, notamment UUID, LABEL, PARTUUID et PARTLABEL.

L’objectif de cet article est de comprendre ce qu’ils identifient réellement et de les observer avec lsblk, blkid et findmnt, sans modifier le stockage.

Contexte et problème

Prenons une situation simple.

Vous voyez dans lsblk :

sda
└─sda1

Il est tentant de considérer /dev/sda1 comme « l’identité » de la partition ou du filesystem.

Ce n’est pas une bonne hypothèse à long terme.

La documentation de mount et fstab rappelle que les noms de périphériques comme /dev/sda ou /dev/sdb peuvent dépendre de l’ordre de détection du matériel. Un changement de topologie peut donc conduire un même périphérique à recevoir un autre nom.

Pour éviter de lier une configuration à un nom potentiellement variable, Linux permet d’utiliser des identifiants plus stables.

Mais encore faut-il distinguer ce qu’ils représentent.

Concept ou architecture

Le nom du périphérique : /dev/sdX

Un chemin comme :

/dev/sda1

désigne un block device tel qu’il est actuellement exposé sous /dev.

C’est utile pour observer la machine, mais ce nom ne doit pas être confondu avec l’identité intrinsèque du filesystem.

Selon le matériel et l’ordre de détection, un périphérique peut recevoir un nom différent après une modification de la configuration.

UUID : l’identifiant du filesystem

UUID signifie Universally Unique Identifier.

Dans ce contexte, il identifie le filesystem lui-même.

Par exemple, une sortie peut montrer :

UUID="3a4f2e2d-7d8c-4e4b-9e6b-1e0f7a7b9c42"

Cet identifiant est stocké dans les métadonnées du filesystem.

Deux conséquences pratiques en découlent :

  • l’UUID n’est pas le nom du block device ;
  • le même filesystem peut rester identifiable même si son nom /dev/... change.

LABEL : un nom lisible pour le filesystem

Un filesystem peut également avoir un LABEL.

Exemple :

LABEL="DATA"

Le label est plus lisible pour un humain qu’un UUID.

Il peut donc être utile lorsqu’on veut donner un nom fonctionnel à un filesystem.

Mais un label n’offre pas nécessairement la même propriété d’unicité qu’un UUID. Deux filesystems peuvent être configurés avec le même label.

Dans une configuration où l’absence d’ambiguïté est importante, il faut donc tenir compte de cette différence.

PARTUUID : l’identifiant de la partition

PARTUUID ne désigne pas le filesystem.

Il identifie la partition.

C’est une distinction importante.

Sur une partition donnée, on peut avoir :

PARTUUID="4f40a8d1-02"
UUID="3a4f2e2d-7d8c-4e4b-9e6b-1e0f7a7b9c42"

Ces deux valeurs décrivent deux couches différentes :

  • PARTUUID : la partition ;
  • UUID : le filesystem présent dans cette partition.

Si le filesystem est recréé, son UUID peut changer alors que l’identité de la partition reste distincte.

PARTLABEL : le label de la partition

PARTLABEL joue pour la partition un rôle comparable à LABEL pour le filesystem.

Il appartient à la table de partitions lorsqu’elle prend en charge ce type d’information.

Il ne faut donc pas confondre :

LABEL
PARTLABEL

Le premier concerne le filesystem.

Le second concerne la partition.

Prérequis

Les exemples supposent un système GNU/Linux disposant des utilitaires util-linux suivants :

  • lsblk ;
  • blkid ;
  • findmnt.

Le lab est uniquement en lecture.

Aucune commande ne :

  • modifie un label ;
  • modifie un UUID ;
  • reformate un filesystem ;
  • modifie la table de partitions ;
  • monte ou démonte un filesystem ;
  • modifie /etc/fstab.

Comme vu dans l’article précédent, certaines informations peuvent dépendre des privilèges et de la disponibilité de la base udev. Le but ici est d’observer ce que l’environnement expose, sans ajouter de privilèges inutilement.

Mise en pratique

Étape 1 — Voir les filesystems avec lsblk -f

Commencez par :

lsblk -f

Cette vue affiche généralement des colonnes comme :

  • NAME ;
  • FSTYPE ;
  • FSVER ;
  • LABEL ;
  • UUID ;
  • FSAVAIL ;
  • FSUSE% ;
  • MOUNTPOINTS.

L’objectif n’est pas encore de tout interpréter.

Choisissez un filesystem monté adossé à un block device visible dans lsblk. Vous pouvez prendre celui qui contient / uniquement si sa source correspond bien à un block device présent dans la sortie lsblk.

Notez :

  • son nom courant sous /dev ;
  • son type de filesystem ;
  • son UUID éventuel ;
  • son label éventuel ;
  • son point de montage.

Étape 2 — Afficher aussi PARTUUID et PARTLABEL

Pour distinguer identité du filesystem et identité de la partition, utilisez une sélection explicite de colonnes :

lsblk -o NAME,TYPE,FSTYPE,LABEL,UUID,PARTLABEL,PARTUUID,MOUNTPOINTS

Sur une partition classique, vous pourrez alors comparer :

NAME   TYPE FSTYPE LABEL UUID                                 PARTLABEL PARTUUID
sda1   part ext4   DATA  3a4f...                             data      4f40a8d1-02

Les valeurs sont propres à votre machine.

La leçon importante est ailleurs :

UUID et PARTUUID ne décrivent pas le même objet.

Étape 3 — Interroger les métadonnées avec blkid

Vous pouvez ensuite observer les identifiants avec :

blkid

blkid lit les attributs associés aux block devices et peut notamment afficher :

  • le type de filesystem ;
  • le LABEL ;
  • l’UUID ;
  • le PARTUUID ;
  • le PARTLABEL lorsqu’ils sont disponibles.

Exemple conceptuel :

/dev/sda1: LABEL="DATA" UUID="3a4f..." TYPE="ext4" PARTLABEL="data" PARTUUID="4f40a8d1-02"

Ne considérez pas cette forme comme une sortie obligatoire : les informations disponibles dépendent du device, du type de partitionnement et du filesystem.

La documentation de blkid rappelle aussi qu’un utilisateur non privilégié peut obtenir certaines informations à partir du cache au lieu d’un probing direct. Il ne faut donc pas confondre « information affichée » et « probing direct du périphérique » dans tous les contextes.

Étape 4 — Partir du montage avec findmnt

Revenons maintenant à la vue « filesystem monté ».

Commencez par :

findmnt -o TARGET,SOURCE,FSTYPE,UUID,LABEL

Puis ciblez un point de montage dont la source correspond à un block device visible dans lsblk :

findmnt <POINT_DE_MONTAGE>

Vous pouvez utiliser / uniquement si sa source remplit cette condition. findmnt permet alors de partir de la cible de montage et de retrouver la source associée.

Vous pouvez ainsi relier :

point de montage
    ↓
source actuellement utilisée
    ↓
filesystem
    ↓
UUID / LABEL

Cette approche complète bien lsblk et blkid :

  • lsblk donne une vue structurée des block devices ;
  • blkid expose les attributs des devices ;
  • findmnt décrit les filesystems montés.

Étape 5 — Comparer nom courant et identifiants

Choisissez un filesystem réel de votre système dont le montage est adossé à un block device visible dans lsblk.

Relevez son nom dans :

lsblk -f

Puis son UUID avec :

lsblk -o NAME,UUID,MOUNTPOINTS

et son montage avec :

findmnt -o TARGET,SOURCE,UUID,LABEL

Vous devez maintenant pouvoir formuler correctement les informations :

Le filesystem monté sur / est actuellement accessible depuis tel block device, et son UUID est telle valeur.

Cette phrase distingue :

  • l’emplacement de montage ;
  • le nom courant du block device ;
  • l’identité du filesystem.

Résultat attendu

À la fin du lab, vous devez savoir expliquer la différence entre :

  • /dev/sda1 : nom courant du block device ;
  • UUID : identifiant du filesystem ;
  • LABEL : nom lisible du filesystem ;
  • PARTUUID : identifiant de la partition ;
  • PARTLABEL : label de la partition.

Vous devez aussi savoir dans quel outil chercher l’information :

  • lsblk pour la structure des block devices et les attributs associés ;
  • blkid pour les métadonnées d’identification des block devices ;
  • findmnt pour les filesystems montés.

Vérification

Exécutez :

lsblk -o NAME,TYPE,FSTYPE,LABEL,UUID,PARTLABEL,PARTUUID,MOUNTPOINTS

puis :

findmnt -o TARGET,SOURCE,FSTYPE,UUID,LABEL

Choisissez un montage réel et vérifiez que vous savez répondre à ces questions :

  1. quel est son point de montage ?
  2. quelle est sa source actuelle, et correspond-elle au block device choisi dans lsblk ?
  3. quel est son type de filesystem ?
  4. quel est son UUID ?
  5. son block device est-il une partition ?
  6. si oui, un PARTUUID est-il exposé ?

Si ces réponses sont distinctes et cohérentes, le modèle mental est acquis.

Bonnes pratiques

Ne traitez pas /dev/sda1 comme une identité durable.

Le nom est utile pour observer la topologie présente, mais il peut dépendre de l’ordre de détection des périphériques.

Préférez une formulation précise :

  • « filesystem identifié par UUID » ;
  • « partition identifiée par PARTUUID » ;
  • « block device actuellement nommé /dev/... ».

Évitez aussi de considérer LABEL comme forcément unique.

Un label est pratique pour la lisibilité, mais il appartient à la configuration du filesystem et peut être dupliqué.

Enfin, utilisez l’outil correspondant à la question :

  • topologie : lsblk ;
  • attributs du device : blkid ;
  • état des montages : findmnt.

Sécurité

Les commandes présentées sont en lecture seule.

Le principal risque n’est donc pas la commande elle-même, mais l’interprétation.

Confondre UUID et PARTUUID peut conduire, plus tard, à référencer le mauvais objet dans une configuration.

De même, utiliser un nom /dev/sdX comme s’il était immuable peut rendre une configuration fragile après une modification du matériel ou de l’ordre de détection.

Cet article ne modifie aucun identifiant.

Changer un UUID, un LABEL ou une table de partitions appartient à une autre opération et nécessite des précautions spécifiques.

Coûts

Aucun service payant ni ressource supplémentaire n’est nécessaire.

Les commandes consultent uniquement l’état local du système.

Limites et points de vigilance

Tous les block devices n’exposent pas nécessairement toutes les colonnes présentées.

Un device peut :

  • ne pas contenir de filesystem ;
  • ne pas être une partition ;
  • ne pas avoir de label ;
  • ne pas exposer de PARTUUID ;
  • faire partie d’une architecture plus complexe.

Les relations deviennent notamment plus riches avec :

  • LVM ;
  • RAID ;
  • device mapper ;
  • loop devices ;
  • stockage réseau.

Autre limite importante : blkid et lsblk ne répondent pas exactement à la même question et ne doivent pas être considérés comme deux sorties interchangeables.

Le but est de croiser les informations, pas de forcer une égalité de présentation entre les outils.

Enfin, cet article n’aborde pas encore /etc/fstab.

L’utilisation de UUID=, LABEL=, PARTUUID= ou PARTLABEL= dans une configuration persistante sera traitée séparément, car elle implique une logique de montage et de démarrage qui mérite son propre chapitre.

Rollback ou nettoyage

Aucun rollback ni nettoyage n’est nécessaire.

Toutes les commandes utilisées dans cet article sont destinées à l’observation.

Références officielles

Conclusion

/dev/sda1, UUID, LABEL, PARTUUID et PARTLABEL ne sont pas cinq façons de nommer exactement la même chose.

Le nom /dev/... décrit le block device tel qu’il est actuellement exposé. UUID et LABEL appartiennent au filesystem. PARTUUID et PARTLABEL appartiennent à la partition.

Savoir distinguer ces identifiants permet de raisonner sur le stockage sans dépendre uniquement d’un nom de device potentiellement variable.