Condividi tramite


Risolvere i problemi relativi alle modifiche al nome del dispositivo della VM Linux

Si applica a: ✔️ macchine virtuali Linux

Questo articolo spiega perché i nomi dei dispositivi cambiano dopo il riavvio di una macchina virtuale Linux o il ricollegamento dei dischi dati. L'articolo fornisce anche soluzioni per questo problema.

Sintomi

Potrebbero verificarsi i seguenti problemi durante l'esecuzione di VM Linux in Microsoft Azure:

  • La macchina virtuale non si avvia dopo un riavvio.
  • Quando i dischi dati vengono scollegati e ricollegati, i nomi dei dispositivi del disco vengono modificati.
  • Un'applicazione o uno script che fa riferimento a un disco utilizzando il nome del dispositivo non riesce perché il nome del dispositivo è stato modificato.

Causa

Non è garantito che i percorsi dei dispositivi in Linux siano coerenti tra i riavvii. I nomi dei dispositivi sono costituiti da numeri maggiori (lettere) e numeri minori. Quando il driver del dispositivo di archiviazione Linux rileva un nuovo dispositivo, il driver assegna al dispositivo numeri principali e secondari dall'intervallo disponibile. Quando un dispositivo viene rimosso, i numeri del dispositivo vengono liberati per il riutilizzo.

Il problema si verifica perché la scansione del dispositivo in Linux è pianificata dal sottosistema SCSI in modo asincrono. Di conseguenza, il nome del percorso di un dispositivo può variare tra i riavvii.

Soluzione

Per risolvere questo problema, usare i nomi dei dispositivi persistenti tra i riavvii. Esistono diversi modi per usare la denominazione permanente: per etichetta del file system, per UUID o per percorso del dispositivo derivato. Per le macchine virtuali Linux che non usano Gestione volumi logici (LVM), è consigliabile usare l'UUID del file system o i collegamenti creati usando le regole udev. Per i file system basati su LVM, il montaggio con il gruppo di volumi e il nome del volume logico è anche un approccio valido, poiché gli oggetti LVM rimangono coerenti indipendentemente dalla modalità di ordinamento dei volumi fisici.

La maggior parte delle distribuzioni fornisce i fstab parametri nofail o nobootwait . Questi parametri consentono l'avvio di un sistema quando il montaggio del disco non riesce all'avvio. Controllare la documentazione della distribuzione per ulteriori informazioni su questi parametri. Per informazioni su come configurare una macchina virtuale Linux per utilizzare un UUID quando aggiungi un disco dati, consulta Connettersi alla macchina virtuale Linux per montare il nuovo disco.

Se fstab è già stato modificato in modo che la macchina virtuale non venga avviata e non sia possibile connettersi tramite SSH alla macchina virtuale, è possibile usare la console seriale della macchina virtuale per entrare in modalità utente singolo e modificare il file fstab oppure usare Ripristino automatico Linux di Azure per automatizzare il processo di ripristino.

Identificare i LUN del disco

Quando l'agente Linux di Azure viene installato in una macchina virtuale, l'agente usa regole udev per costruire un set di collegamenti simbolici nel percorso /dev/disk/azure , che correla gli allegati LUN definiti da Azure ai dispositivi disco tradizionali:

$ 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

Le informazioni LUN dall'account Guest Linux vengono recuperate utilizzando lsscsi o uno strumento simile:

$ 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

Le informazioni sulla LUN guest vengono usate con i metadati della sottoscrizione di Azure per individuare il disco rigido virtuale in Archiviazione di Azure che contiene i dati della partizione. Ad esempio, puoi utilizzare la CLI az:

$ 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"
  }
  }
]

Scopri gli UUID del filesystem usando blkid

Le applicazioni e gli script leggono l'output di blkid, o fonti di informazioni simili, per creare collegamenti simbolici nel percorso /dev. L'output mostra gli UUID di tutti i dischi collegati alla VM e il relativo file di dispositivo associato:

$ 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"

Le regole Udev dell'agente Linux di Azure creano un set di collegamenti simbolici nel percorso /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

Le applicazioni utilizzano i collegamenti per identificare il dispositivo del disco di avvio e il disco delle risorse (temporaneo). In Azure, le applicazioni devono cercare nei percorsi /dev/disk/azure/root-part1 o /dev/disk/azure-resource-part1 per individuare queste partizioni.

Eventuali partizioni aggiuntive dall'elenco blkid si trovano su un disco dati. Le applicazioni mantengono l'UUID per queste partizioni e utilizzano un percorso per rilevare il nome del dispositivo in fase di esecuzione:

$ 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

Ottieni le regole di archiviazione di Azure più recenti

Per ottenere le regole di archiviazione di Azure più recenti, eseguire i comandi seguenti:

# 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

Vedi anche

Per altre informazioni, vedere gli articoli seguenti:

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.