No se puede utilizar kdump o kexec para máquinas virtuales de Linux en Hyper-V

Síntomas

2012 de versiones anteriores a Windows Server R2
Imagine el siguiente escenario:
  • Tiene un equipo basado en Server 2012 R2 anteriores de Windows que tiene instalada la función de Hyper-V.
  • Instalar Linux en una máquina virtual de Hyper-V en el equipo.
  • Configurar kdump en la VM de Linux.

    Nota: La VM Linux ya tiene los controladores Linux Integration Services. Los controladores pueden ser precompilados o instalados manualmente.
En este escenario, si se bloquea el equipo virtual Linux, el archivo de volcado de memoria del núcleo de Linux no se genera como se esperaba.
Windows Server 2012 R2
Imagine el siguiente escenario:
  • Dispone de VM Linux en el host de Windows Server 2012 Hyper-V R2.
  • vCPUs de 15 o más se asocian a la VM de Linux.
  • Configurar kdump en la VM de Linux.
En este escenario, kdump no funciona y el archivo de volcado no se crea porque el proceso deja de responder (se bloquea).

Causa

Este problema se produce porque Hyper-V no puede alojar dos conexiones simultáneas desde el mismo controlador sintética que se ejecuta dentro de una máquina virtual.

Cuando kdump se configura en una máquina virtual Linux que está utilizando el controlador de almacenamiento sintéticos de los servicios de integración de Linux (también conocido como storvsc), el núcleo de kexec está configurado para utilizar el mismo controlador. Si se bloquea el equipo virtual Linux, el controlador de almacenamiento sintéticas que se hospeda en el núcleo de kexec intenta abrir una conexión con el proveedor de almacenamiento de Hyper-V. Sin embargo, Hyper-V no puede establecer la nueva conexión debido a la conexión existente con el mismo controlador de almacenamiento en la máquina virtual de Linux se ha bloqueado. Por lo tanto, el núcleo de kexec no puede volcar la principal para la máquina virtual de Linux se ha bloqueado.

Solución

Para resolver este problema, configure el kernel kexec utilizando el controlador de almacenamiento de información estándar de Linux. Esta configuración debe realizarse después de habilita la funcionalidad de kdump en una máquina virtual Linux. La idea básica es desactivar el controlador de almacenamiento de servicios de integración de Linux y, a continuación, habilitar al controlador de almacenamiento Linux estándar dentro del kernel de kexec mediante el parámetro prefer_ms_hyper_v en el archivo de configuración correspondiente.

El parámetro prefer_ms_hyper_v se puede utilizar para controlar el comportamiento del controlador de almacenamiento Linux estándar. Cuando se establece este parámetro en 1 y se ejecuta la máquina virtual de Linux en Hyper-V, el controlador de almacenamiento de información estándar de Linux se deshabilita y permite que el controlador de almacenamiento de servicios de integración de Linux controlar los dispositivos de almacenamiento. Al establecer el parámetro prefer_ms_hyper_v en 0, el controlador de almacenamiento de información estándar de Linux puede funcionar. Dado que el controlador de almacenamiento Linux estándar no requiere una conexión a Hyper-V, el núcleo de kexec puede volcar core.

Diferentes distribuciones de Linux tienen ligeramente diferentes mecanismos para especificar el valor de prefer_ms_hyper_v. La siguiente sección describe cómo se puede establecer el parámetro para varias distribuciones de Linux más populares.

Red Hat Enterprise Linux (RHEL) 5.9

En RHEL 5.9, tienes que pasar el parámetro de prefer_ms_hyper_v a través de un argumento de línea de comandos del núcleo para el módulo de ide_core que está integrado en el núcleo de RHEL 5.9. De forma predeterminada, este parámetro se inicializa a 1, y esto hace que la máquina virtual de Linux evitar el uso del módulo de ide_core si se está ejecutando en un entorno de Hyper-V. Los administradores tienen que establecer el valor del parámetro prefer_ms_hyper_v en 0 para que el controlador ide_core en funcionamiento durante el proceso de inicio del núcleo de kexec. Puede hacerlo cambiando el contenido de /etc/kdump.conf.

Para cambiar el contenido de /etc/kdump.conf, siga estos pasos:
  1. Ejecute el siguiente comando para configurar kdump para escribir en un directorio local:

    bloqueo/var/ruta
  2. Lista negra de los controladores de Linux Integration Services en /etc/kdump.conf. Esto evita que los controladores de carga en el núcleo de kexec. Para ello, ejecute el siguiente comando:

    lista negra hv_vmbus hv_storvsc hv_utils hv_netvsc hid-hyperv
  3. Configurar el valor de tiempo de espera del disco ejecutando el comando siguiente:

    disk_timeout 100
  4. Después de las modificaciones necesarias, el archivo /etc/kdump.conf tiene el siguiente aspecto:
    path /var/crash
    core_collector makedumpfile - c--mensaje-nivel 1 - d 31
    blacklist hv_vmbus hv_storvsc hv_utils hv_netvsc hid-hyperv
    disk_timeout 100
  5. Modifique el contenido del archivo /etc/sysconfig/kdump de la siguiente manera:
    • Agregue o modifique la línea siguiente para incluir el prefer_ms_hyperv = 0 argumento:

      KDUMP_COMMANDLINE_APPEND="irqpoll maxcpus=1 reset_devices ide_core.prefer_ms_hyperv=0"
    • Después de las modificaciones necesarias, el archivo /etc/sysconfig/kdump tiene el siguiente aspecto:
      KDUMP_COMMANDLINE=""

      # Esta variable nos permite anexar argumentos a la línea de comandos actual de kdump
      # Como tomadas desde cualquier KDUMP_COMMANDLINE anterior, o desde/proc/cmdline

      KDUMP_COMMANDLINE_APPEND = "irqpoll maxcpus = 1 ide_core.prefer_ms_hyperv=0 reset_devices"

Red Hat Enterprise Linux (RHEL) 6.4

En RHEL 6.4, tienes que pasar el parámetro prefer_ms_hyper_v en el módulo del controlador ata_piix . Puede hacerlo cambiando el contenido del archivo /etc/kdump.conf.

Para cambiar el contenido de /etc/kdump.conf, siga estos pasos:
  1. Configurar kdump para escribir en un directorio local:

    bloqueo/var/ruta
  2. Agregar módulos adicionales ata_piix, sr_mod, sd_mod:

    extra_modules ata_piix sr_mod sd_mod
  3. Lista negra de los controladores de Linux Integration Services en etc/kdump.conf. Esto impide que los controladores de carga en el núcleo de kexec:

    lista negra hv_vmbus hv_storvsc hv_utils hv_netvsc hid-hyperv
  4. Agregue el parámetro options para pasar el parámetro al módulo ata_piix:

    opciones ata_piix prefer_ms_hyperv = 0
  5. Configurar el valor de tiempo de espera de disco para que no deja de responder (se bloquee):

    disk_timeout 100
  6. Después de las modificaciones necesarias, el archivo /etc/kdump.conf tiene el siguiente aspecto:
    path /var/crash
    core_collector makedumpfile - c--mensaje-nivel 1 - d 31
    extra_modules ata_piix sr_mod sd_mod
    lista negra hv_vmbus hv_storvsc hv_utils hv_netvsc hid-hyperv
    opciones ata_piix prefer_ms_hyperv = 0
    disk_timeout 100

Ubuntu 12.04(.x)

En Ubuntu 12.04(. x), tiene que pasar el parámetro prefer_ms_hyper_v para el controlador ata_piix . Puede hacerlo cambiando el contenido del archivo /etc/init.d/kdump.

Para cambiar el contenido del archivo /etc/init.d/kdump, anexar ata_piix. prefer_ms_hyper_v = 0 para las opciones de línea de comandos de kdump:
do_start {} {
….
….
APPEND = "$APPEND kdump_needed maxcpus = 1 ata_piix.prefer_ms_hyperv=0 de reset_devices de irqpoll"

}

SUSE Linux Enterprise Server (SLES) 11 SP2(x)

En SLES 11 SP2(x) distribuciones, tienes que pasar el parámetro prefer_ms_hyper_v para el controlador ata_piix . Puede hacerlo modificando el contenido del archivo /etc/sysconfig/kdump como sigue:

Anexar ata_piix.prefer_ms_hyper_v=0 a KDUMP_COMMANDLINE_APPEND:

KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0"

Después de las modificaciones necesarias, el archivo /etc/sysconfig/kdump tiene el siguiente aspecto:

KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0"

Más información

KDUMP debe configurarse de la manera estándar que sugiere distribuciones de Linux.

Los productos de terceros que se indican en este artículo están fabricados por compañías independientes de Microsoft. Microsoft no otorga ninguna garantía, implícita o de otro tipo, respecto al rendimiento o confiabilidad de estos productos.
Propiedades

Id. de artículo: 2858695 - Última revisión: 24 ene. 2017 - Revisión: 1

Windows Server 2012 R2 Datacenter, Windows Server 2012 R2 Standard, Windows Server 2012 R2 Essentials, Microsoft Hyper-V Server 2012 R2, Windows Storage Server 2012 R2 Standard, Windows Server 2012 Datacenter, Windows Server 2012 Datacenter, Windows Server 2012 Standard, Windows Server 2012 Standard, Microsoft Hyper-V Server 2012, Microsoft Hyper-V Server 2012, Windows Storage Server 2012 Standard, Windows Server 2008 R2 Datacenter, Windows Server 2008 R2 Enterprise, Windows Server 2008 R2 Standard, Windows Server 2008 R2 Service Pack 1, Microsoft Hyper-V Server 2008 R2 Service Pack 1, Microsoft Hyper-V Server 2008 R2

Comentarios