Compartir a través de


Solución de problemas de arranque y red de máquinas virtuales Linux debidos a errores asociados al controlador de Hyper-V

Azure se ejecuta en el hipervisor de Hyper-V y los sistemas Linux requieren que determinados módulos de kernel de Hyper-V se ejecuten en Azure. Estos módulos de kernel se agrupan en los controladores de Linux Integration Services (LIS) para Hyper-V y Azure. Microsoft los contribuye directamente al kernel de Linux ascendente.

En este artículo se describen varias condiciones en las que uno o varios controladores de Hyper-V deshabilitados podrían provocar problemas de arranque y redes de máquinas virtuales Linux.

Requisitos previos

Asegúrese de que la consola serie está habilitada y funciona en la máquina virtual Linux.

Cómo identificar el problema del controlador de Hyper-V que falta

Para identificar si la máquina virtual no se puede arrancar debido a que faltan controladores de Hyper-V, use la CLI de Azure o el Azure Portal para ver el registro de consola serie de la máquina virtual en el panel de diagnósticos de arranque o en el panel de consola serie. Las salidas de ejemplo de errores se muestran en las secciones correspondientes siguientes.

Antes de iniciar los pasos de la solución

Para solucionar problemas de escenario 1: el controlador de Hyper-V de red está deshabilitado y escenario 2: la dirección MAC de LA NIC cambia o no coincide, necesita acceso a la consola serie para la máquina virtual Linux.

Si no tiene acceso a la consola serie, siga el enfoque sin conexión para acceder al contenido del disco del sistema operativo problemático desde una máquina virtual de rescate. El acceso a la CLI de Azure o a Azure Cloud Shell es necesario para el enfoque sin conexión.

Para solucionar problemas de escenario 3: otros controladores de Hyper-V están deshabilitados, el enfoque sin conexión es la única opción para resolver el problema.

Escenario 1: El controlador de Hyper-V de red está deshabilitado

Dado que los servicios de red no están disponibles, no puede proteger el protocolo de Shell (SSH) en una máquina virtual, pero todavía puede iniciar sesión a través de la consola serie desde el Azure Portal. Verá los siguientes tipos de errores en la consola serie o en el registro serie más reciente en el panel Diagnósticos de arranque de la Azure Portal:

 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 bien

 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

Solución 1: Habilitar el controlador de red de Hyper-V mediante la consola serie

  1. Acceda a la consola serie de la máquina virtual. Las redes están inactivas, pero el símbolo del sistema de inicio de sesión sigue estando disponible.

  2. Inicie sesión en la máquina virtual con las credenciales correctas.

  3. Cambie a la cuenta raíz o a la cuenta de usuario con acceso sudo.

  4. Vaya al directorio /etc/modprobe.d y busque cualquier línea que deshabilite el controlador de hv_netvsc.

    1. Para identificar el archivo que deshabilita el controlador hv_netvsc y los números de línea correspondientes, ejecute el siguiente comando:

      grep -nr "hv_netvsc" /etc/modprobe.d/
      
    2. Modifique el archivo correspondiente y comente o elimine las entradas de hv_netvsc:

      Captura de pantalla que muestra el posible contenido del archivo de configuración que se usa para deshabilitar los controladores de red.

      vi /etc/modprobe.d/disable.conf
      

      Nota:

      • Las entradas que deshabilitan los controladores las define el sistema operativo Linux, no Microsoft.
      • Reemplace por disable.conf el nombre de archivo correspondiente donde está deshabilitado el controlador de hv_netvsc.
  5. Recompile la imagen inicial de RAMdisk para el kernel cargado actualmente:

    • Para imágenes basadas en RHEL/SLES

      # dracut -f -v
      
    • Para imágenes basadas en Ubuntu o Debian

      # mkinitramfs -k -o /boot/initrd.img-$(uname -r)
      
  6. Reinicie la máquina virtual.

Realice siempre una copia de seguridad de la imagen ramdisk inicial original para facilitar la reversión cuando sea necesario.

  • Para imágenes basadas en RHEL:

    # cp /boot/initramfs-<kernelVersion>.img /boot/initramfs-<kernelVersion>.img.bak
    
  • Para imágenes basadas en SLES:

    # cp /boot/initrd-<kernelVersion> /boot/initrd-<kernelVersion>.bak
    
  • Para imágenes basadas en Ubuntu o Debian:

    # cp /boot/initrd.img-<kernelVersion> /boot/initrd.img-<kernelVersion>.bak
    

Solución 2: Habilitar el controlador de red de Hyper-V sin conexión

  1. Use az vm repair para acceder al contenido del disco del sistema operativo afectado desde una máquina virtual de rescate.

  2. Monte y chroot en los sistemas de archivos del disco del sistema operativo conectado en la máquina virtual de rescate siguiendo las instrucciones de chroot.

  3. Una vez que se tenga acceso al contenido del disco del sistema operativo afectado, siga los pasos 4 y 5 de la solución 1: Habilitar el controlador de red de Hyper-V mediante la consola serie para volver a habilitar los controladores y volver a generar la imagen ramdisk inicial.

    Antes de volver a generar la imagen inicial de RAMdisk, cambie al entorno chroot. Se debe proporcionar la ruta de acceso completa de la imagen.

  4. Una vez aplicados los cambios, realice un intercambio automático de disco del sistema operativo con la máquina virtual original y reinicie el sistema mediante el az vm repair restore comando .

Escenario 2: La dirección MAC de NIC se cambia o no coincide

Si se cambia la dirección MAC de la tarjeta de interfaz de red o no coincide con la configuración del sistema operativo, no podrá conectarse mediante SSH a la máquina virtual porque los servicios de red no están disponibles. Todavía puede iniciar sesión a través de la consola serie desde el Azure Portal. Se muestran errores similares a los del escenario 1: El controlador de Hyper-V de red está deshabilitado .

Si el problema continúa aunque el controlador de red de Hyper-V esté habilitado, use una de las siguientes soluciones para validar la configuración de la NIC del sistema operativo y resolver el problema.

Solución 1: Corrección de la falta de coincidencia de direcciones MAC de NIC mediante la consola serie

  1. Acceda a la consola serie de la máquina virtual. Las redes están inactivas, pero el símbolo del sistema de inicio de sesión sigue estando disponible.

  2. Inicie sesión en la máquina virtual con las credenciales correctas.

  3. Cambie a la cuenta raíz o a la cuenta de usuario con acceso sudo.

  4. Vaya al directorio /etc/cloud/cloud.cfg.d .

  5. Teniendo en cuenta que se usan imágenes de asociados de Linux , abra y edite los siguientes archivos:

    • 91-azure_datasource.cfg para la distribución basada en RHEL.
    • 90_dpkg.cfg para la distribución basada en Debian y Ubuntu.
  6. Si el apply_network_config parámetro se establece en false, establézcalo en true. Si no se especifica nada, el valor predeterminado se establece en true. Esta configuración garantizará que la nueva dirección MAC se aplique a la configuración de red en el siguiente reinicio.

  7. Por lo general, una dirección MAC de NIC solo cambiaría si el administrador elimina o agrega una NIC o una NIC se actualiza en el back-end. Si no se desea la configuración de red a través de cloud-init y el apply_network_config parámetro debe establecerse en false, elimine el archivo /var/lib/cloud/instance/obj.pkl y reinicie el sistema.

    # rm /var/lib/cloud/instance/obj.pkl
    
  8. Una vez aplicados los cambios, reinicie el sistema.

Solución 2: Corrección de la falta de coincidencia de direcciones MAC de NIC sin conexión

  1. Use el comando az vm repair para acceder al contenido del disco del sistema operativo afectado desde una máquina virtual de rescate.
  2. Monte y chroot en los sistemas de archivos del disco del sistema operativo conectado en una máquina virtual de rescate correctamente siguiendo las instrucciones de chroot.
  3. Una vez que se accede al contenido de la copia del disco del sistema operativo afectado, siga los pasos 4 a 7 de la solución 1: Corrección de la falta de coincidencia de direcciones MAC de NIC mediante la consola serie para realizar cambios de red o borrar el archivo obj.pkl .
  4. Una vez aplicados los cambios, use el az vm repair restore comando para realizar un intercambio automático de disco del sistema operativo con la máquina virtual original y reiniciar el sistema.

Escenario 3: Otros controladores de Hyper-V están deshabilitados

Si experimenta problemas de arranque con otros controladores de Hyper-V, es probable que no pueda conectarse mediante SSH a una máquina virtual porque los servicios de red no están disponibles. Te caes a una caparazón de recorte. Este problema se puede ver a través de la consola serie desde el Azure Portal. Puede ver los siguientes errores en la consola serie o en el registro serie más reciente en el panel Diagnósticos de arranque de la Azure Portal:

 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 bien

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)

Solución: Habilitar controladores de Hyper-V

Si la máquina virtual no es accesible debido a que otros controladores de Hyper-V se deshabilitan, use un enfoque sin conexión para volver a habilitar los controladores, ya que los initramfs no se pueden cargar.

  1. Use el comando az vm repair para acceder al contenido del disco del sistema operativo problemático desde una máquina virtual de rescate.

  2. Monte y chroot en los sistemas de archivos del disco del sistema operativo conectado en una máquina virtual de rescate correctamente siguiendo las instrucciones de chroot.

  3. Una vez en el entorno chroot, vaya al directorio /etc/modprobe.d y busque cualquier línea que pueda deshabilitar el controlador de hv_utils, hv_vmbus, hv_storvsc o hv_netvsc.

    1. Ejecute el siguiente comando para identificar el archivo que deshabilita el controlador de hv_utils, hv_vmbus, hv_storvsc o hv_netvsc y el número de línea correspondiente.

      egrep -nr "hv_utils|hv_vmbus|hv_storvsc|hv_netvsc" /etc/modprobe.d/
      
    2. Modifique el archivo correspondiente y comente o elimine las entradas hv_utils, hv_vmbus, hv_storvsc o hv_netvsc. Las entradas suelen ser cualquiera de las siguientes (o ambas):

      Captura de pantalla que muestra el posible contenido del archivo de configuración que se usa para deshabilitar los módulos o controladores del kernel mediante la opción de instalación.

      Captura de pantalla que muestra el posible contenido del archivo de configuración que se usa para deshabilitar los módulos o controladores del kernel.

      vi /etc/modprobe.d/disable.conf
      

    Importante

    • Las entradas que deshabilitan los controladores las define el sistema operativo Linux, no Microsoft.
    • Reemplace por disable.conf el nombre de archivo correspondiente donde están deshabilitados los controladores de Hyper-V.
  4. Recompile la imagen inicial de RAMdisk para el kernel cargado actualmente:

    • Para imágenes basadas en RHEL/SLES

      # dracut -f -v
      
    • Para imágenes basadas en Ubuntu o Debian

      # mkinitramfs -k -o /boot/initrd.img-$(uname -r)
      
  5. Una vez aplicados los cambios, use el az vm repair restore comando para realizar un intercambio automático de disco del sistema operativo con la máquina virtual original y reiniciar el sistema.

Realice siempre una copia de seguridad de la imagen ramdisk inicial original para facilitar la reversión si es necesario.

Si el problema sigue sin resolverse, consulte Azure Linux virtual machine fails to boot (Error de arranque de la máquina virtual Linux de Azure) y escriba dracut emergency shell (Shell de emergencia de dracut ) para investigar los problemas de dracut.

Pasos siguientes

En caso de que el error de arranque específico no sea un problema de Hyper-V, consulte Solución de problemas de errores de arranque de Azure Linux Virtual Machines para obtener más opciones de solución de problemas.

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.