Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: ✔️ macchine virtuali Linux
Sommario
Azure è eseguito sull'hypervisor Hyper-V e i sistemi Linux richiedono determinati moduli kernel Hyper-V per funzionare su Azure. Questi moduli kernel vengono raggruppati nei driver LIS (Linux Integration Services) per Hyper-V e Azure. Microsoft li contribuisce direttamente al kernel Linux upstream.
Questo articolo illustra più condizioni in cui uno o più driver di Hyper-V disabilitati possono causare problemi di avvio e rete delle macchine virtuali Linux.
Prerequisiti
Assicurarsi che la console seriale sia abilitata e funzionale nella macchina virtuale Linux.
Come identificare il problema del driver mancante di Hyper-V
Per identificare se l'avvio della macchina virtuale non riesce a causa di driver di Hyper-V mancanti, usare interfaccia della riga di comando di Azure o il portale di Azure per visualizzare il log della console seriale della macchina virtuale nel riquadro di diagnostica di avvio o nel riquadro della console seriale. Gli output di esempio degli errori vengono visualizzati nelle sezioni corrispondenti seguenti.
Prima di risolvere i problemi
Per risolvere i problemi relativi a Scenario 1: il driver di Hyper-V di rete è disabilitato e Scenario 2: l'indirizzo mac (NIC Media Access Control) viene modificato o non corrisponde è necessario serial console l'accesso per la macchina virtuale Linux.
Se non si ha accesso alla console seriale, seguire l'approccio offline per accedere al contenuto del disco del sistema operativo problematico da una macchina virtuale di ripristino. L'accesso a interfaccia della riga di comando di Azure o Azure Cloud Shell è necessario per l'approccio offline.
Per risolvere i problemi Scenario 3: altri driver di Hyper-V sono disabilitati, l'approccio offline è l'unica opzione per risolvere il problema.
Scenario 1: Il driver di Hyper-V di rete è disabilitato
Poiché i servizi di rete non sono disponibili, non è possibile usare SSH (Secure Shell Protocol) in una macchina virtuale, ma è comunque possibile accedere tramite la console serial dal portale di Azure. Nella console seriale o nel log seriale più recente nel riquadro Boot Diagnostics nel portale di Azure vengono visualizzati i tipi di errori seguenti:
cloud-init[807]: Cloud-init v. 19.4 running 'init-local' at Tue, xx Aug 20XX 20:41:53 +0000. Up 5.83 seconds.
cloud-init[807]: 20XX-08-XX 20:41:54,231 - stages.py[WARNING]: Failed to rename devices: [nic not present] Cannot rename mac=xx:xx:xx:xx:xx:xx to eth0, not available.
[ OK ] Started Initial cloud-init job (pre-networking).
----
[FAILED] Failed to start LSB: Bring up/down networking.
See 'systemctl status network.service' for details.
O
cloud-init[799]: 2022-XX-XX 19:04:06,267 - azure.py[WARNING]: Interface not found for DHCP
cloud-init[799]: 2022-XX-XX 19:04:07,269 - azure.py[WARNING]: Interface not found for DHCP
cloud-init[799]: 2022-XX-XX 19:04:10,274 - azure.py[WARNING]: Interface not found for DHCP
cloud-init[799]: 2022-XX-2XX 19:04:10,277 - azure.py[WARNING]: IMDS network metadata has incomplete configuration: None
Soluzione 1: Abilitare Hyper-V driver di rete tramite la console seriale
Accedere alla console seriale della macchina virtuale. La rete è inattiva, ma la richiesta di accesso è ancora disponibile.
Accedere alla macchina virtuale con le credenziali corrette.
Passare all'account root o all'account utente con accesso sudo.
Passare alla directory /etc/modprobe.d e cercare qualsiasi riga che disabilita il driver hv_netvsc.
Identificare il file che disabilita il driver hv_netvsc e i numeri di riga corrispondenti eseguendo il comando seguente:
sudo grep -nr "hv_netvsc" /etc/modprobe.d/Modificare il file corrispondente e commentare o eliminare le voci hv_netvsc:
sudo vi /etc/modprobe.d/disable.confNote
- Le voci che disabilitano i driver sono definite dal sistema operativo Linux, non da Microsoft.
- Sostituire
disable.confcon il nome file corrispondente in cui il driver hv_netvsc è disabilitato.
Ricompilare l'immagine RAMdisk iniziale per il kernel attualmente caricato:
Per le immagini basate su RHEL/SLES
sudo dracut -f -vPer immagini basate su Ubuntu/Debian
sudo mkinitramfs -k -o /boot/initrd.img-$(uname -r)
Riavviare la macchina virtuale.
Eseguire sempre un backup dell'immagine RAMdisk iniziale originale per facilitare il rollback quando necessario.
Per le immagini basate su RHEL:
sudo cp /boot/initramfs-<kernelVersion>.img /boot/initramfs-<kernelVersion>.img.bakPer le immagini basate su SLES:
sudo cp /boot/initrd-<kernelVersion> /boot/initrd-<kernelVersion>.bakPer le immagini basate su Ubuntu/Debian:
sudo cp /boot/initrd.img-<kernelVersion> /boot/initrd.img-<kernelVersion>.bak
Soluzione 2: Abilitare Hyper-V driver di rete offline
Usare az vm repair per accedere al contenuto del disco del sistema operativo interessato da una macchina virtuale di ripristino.
Montare e chroot ai file system del disco del sistema operativo collegato nella macchina virtuale di ripristino seguendo le istruzioni chroot.
Dopo aver eseguito l'accesso al contenuto del disco del sistema operativo interessato, seguire i passaggi 4 e 5 in Solution 1: Abilitare Hyper-V driver di rete usando la console seriale per riabilitare i driver e ricompilare l'immagine RAMdisk iniziale.
Prima della ricompilazione dell'immagine RAMdisk iniziale, passare all'ambiente chroot. È necessario specificare il percorso completo dell'immagine.
Dopo aver applicato le modifiche, eseguire uno scambio automatico del disco del sistema operativo con la macchina virtuale originale e riavviare il sistema usando il
az vm repair restorecomando .
Scenario 2: l'indirizzo MAC (NIC Media Access Control) viene modificato o non corrisponde
Se l'indirizzo MAC della scheda di interfaccia di rete viene modificato o non corrisponde all'interno della configurazione del sistema operativo, non sarà possibile connettersi tramite SSH alla macchina virtuale perché i servizi di rete non sono disponibili. È comunque possibile accedere tramite serial console dal portale di Azure. Vengono visualizzati errori simili a quelli di Scenario 1: il driver di Hyper-V di rete è disabilitato.
Se il problema persiste anche se il driver di rete Hyper-V è abilitato, usare una delle soluzioni seguenti per convalidare la configurazione della scheda di interfaccia di rete del sistema operativo e risolvere il problema.
Soluzione 1: Correggere la mancata corrispondenza dell'indirizzo MAC della scheda di interfaccia di rete usando la console seriale
Accedere alla console seriale della macchina virtuale. La rete è inattiva, ma la richiesta di accesso è ancora disponibile.
Accedere alla macchina virtuale con le credenziali corrette.
Passare all'account radice o all'account utente con accesso sudo.
Passare alla directory /etc/cloud/cloud.cfg.d .
Considerando che vengono usate immagini partner Linux, aprire e modificare i file seguenti:
- 91-azure_datasource.cfg per la distribuzione basata su RHEL.
- 90_dpkg.cfg per la distribuzione basata su Debian e Ubuntu.
Se il
apply_network_configparametro è impostato su false, impostarlo su true. Se non viene specificato alcun valore, il valore predefinito è impostato su true. Questa impostazione garantisce che il nuovo indirizzo MAC venga applicato alla configurazione di rete al riavvio successivo.In genere, un indirizzo MAC della scheda di interfaccia di rete cambia solo se una scheda di interfaccia di rete viene eliminata o aggiunta dall'amministratore o un'interfaccia di rete viene aggiornata nel back-end. Se la configurazione di rete tramite cloud-init non è desiderata e il
apply_network_configparametro deve essere impostato su false, eliminare il file /var/lib/cloud/instance/obj.pkl e riavviare il sistema.sudo rm /var/lib/cloud/instance/obj.pklDopo aver applicato le modifiche, riavviare il sistema.
Soluzione 2: Correggere l'incongruenza dell'indirizzo MAC della NIC offline
- Usare il comando az vm repair per accedere al contenuto del disco del sistema operativo interessato da una macchina virtuale di ripristino.
- Montare e eseguire chroot nei file system del disco del sistema operativo collegato correttamente in una macchina virtuale di salvataggio seguendo le istruzioni chroot.
- Dopo aver eseguito l'accesso al contenuto della copia del disco del sistema operativo interessato, seguire i passaggi da 4 a 7 nella soluzione 1: Correggere la mancata corrispondenza dell'indirizzo MAC della scheda di interfaccia di rete usando la console seriale per apportare modifiche di rete o cancellare il file obj.pkl .
- Dopo aver applicato le modifiche, usare il
az vm repair restorecomando per eseguire uno scambio automatico del disco del sistema operativo con la macchina virtuale originale e riavviare il sistema.
Scenario 3: Altri driver Hyper-V sono disabilitati
Se si verificano problemi di avvio con altri driver Hyper-V, è probabile che non sia possibile connettersi tramite SSH a una macchina virtuale perché i servizi di rete non sono disponibili. Sei stato trasferito in una shell dracut. Questo problema può essere visualizzato tramite la console serial dal portale di Azure. È possibile visualizzare gli errori seguenti nella console seriale o nel log seriale più recente all'interno del riquadro Boot Diagnostics nel portale di Azure:
dracut-initqueue[455]: Warning: dracut-initqueue timeout - starting timeout scripts
dracut-initqueue[455]: Warning: Could not boot.
Starting Setup Virtual Console...
[ OK ] Started Setup Virtual Console.
Starting Dracut Emergency Shell...
Warning: /dev/mapper/rootvg-rootlv does not exist
Generating "/run/initramfs/rdsosreport.txt"
Entering emergency mode. Exit the shell to continue.
Type "journalctl" to view system logs.
You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot
after mounting them and attach it to a bug report.
dracut:/#
O
Gave up waiting for root file system device. Common problems:
- Boot args (cat /proc/cmdline)
- Check rootdelay= (did the system wait long enough?)
- Missing modules (cat /proc/modules; ls /dev)
ALERT! UUID=143c811b-9b9c-48f3-b0c8-040f6e65f50aa does not exist. Dropping to a shell!
BusyBox v1.27.2 (Ubuntu 1:1.27.2-2ubuntu3.4) built-in shell (ash)
Enter 'help' for a list of built-in commands.
(initramfs)
Soluzione: abilitare i driver Hyper-V
Se la macchina virtuale non è accessibile a causa di altri driver Hyper-V disabilitati, usare un approccio offline per riabilitare i driver, perché non è possibile caricare initramfs.
Usare il comando az vm repair per accedere al contenuto del disco del sistema operativo problematico da una macchina virtuale di ripristino.
Montare e chroot nei file system del disco del sistema operativo collegato in una macchina virtuale di ripristino seguendo correttamente le istruzioni chroot.
Una volta nell'ambiente chroot, passare alla directory /etc/modprobe.d e cercare qualsiasi riga che potrebbe disabilitare il driver hv_utils, hv_vmbus, hv_storvsc o hv_netvsc.
Eseguire il comando seguente per identificare il file che disabilita il driver hv_utils, hv_vmbus, hv_storvsc o hv_netvsc e il numero di riga corrispondente.
sudo egrep -nr "hv_utils|hv_vmbus|hv_storvsc|hv_netvsc" /etc/modprobe.d/Modificare il file corrispondente e mettere in commento o eliminare le voci di hv_utils, hv_vmbus, hv_storvsc o hv_netvsc. Le voci più frequentemente saranno una delle seguenti (o entrambe):
sudo vi /etc/modprobe.d/disable.conf
Importante
- Le voci che disabilitano i driver sono definite dal sistema operativo Linux, non da Microsoft.
- Sostituire
disable.confcon il nome file corrispondente in cui i driver Hyper-V sono disabilitati.
Ricompilare l'immagine RAMdisk iniziale per il kernel attualmente caricato:
Per le immagini basate su RHEL/SLES
sudo dracut -f -vPer immagini basate su Ubuntu/Debian
sudo mkinitramfs -k -o /boot/initrd.img-$(uname -r)
Dopo aver applicato le modifiche, usare il
az vm repair restorecomando per eseguire uno scambio automatico del disco del sistema operativo con la macchina virtuale originale e riavviare il sistema.
Eseguire sempre un backup dell'immagine RAMdisk iniziale originale per facilitare il rollback, se necessario.
Se il problema non è ancora risolto, fare riferimento a la macchina virtuale Linux di Azure non si avvia e entra nella shell di emergenza di dracut per analizzare i problemi di dracut.
Passaggi successivi
Nel caso in cui l'errore di avvio specifico non sia un problema di Hyper-V, vedere Troubleshoot Azure Errori di avvio di Linux Macchine virtuali per altre opzioni di risoluzione dei problemi.