Impossible d’utiliser kdump ou kexec pour les machines virtuelles Linux sur Hyper-V

Cet article fournit une résolution à un problème où kdump ou kexec ne peut pas être utilisé pour les machines virtuelles Linux sur Hyper-V.

S’applique à : Windows Server 2012 R2, Windows Server 2008 R2 Service Pack 1
Numéro de la base de connaissances d’origine : 2858695

Symptômes

  • Pré-Windows Server 2012 R2

    Prenons l’exemple du scénario suivant :

    • Vous disposez d’un ordinateur pré-Windows Server 2012 R2 sur lequel le rôle Hyper-V est installé.

    • Vous installez Linux sur une machine virtuelle Hyper-V sur l’ordinateur.

    • Vous configurez kdump sur la machine virtuelle Linux.

      Remarque

      La machine virtuelle Linux possède déjà les pilotes Linux Integration Services. Les pilotes peuvent être prédéfinis ou installés manuellement.

      Dans ce scénario, si la machine virtuelle Linux se bloque, le fichier de vidage principal du noyau Linux n’est pas généré comme prévu.

  • Windows Server 2012 R2

    Prenons l’exemple du scénario suivant :

    • Vous disposez de machines virtuelles Linux sur Windows Server 2012 hôte Hyper-V R2.

    • Au moins 15 processeurs virtuels sont attachés à la machine virtuelle Linux.

    • Vous configurez kdump dans la machine virtuelle Linux.

      Dans ce scénario, kdump ne fonctionne pas et le vidage sur incident n’est pas créé, car le processus cesse de répondre (se bloque).

Cause

Ce problème se produit car Hyper-V ne peut pas héberger deux connexions simultanées à partir du même pilote synthétique, qui s’exécute à l’intérieur d’une machine virtuelle.

Lorsque kdump est configuré sur une machine virtuelle Linux qui utilise le pilote de stockage synthétique Linux Integration Services (également appelé storvsc), le noyau kexec est configuré pour utiliser le même pilote. Si la machine virtuelle Linux se bloque, le pilote de stockage synthétique hébergé dans le noyau kexec tente d’ouvrir une connexion au fournisseur de stockage Hyper-V. Toutefois, Hyper-V ne parvient pas à établir la nouvelle connexion en raison de la connexion préexistante au même pilote de stockage sur la machine virtuelle Linux en panne. Par conséquent, le noyau kexec ne peut pas vider le cœur de la machine virtuelle Linux en panne.

Résolution

Pour résoudre ce problème, configurez le noyau kexec à l’aide du pilote de stockage Linux standard. Cette configuration doit être effectuée une fois que la fonctionnalité kdump est activée sur une machine virtuelle Linux. L’idée de base consiste à désactiver le pilote de stockage Linux Integration Services, puis à activer le pilote de stockage Linux standard à l’intérieur du noyau kexec à l’aide du paramètre prefer_ms_hyper_v dans le fichier de configuration approprié.

Le paramètre prefer_ms_hyper_v peut être utilisé pour contrôler le comportement du pilote de stockage Linux standard. Lorsque ce paramètre est défini sur 1 et que la machine virtuelle Linux s’exécute sur Hyper-V, le pilote de stockage Linux standard se désactive et permet au pilote de stockage Linux Integration Services de contrôler les périphériques de stockage. En définissant le paramètre prefer_ms_hyper_v sur 0, le pilote de stockage Linux standard est autorisé à fonctionner. Étant donné que le pilote de stockage Linux standard ne nécessite pas de connexion à Hyper-V, le noyau kexec peut vider le cœur.

Différentes distributions Linux ont des mécanismes légèrement différents pour spécifier la valeur de prefer_ms_hyper_v. La section suivante décrit comment le paramètre peut être défini pour plusieurs distributions Linux populaires.

Red Hat Enterprise Linux (RHEL)

Dans RHEL 5.9, vous devez passer le paramètre prefer_ms_hyper_v via un argument de ligne de commande du noyau au module ide_core intégré au noyau RHEL 5.9. Par défaut, ce paramètre est initialisé sur 1 et la machine virtuelle Linux évite d’utiliser le module ide_core si elle s’exécute dans un environnement Hyper-V. Les administrateurs doivent définir la valeur du paramètre prefer_ms_hyper_v sur 0 afin que le pilote ide_core devienne opérationnel pendant le processus de démarrage du noyau kexec.

Dans RHEL 6.4, vous devez passer le paramètre prefer_ms_hyper_v au module de pilote ata_piix .

Pour ce faire, modifiez le contenu de /etc/kdump.conf. Voir 11.10. Empêcher le chargement des pilotes de noyau pour kdump pour plus d’informations.

Ubuntu 12.04(.x)

Dans Ubuntu 12.04(. x), vous devez passer le paramètre prefer_ms_hyper_v au pilote ata_piix. Vous pouvez le faire en modifiant le contenu du fichier /etc/init.d/kdump.

Pour modifier le contenu du fichier /etc/init.d/kdump, ajoutez ata_piix. prefer_ms_hyper_v=0 aux options de ligne de commande kdump :

do_start {}
{
    ....  
    ....  
    APPEND="$APPEND kdump_needed maxcpus=1 irqpoll reset_devices ata_piix.prefer_ms_hyperv=0"  
    ...  
}

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

Dans les distributions SLES 11 SP2(x), vous devez passer le paramètre prefer_ms_hyper_v au pilote ata_piix. Pour ce faire, modifiez le contenu du fichier /etc/sysconfig/kdump comme suit :

Ajoutez ata_piix.prefer_ms_hyper_v=0 à KDUMP_COMMANDLINE_APPEND :

KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0 »

Après les modifications requises, le fichier /etc/sysconfig/kdump ressemble à ceci :

KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0 »

Plus d’informations

KDUMP doit être configuré de la manière standard suggérée par les distributions Linux.

Exclusion de responsabilité de tiers

Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces produits.