Résoudre les problèmes liés aux modifications des noms de périphérique de machine virtuelle Linux
S’applique à : ✔️ Machines virtuelles Linux
Cet article explique pourquoi les noms de périphérique changent une fois que vous redémarrez une machine virtuelle Linux ou rattachez les disques de données. L’article fournit également des solutions pour résoudre ce problème.
Symptômes
Vous pourriez rencontrer les problèmes suivants lors de l’exécution de machines virtuelles Linux dans Microsoft Azure :
- La machine virtuelle ne parvient pas à démarrer après un redémarrage.
- Quand vous détachez et rattachez des disques de données, les noms de périphérique de disque changent.
- Une application ou un script qui fait référence à un disque en utilisant le nom de périphérique échoue, car le nom du périphérique a changé.
Cause
Les chemins d’accès des périphériques dans Linux ne sont pas toujours cohérents entre les redémarrages. Les noms de périphérique se composent de numéros principaux (lettre) et secondaires. Quand le pilote du périphérique de stockage Linux détecte un nouveau périphérique, il lui attribue un numéro principal et un numéro secondaire à partir de la plage disponible pour lui. Quand vous retirez un périphérique, ses numéros peuvent être réutilisés.
Le problème se produit parce que l’analyse des périphériques dans Linux, telle qu’elle est planifiée par le sous-système SCSI, est asynchrone. Par conséquent, le nom du chemin d’un périphérique peut varier d’un redémarrage à l’autre.
Solution
Pour résoudre ce problème, utilisez des noms d’appareil persistants entre les redémarrages. Il existe plusieurs façons d’utiliser un nommage persistant : par étiquette de système de fichiers, par UUID ou par chemin d’accès d’appareil dérivé. Pour les machines virtuelles Linux qui n’utilisent pas le Gestionnaire de volumes logiques (LVM), nous vous recommandons d’utiliser l’UUID ou les liens créés à l’aide de règles udev. Pour les systèmes de fichiers basés sur LVM, le montage à l’aide du groupe de volumes et du nom du volume logique est également une approche valide, car les objets LVM restent cohérents, quelle que soit la façon dont les volumes physiques sont ordonnés.
La plupart des distributions fournissent les paramètres fstab
nofail ou nobootwait. Ces paramètres permettent à un système de démarrer quand le disque n’est pas monté au moment du démarrage. Pour plus d’informations sur ces paramètres, consultez la documentation de votre distribution. Pour plus d’informations sur la manière de configurer une machine virtuelle Linux pour qu’elle utiliser un UUID lorsque vous ajoutez un disque de données, consultez la section Se connecter à la machine virtuelle Linux afin de monter le nouveau disque.
Si vous avez déjà modifié votre fstab de telle sorte que votre machine virtuelle ne démarre pas et que vous ne parvenez pas à effectuer de ssh sur votre machine virtuelle, vous pouvez utiliser la console série de la machine virtuelle pour entrer en mode mono-utilisateur et modifier votre fstab, ou utiliser la réparation automatique Linux Azure pour automatiser le processus de réparation.
Identifier les numéros d’unité logique des disques
Lorsque l’agent Linux Azure est installé sur une machine virtuelle, l’agent utilise des règles udev pour construire un ensemble de liens symboliques sous le chemin /dev/disk/azure , qui corréler les pièces jointes LUN définies par Azure aux appareils de disque traditionnels :
$ tree /dev/disk/azure
/dev/disk/azure
├── resource -> ../../sdb
├── resource-part1 -> ../../sdb1
├── root -> ../../sda
├── root-part1 -> ../../sda1
└── scsi1
├── lun0 -> ../../../sdc
├── lun0-part1 -> ../../../sdc1
├── lun1 -> ../../../sdd
├── lun1-part1 -> ../../../sdd1
├── lun1-part2 -> ../../../sdd2
└── lun1-part3 -> ../../../sdd3
Pour récupérer les informations de numéro d’unité logique du compte invité Linux, utilisez lsscsi
ou un outil similaire :
$ sudo lsscsi
[1:0:0:0] cd/dvd Msft Virtual CD/ROM 1.0 /dev/sr0
[2:0:0:0] disk Msft Virtual Disk 1.0 /dev/sda
[3:0:1:0] disk Msft Virtual Disk 1.0 /dev/sdb
[5:0:0:0] disk Msft Virtual Disk 1.0 /dev/sdc
[5:0:0:1] disk Msft Virtual Disk 1.0 /dev/sdd
Les informations de numéro d’unité logique de l’invité sont utilisées avec les métadonnées d’abonnement Azure pour localiser le disque dur virtuel dans le stockage Azure qui contient les données de partition. Par exemple, vous pouvez utiliser az
CLI :
$ az vm show --resource-group testVM --name testVM | jq -r .storageProfile.dataDisks
[
{
"caching": "None",
"createOption": "empty",
"diskSizeGb": 1023,
"image": null,
"lun": 0,
"managedDisk": null,
"name": "testVM-20170619-114353",
"vhd": {
"uri": "https://testVM.blob.core.windows.net/vhd/testVM-20170619-114353.vhd"
}
},
{
"caching": "None",
"createOption": "empty",
"diskSizeGb": 512,
"image": null,
"lun": 1,
"managedDisk": null,
"name": "testVM-20170619-121516",
"vhd": {
"uri": "https://testVM.blob.core.windows.net/vhd/testVM-20170619-121516.vhd"
}
}
]
Découvrir les UUID de système de fichiers à l’aide de l’utilitaire blkid
Les applications et les scripts lisent la sortie de blkid
, ou des sources d’information similaires, pour construire des liens symboliques dans le chemin /dev. La sortie montre les UUID de tous les disques attachés à la machine virtuelle et leur fichier de périphérique associé :
$ sudo blkid -s UUID
/dev/sr0: UUID="120B021372645f72"
/dev/sda1: UUID="52c6959b-79b0-4bdd-8ed6-71e0ba782fb4"
/dev/sdb1: UUID="176250df-9c7c-436f-94e4-d13f9bdea744"
/dev/sdc1: UUID="b0048738-4ecc-4837-9793-49ce296d2692"
Les règles Udev de l’agent Linux Azure construisent un ensemble de liens symboliques sous le chemin /dev/disk/azure :
$ ls -l /dev/disk/azure
total 0
lrwxrwxrwx 1 root root 9 Jun 2 23:17 resource -> ../../sdb
lrwxrwxrwx 1 root root 10 Jun 2 23:17 resource-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 9 Jun 2 23:17 root -> ../../sda
lrwxrwxrwx 1 root root 10 Jun 2 23:17 root-part1 -> ../../sda1
Les applications utilisent les liens pour identifier le périphérique de disque de démarrage et le disque de ressources (éphémère). Dans Azure, les applications doivent rechercher dans les chemins /dev/disk/azure/root-part1 ou /dev/disk/azure-resource-part1 pour découvrir ces partitions.
Toutes les partitions supplémentaires figurant dans la liste blkid
résident sur un disque de données. Les applications gèrent les UUID de ces partitions et utilisent un chemin pour découvrir le nom du périphérique au moment de l’exécution :
$ ls -l /dev/disk/by-uuid/b0048738-4ecc-4837-9793-49ce296d2692
lrwxrwxrwx 1 root root 10 Jun 19 15:57 /dev/disk/by-uuid/b0048738-4ecc-4837-9793-49ce296d2692 -> ../../sdc1
Obtenir les dernières règles de stockage Azure
Pour obtenir les dernières règles de stockage Azure, exécutez les commandes suivantes :
# sudo curl -o /etc/udev/rules.d/66-azure-storage.rules https://raw.githubusercontent.com/Azure/WALinuxAgent/master/config/66-azure-storage.rules
# sudo udevadm trigger --subsystem-match=block
Voir aussi
Pour plus d’informations, consultez les articles suivants :
- Ubuntu: Using UUID (Utilisation des UUID)
- Red Hat: Persistent Naming (Attribution de noms persistants)
- Linux: What UUIDs can do for you (Ce que les UUID peuvent faire pour vous)
- Udev: Introduction to device management in modern Linux system (Présentation de la gestion des périphériques dans les systèmes Linux modernes)
Contactez-nous pour obtenir de l’aide
Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.