Compartir a través de


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

Se aplica a: ✔️ Máquinas virtuales Linux

Azure se ejecuta en el hipervisor de Hyper-V y los sistemas Linux requieren determinados módulos de kernel de Hyper-V para ejecutarse 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 funcional 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 Azure Portal para ver el registro de la consola serie de la máquina virtual en el panel de diagnóstico 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 del escenario 1: el controlador hyper-V de red está deshabilitado y el escenario 2: se cambia la dirección mac de NIC 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. Se requiere acceso a la CLI de Azure o Azure Cloud Shell para el enfoque sin conexión.

Para solucionar problemas del 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 hyper-V de red está deshabilitado

Dado que los servicios de red no están disponibles, no puede acceder al Protocolo secure Shell (SSH) a una máquina virtual, pero todavía puede iniciar sesión a través de la consola serie desde Azure Portal. Verá los siguientes tipos de errores en la consola serie o el registro de serie más reciente en el panel Diagnósticos de arranque en 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.

Or

 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: Habilitación del controlador de red de Hyper-V mediante la consola serie

  1. Acceda a la consola serie de la máquina virtual. La red está inactiva, 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 /etcetera/modprobe.d y busque cualquier línea que deshabilite el controlador hv_netvsc.

    1. Identifique el archivo que deshabilita el controlador hv_netvsc y los números de línea correspondientes ejecutando el siguiente comando:

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

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

      vi /etc/modprobe.d/disable.conf
      

      Nota

      • Las entradas que deshabilitan los controladores se definen mediante el sistema operativo Linux, no por Microsoft.
      • Reemplace por disable.conf el nombre de archivo correspondiente en el que el controlador hv_netvsc está deshabilitado.
  5. Vuelva a generar la imagen de RAMdisk inicial para el kernel cargado actualmente:

    • Para imágenes basadas en RHEL/SLES

      # dracut -f -v
      
    • Para imágenes basadas en Ubuntu/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/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 accede al contenido del disco del sistema operativo afectado, siga los pasos 4 y 5 de la solución 1: Habilite el controlador de red de Hyper-V mediante la consola serie para volver a habilitar los controladores y recompilar la imagen inicial de RAMdisk.

    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: Se cambia la dirección MAC de la NIC 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á acceder a 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 Azure Portal. Se muestran los errores similares a los del escenario 1: Se muestran los controladores de Hyper-V de red deshabilitados .

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: Corregir la falta de coincidencia de direcciones MAC NIC mediante la consola serie

  1. Acceda a la consola serie de la máquina virtual. La red está inactiva, 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 /etcetera/cloud/cloud.cfg.d .

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

    • 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 NIC solo cambiaría si el administrador o una NIC se actualiza en el back-end o agrega una NIC. 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: Corregir la falta de coincidencia de direcciones MAC 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 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: Corregir 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. Se le cae a un shell dracut. Este problema se puede ver a través de la consola serie desde Azure Portal. Puede ver los siguientes errores en la consola serie o en el registro de serie más reciente en el panel Diagnósticos de arranque en 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:/#

Or

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 no se puede acceder a la máquina virtual debido a que otros controladores de Hyper-V están deshabilitados, use un enfoque sin conexión para volver a habilitar los controladores, ya que no se puede cargar initramfs.

  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 /etcetera/modprobe.d y busque cualquier línea que pueda deshabilitar el controlador 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 convierta en comentario o elimine las entradas de 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 se definen mediante el sistema operativo Linux, no por Microsoft.
    • Reemplace por disable.conf el nombre de archivo correspondiente donde están deshabilitados los controladores de Hyper-V.
  4. Vuelva a generar la imagen de RAMdisk inicial para el kernel cargado actualmente:

    • Para imágenes basadas en RHEL/SLES

      # dracut -f -v
      
    • Para imágenes basadas en Ubuntu/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 La máquina virtual Linux de Azure no puede arrancar y escribe el shell de emergencia 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.