Persistent block device naming (Français)

État de la traduction:
Cet article est la version francophone de
Persistent block device naming
. Date de la dernière traduction: 2023-02-18. Vous pouvez aider à synchroniser la traduction s'il y a eu des
changements
dans la version anglaise.
Related articles
fstab (Français)
udev (Français)
LVM (Français)
Cet article décrit comment utiliser des noms persistants pour vos
périphériques de type bloc
. Ceci a été rendu possible grâce à l'introduction d'
udev
et présente quelques avantages par rapport à l'attribution de noms par bus. Si votre machine dispose de plus d'un contrôleur de disque SATA, SCSI ou IDE, l'ordre dans lequel les nœuds de périphériques correspondants sont ajoutés est arbitraire. Cela peut avoir pour conséquence que les noms de périphériques comme /dev/sda et /dev/sdb changent à chaque démarrage, ce qui peut aboutir à un système non amorçable,
kernel panic
(la panique du noyau) ou la disparition d'un périphérique de type bloc. Un nommage persistant résout ces problèmes.
Note
Les noms persistants ont des limites qui sont hors du champ de cet article. Par exemple, alors que
Mkinitcpio
peut prendre en charge une méthode,
systemd
peut imposer ses propres limites (par exemple
FS#42884
) sur le nommage qu'il peut prendre en charge au démarrage.
Cet article n'est pas pertinent pour les volumes logiques de
LVM
, puisque les chemins
/dev/
NomDuGroupeDeVolume
/
NomDeVolumeLogique
vers les périphériques sont permanents.
Méthodes de nommage persistantes
Il existe quatre schémas différents pour l'appellation persistante:
by-label
,
by-uuid
,
by-id et by-path
. Pour ceux qui utilisent des disques avec
une table de partitions GUID (GPT)
, deux schémas supplémentaires peuvent être utilisés
by-partlabel
et
by-partuuid
. Vous pouvez également utiliser des
noms de périphériques statiques avec Udev
.
Les répertoires de
/dev/disk/
sont créés et détruits dynamiquement, selon qu'ils contiennent ou non des périphériques.
Note
Attention, le
clonage de disque
crée deux disques différents portant le même nom.
Les sections suivantes décrivent les différentes méthodes de nommage persistant et leur utilisation.
La commande
lsblk
peut être utilisée pour visualiser graphiquement les premiers schémas persistants:
$ lsblk -f
NAME   FSTYPE LABEL  UUID                                 MOUNTPOINT
sda
├─sda1 vfat          CBB6-24F2                            /boot
├─sda2 ext4   SYSTEM 0a3407de-014b-458b-b5c1-848e92a327a3 /
├─sda3 ext4   DATA   b411dc99-f0a0-4c87-9e05-184977be8539 /home
└─sda4 swap          f9fe0b69-a280-415d-a03a-a32752370dee [SWAP]
Pour ceux qui utilisent
GPT
, utilisez la commande
blkid
à la place. Ce dernier est plus pratique pour les scripts, mais plus difficile à lire.
# blkid
/dev/sda1: UUID="CBB6-24F2" TYPE="vfat" PARTLABEL="EFI SYSTEM PARTITION" PARTUUID="d0d0d110-0a71-4ed6-936a-304969ea36af"
/dev/sda2: LABEL="SYSTEM" UUID="0a3407de-014b-458b-b5c1-848e92a327a3" TYPE="ext4" PARTLABEL="GNU/LINUX" PARTUUID="98a81274-10f7-40db-872a-03df048df366"
/dev/sda3: LABEL="DATA" UUID="b411dc99-f0a0-4c87-9e05-184977be8539" TYPE="ext4" PARTLABEL="HOME" PARTUUID="7280201c-fc5d-40f2-a9b2-466611d3d49e"
/dev/sda4: UUID="f9fe0b69-a280-415d-a03a-a32752370dee" TYPE="swap" PARTLABEL="SWAP" PARTUUID="039b6c1c-7553-4455-9537-1befbc9fbc5b"
by-label
Presque tous les
types de systèmes de fichiers
peuvent avoir une étiquette (
label
). Toutes vos partitions qui en ont une sont listées dans le répertoire
/dev/disk/by-label
.
$ ls -l /dev/disk/by-label
total 0
lrwxrwxrwx 1 root root 10 May 27 23:31 DATA -> ../../sda3
lrwxrwxrwx 1 root root 10 May 27 23:31 SYSTEM -> ../../sda2
La plupart des systèmes de fichiers permettent de définir l'étiquette à la création du système de fichiers, consultez la
page de manuel
de l'utilitaire
mkfs.*
correspondant. Pour certains systèmes de fichiers, il est également possible de modifier les étiquettes. Voici quelques méthodes pour modifier les étiquettes des systèmes de fichiers courants :
swap
swaplabel -L "
nouvelle étiquette
" /dev/
XXX
avec
util-linux
ext2/3/4
e2label /dev/
XXX
"
nouvelle étiquette
"
avec
e2fsprogs
btrfs
btrfs filesystem label /dev/
XXX
"
nouvelle étiquette
"
avec
btrfs-progs
reiserfs
reiserfstune -l "
nouvelle étiquette
" /dev/
XXX
avec
reiserfsprogs
AUR
jfs
jfs_tune -L "
nouvelle étiquette
" /dev/
XXX
avec
jfsutils
xfs
xfs_admin -L "
nouvelle étiquette
" /dev/
XXX
avec
xfsprogs
fat/vfat
fatlabel /dev/
XXX
"
nouvelle étiquette
"
avec
dosfstools
mlabel -i /dev/
XXX
::"
nouvelle étiquette
"
avec
mtools
exfat
tune.exfat -L "
nouvelle étiquette
" /dev/
XXX
avec
exfatprogs
exfatlabel /dev/
XXX
"
nouvelle étiquette
"
avec
exfatprogs
or
exfat-utils
ntfs
ntfslabel /dev/
XXX
"
nouvelle étiquette
"
avec
ntfs-3g
udf
udflabel /dev/
XXX
"
nouvelle étiquette
"
avec
udftools
crypto_LUKS (LUKS2 uniquement)
cryptsetup config --label="
nouvelle étiquette
" /dev/
XXX
avec
cryptsetup
L'étiquette d'un périphérique peut être obtenu avec
lsblk
:
$ lsblk -dno LABEL /dev/sda2
Arch Linux
Ou avec
blkid
:
# blkid -s LABEL -o value /dev/sda2
Arch Linux
Note
Le système de fichiers ne doit pas être monté pour changer son étiquette. Pour le système de fichiers racine, cela peut être réalisé en démarrant à partir d'un autre volume.
Les étiquettes doivent être sans ambiguïté pour éviter tout conflit éventuel.
Les étiquettes peuvent comporter jusqu'à 16 caractères.
Comme l'étiquette est une propriété du système de fichiers, elle ne convient pas pour adresser un seul périphérique RAID de manière persistante.
Lorsque vous utilisez des conteneurs chiffrés avec
dm-crypt
, les étiquettes des systèmes de fichiers à l'intérieur des conteneurs ne sont pas disponibles tant que le conteneur est verrouillé/chiffré.
by-uuid
UUID
est un mécanisme pour donner à chaque système de fichiers un identifiant unique.
Ces identificateurs sont générés par les utilitaires du système de fichiers (par ex:
mkfs.*
) quand les partitions sont formatées et sont définies de manière à ce que les collisions soient improbables.
Tous les systèmes de fichiers GNU/Linux (y compris les en-têtes de swap et LUKS des périphériques chiffrés bruts) prennent en charge les UUID. Les systèmes de fichiers FAT et NTFS (label
fat
et
windows
ci-dessus) ne prennent pas en charge les UUID, mais sont toujours listés dans
/dev/disk/by-uuid
avec un UID plus court (identifiant unique).
$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 May 27 23:31 0a3407de-014b-458b-b5c1-848e92a327a3 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 27 23:31 b411dc99-f0a0-4c87-9e05-184977be8539 -> ../../sda3
lrwxrwxrwx 1 root root 10 May 27 23:31 CBB6-24F2 -> ../../sda1
lrwxrwxrwx 1 root root 10 May 27 23:31 f9fe0b69-a280-415d-a03a-a32752370dee -> ../../sda4
L'UUID d'un périphérique peut être obtenu avec
lsblk
:
$ lsblk -dno UUID /dev/sda1
CBB6-24F2
Ou avec
blkid
:
# blkid -s UUID -o value /dev/sda1
CBB6-24F2
L'avantage de la méthode UUID est qu'il est beaucoup moins probable que des collisions de noms se produisent qu'avec les étiquettes. De plus, il est généré automatiquement lors de la création du système de fichiers. Il restera, par exemple, unique même si l'appareil est branché à un autre système (qui peut avoir un appareil avec la même étiquette).
L'inconvénient est que les UUIDs rendent les longues lignes de code difficiles à lire et rompent le formatage dans de nombreux fichiers de configuration (par ex:
fstab
ou
crypttab
). Aussi chaque fois qu'une partition est redimensionnée ou reformatée, un nouvel UUID est généré et les configurations doivent être ajustées manuellement.
Astuce
Dans le cas où votre partition swap n' a pas d'UUID assigné, vous devrez réinitialiser la partition swap en utilisant l'utilitaire
mkswap
.
by-id et by-path
by-id
crée un nom unique en fonction du numéro de série du matériel,
by-path
en fonction du chemin physique le plus court (selon sysfs). Les deux contiennent des chaînes de caractères pour indiquer à quel sous-système elles appartiennent (c'est-à-dire
pci-
pour
by-path
, et
ata-
pour
by-id
), donc ils sont reliés au matériel qui contrôle l'appareil.
Ceci implique différents niveaux de persistance: le
by-path
changera lorsque l'appareil est branché sur un port différent du contrôleur, le
by-path
changera lorsque l'appareil est branché sur un port d'un contrôleur matériel soumis à un autre sous-système
[1]
. Par conséquent, les deux ne conviennent pas pour obtenir un nommage persistant tolérant aux changements de matériel.
Cependant, les deux fournissent des informations importantes pour trouver un périphérique particulier dans une grande infrastructure matérielle. Par exemple, si vous n'attribuez pas manuellement des étiquettes persistantes (
by-label
ou
by-partlabel
) et que vous conservez un répertoire avec l'utilisation du port matériel,
by-id
et
by-path
peuvent être utilisés pour trouver un périphérique particulier.
[2]
[3]
by-id
crée également des liens
World Wide Name
de périphériques de stockage qui le prennent en charge. Contrairement aux autres liens
by-id
, les WWN sont entièrement persistants et ne changent pas en fonction du sous-système utilisé.
Note
by-id
et
by-path
liens ne peuvent être considérés comme persistants que pour les disques, pas pour les partitions. Les partitions seront référencées par leur numéro dans la table de partition et cela peut changer si les partitions sont réorganisées.
$ ls -l /dev/disk/by-id/
total 0
lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470 -> ../../sda
lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-part4 -> ../../sda4
lrwxrwxrwx 1 root root 10 May 27 23:31 mmc-SD32G_0x0040006d -> ../../mmcblk0
lrwxrwxrwx 1 root root 10 May 27 23:31 mmc-SD32G_0x0040006d-part1 -> ../../mmcblk0p1
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f -> ../../sda
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part4 -> ../../sda4
$ ls -l /dev/disk/by-path/
total 0
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1 -> ../../sda
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part4 -> ../../sda4
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:07:00.0-platform-rtsx_pci_sdmmc.0 -> ../../mmcblk0
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:07:00.0-platform-rtsx_pci_sdmmc.0-part1 -> ../../mmcblk0p1
NVMe
Les identifiants de périphériques NVMe persistants sont préfixés par
nvme-
[4]
, par opposition à
wwn-
. Le
World Wide Name
utilisé est un format plus moderne du
Extended Unique Identifier (EUI)
par rapport à la plupart des périphériques ATA ou SCSI.
$ ls -l /dev/disk/by-id/
total 0
lrwxrwxrwx 1 root root 13 Feb 12 16:28 nvme-eui.002538570142d716 -> ../../nvme1n1
lrwxrwxrwx 1 root root 15 Feb 12 16:28 nvme-eui.002538570142d716-part1 -> ../../nvme1n1p1
lrwxrwxrwx 1 root root 15 Feb 12 16:28 nvme-eui.002538570142d716-part2 -> ../../nvme1n1p2
lrwxrwxrwx 1 root root 13 Feb 12 16:28 nvme-eui.e8238fa6bf530001001b448b4566aa1a -> ../../nvme0n1
lrwxrwxrwx 1 root root 15 Feb 12 16:28 nvme-eui.e8238fa6bf530001001b448b4566aa1a-part1 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root 15 Feb 12 16:28 nvme-eui.e8238fa6bf530001001b448b4566aa1a-part2 -> ../../nvme0n1p2
lrwxrwxrwx 1 root root 13 Feb 12 16:28 nvme-Samsung_SSD_970_EVO_Plus_2TB_S4J4NJ0N704064T -> ../../nvme1n1
lrwxrwxrwx 1 root root 15 Feb 12 16:28 nvme-Samsung_SSD_970_EVO_Plus_2TB_S4J4NJ0N704064T-part1 -> ../../nvme1n1p1
lrwxrwxrwx 1 root root 15 Feb 12 16:28 nvme-Samsung_SSD_970_EVO_Plus_2TB_S4J4NJ0N704064T-part2 -> ../../nvme1n1p2
lrwxrwxrwx 1 root root 13 Feb 12 16:28 nvme-WDS100T1X0E-00AFY0_21455A801268 -> ../../nvme0n1
lrwxrwxrwx 1 root root 15 Feb 12 16:28 nvme-WDS100T1X0E-00AFY0_21455A801268-part1 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root 15 Feb 12 16:28 nvme-WDS100T1X0E-00AFY0_21455A801268-part2 -> ../../nvme0n1p2
$ ls -l /dev/disk/by-path/
total 0
lrwxrwxrwx 1 root root 13 Feb 12 16:28 pci-0000:01:00.0-nvme-1 -> ../../nvme0n1
lrwxrwxrwx 1 root root 15 Feb 12 16:28 pci-0000:01:00.0-nvme-1-part1 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root 15 Feb 12 16:28 pci-0000:01:00.0-nvme-1-part2 -> ../../nvme0n1p2
lrwxrwxrwx 1 root root 13 Feb 12 16:28 pci-0000:04:00.0-nvme-1 -> ../../nvme1n1
lrwxrwxrwx 1 root root 15 Feb 12 16:28 pci-0000:04:00.0-nvme-1-part1 -> ../../nvme1n1p1
lrwxrwxrwx 1 root root 15 Feb 12 16:28 pci-0000:04:00.0-nvme-1-part2 -> ../../nvme1n1p2
by-partlabel
Note
Cette méthode ne concerne que les disques avec une
Table de partitions GUID (GPT)
.
Les étiquettes de partition peuvent être définis dans l'en-tête de
l'entrée de partition
sur les disques GPT.
Cette méthode est très similaire aux
étiquettes du système de fichiers
, sauf que le répertoire dynamique est
/dev/disk/by-partlabel
.
ls -l /dev/disk/by-partlabel/
total 0
lrwxrwxrwx 1 root root 10 May 27 23:31 EFI\x20SYSTEM\x20PARTITION -> ../../sda1
lrwxrwxrwx 1 root root 10 May 27 23:31 GNU\x2fLINUX -> ../../sda2
lrwxrwxrwx 1 root root 10 May 27 23:31 HOME -> ../../sda3
lrwxrwxrwx 1 root root 10 May 27 23:31 SWAP -> ../../sda4
L'étiquette de partition d'un périphérique peut être obtenue avec
lsblk
:
$ lsblk -dno PARTLABEL /dev/sda1
Partition Système EFI
Ou avec
blkid
:
# blkid -s PARTLABEL -o value /dev/sda1
Partition Système EFI
Note
Les étiquettes de partition GPT doivent également être différentes pour éviter les conflits. Pour changer l'étiquette de votre partition, vous pouvez utiliser
gdisk
ou la version basée sur ncurses
cgdisk
. Les deux sont disponibles à partir du paquet
gptfdisk
. Consultez
les outils de partitionnement (en)
.
Selon la spécification, les étiquettes de partition GPT peuvent contenir jusqu' à 72 caractères.
by-partuuid
Comme les
étiquettes de partition GPT
, les UUID de partition GPT sont définis dans
l'entrée de partition
sur les disques GPT.
Le répertoire dynamique est similaire à d'autres méthodes et, comme
les systèmes de fichiers UUID
, l'utilisation des UUID est préférable aux étiquettes.
ls -l /dev/disk/by-partuuid/
total 0
lrwxrwxrwx 1 root root 10 May 27 23:31 039b6c1c-7553-4455-9537-1befbc9fbc5b -> ../../sda4
lrwxrwxrwx 1 root root 10 May 27 23:31 7280201c-fc5d-40f2-a9b2-466611d3d49e -> ../../sda3
lrwxrwxrwx 1 root root 10 May 27 23:31 98a81274-10f7-40db-872a-03df048df366 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 27 23:31 d0d0d110-0a71-4ed6-936a-304969ea36af -> ../../sda1
L'UUID de la partition d'un périphérique peut être obtenu avec
lsblk
:
$ lsblk -dno PARTUUID /dev/sda1
d0d0d110-0a71-4ed6-936a-304969ea36af
Ou avec
blkid
:
# blkid -s PARTUUID -o value /dev/sda1
d0d0d110-0a71-4ed6-936a-304969ea36af
Noms de périphériques statiques avec Udev
Voir
udev (Français)#Définition de noms de périphériques statiques
Utilisation des noms persistants
Il existe plusieurs applications qui peuvent être configurées à l'aide de noms persistants. Ci-dessous quelques exemples et la façon de les configurer.
fstab
Voir l'article
Fstab (Français)#Identification des systèmes de fichiers
Paramètres du noyau
Pour utiliser des noms persistants dans les
paramètres du noyau
, les conditions préalables suivantes doivent être remplies. Lors d'une installation standard qui a suivi le
guide d'installation
ces deux prérequis sont remplis :
Vous utilisez une
initramfs
avec
udev
inclus.
Pour
Mkinitcpio
, vous avez activé le
hook
udev
ou
systemd
dans
/etc/mkinitcpio.conf
L'emplacement du système de fichiers racine est donné par le paramètre
root
sur la ligne de commande du noyau. La ligne de commande du noyau est configurée à partir du
chargeur d'amorçage
, consultez
Kernel parameters#Boot loader configuration
. Pour changer le nom d'un périphérique persistant, ne modifiez que les paramètres qui spécifient les périphériques de type bloc, par exemple :
root
et
resume
, tout en laissant les autres paramètres tels quels.  Différents schémas de nommage sont pris en charge:
Nommage des périphériques persistants
utilisant l'étiquette
et le format
LABEL=
, dans cet exemple
Arch Linux
est l'étiquette du système de fichiers racine.
root="LABEL=Arch Linux"
Nommage persistant des périphériques
utilisant l'UUID
et le format
UUID=
, dans cet exemple
0a3407de-014b-458b-b5c1-848e92a327a3
est l'UUID du système de fichiers racine.
root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3
Nommage de périphérique persistant
utilisant l'id du disque
et le format de chemin
/dev
, dans cet exemple
wwn-0x60015ee0000b237f-part2
est l'id de la partition racine.
root=/dev/disk/by-id/wwn-0x60015ee0000b237f-part2
Nommage du périphérique persistant
utilisant l'UUID de la partition GPT
et le format
PARTUUID=
, dans cet exemple
98a81274-10f7-40db-872a-03df048df366
est le PARTUUID de la partition racine.
root=PARTUUID=98a81274-10f7-40db-872a-03df048df366
Nommage de périphérique persistant
utilisant l'étiquette de partition GPT
et le format
PARTLABEL=
, dans cet exemple
GNU/Linux
est le PARTLABEL de la partition racine.
root="PARTLABEL=GNU/Linux"