Partager via


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 :

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.