kdump oder kexec kann nicht für virtuelle Linux-Computer auf Hyper-V verwendet werden

Dieser Artikel bietet eine Lösung für ein Problem, bei dem kdump oder kexec nicht für virtuelle Linux-Computer in Hyper-V verwendet werden kann.

Gilt für: Windows Server 2012 R2, Windows Server 2008 R2 Service Pack 1
Ursprüngliche KB-Nummer: 2858695

Symptome

  • Pre-Windows Server 2012 R2

    Stellen Sie sich folgendes Szenario vor:

    • Sie verfügen über einen vorab Windows Server 2012 R2-basierten Computer, auf dem die Hyper-V-Rolle installiert ist.

    • Sie installieren Linux auf einem virtuellen Hyper-V-Computer auf dem Computer.

    • Sie konfigurieren kdump auf dem virtuellen Linux-Computer.

      Hinweis

      Der virtuelle Linux-Computer verfügt bereits über die Linux Integration Services-Treiber. Die Treiber können entweder vorkonfiguriert oder manuell installiert werden.

      Wenn in diesem Szenario der virtuelle Linux-Computer abstürzt, wird die Kernabbilddatei aus dem Linux-Kernel nicht wie erwartet generiert.

  • Windows Server 2012 R2

    Stellen Sie sich folgendes Szenario vor:

    • Sie verfügen über virtuelle Linux-Computer auf Windows Server 2012 R2 Hyper-V-Host.

    • Mindestens 15 vCPUs sind an den virtuellen Linux-Computer angefügt.

    • Sie konfigurieren kdump auf dem virtuellen Linux-Computer.

      In diesem Szenario funktioniert kdump nicht, und das Absturzabbild wird nicht erstellt, da der Prozess nicht mehr reagiert (hängt).

Ursache

Dieses Problem tritt auf, weil Hyper-V nicht zwei gleichzeitige Verbindungen vom gleichen synthetischen Treiber hosten kann, der auf einem virtuellen Computer ausgeführt wird.

Wenn kdump auf einem virtuellen Linux-Computer konfiguriert ist, der den synthetischen Linux Integration Services-Speichertreiber (auch als storvsc bezeichnet) verwendet, wird der kexec-Kernel für die Verwendung desselben Treibers konfiguriert. Wenn der virtuelle Linux-Computer abstürzt, versucht der synthetische Speichertreiber, der im kexec-Kernel gehostet wird, eine Verbindung mit dem Hyper-V-Speicheranbieter zu öffnen. Hyper-V kann die neue Verbindung jedoch aufgrund der bereits vorhandenen Verbindung mit demselben Speichertreiber auf dem abgestürzten virtuellen Linux-Computer nicht herstellen. Daher kann der kexec-Kernel den Kern für den abgestürzten virtuellen Linux-Computer nicht abspeichern.

Lösung

Konfigurieren Sie den kexec-Kernel mithilfe des Linux-Standardspeichertreibers, um dieses Problem zu beheben. Diese Konfiguration muss ausgeführt werden, nachdem die kdump-Funktionalität auf einem virtuellen Linux-Computer aktiviert wurde. Die Grundidee besteht darin, den Linux Integration Services-Speichertreiber zu deaktivieren und dann den Linux-Standardspeichertreiber im kexec-Kernel zu aktivieren, indem Sie den Parameter prefer_ms_hyper_v in der entsprechenden Konfigurationsdatei verwenden.

Der parameter prefer_ms_hyper_v kann verwendet werden, um das Verhalten des Linux-Standardspeichertreibers zu steuern. Wenn dieser Parameter auf 1 festgelegt ist und der virtuelle Linux-Computer auf Hyper-V ausgeführt wird, deaktiviert sich der Linux-Standardspeichertreiber selbst und ermöglicht dem Linux Integration Services-Speichertreiber die Steuerung der Speichergeräte. Wenn Sie den parameter prefer_ms_hyper_v auf 0 festlegen, kann der Linux-Standardspeichertreiber funktionieren. Da der Standard-Linux-Speichertreiber keine Verbindung mit Hyper-V erfordert, kann der kexec-Kernel Kerne sichern.

Verschiedene Linux-Distributionen verfügen über leicht unterschiedliche Mechanismen, um den Wert von prefer_ms_hyper_v anzugeben. Im folgenden Abschnitt wird beschrieben, wie der Parameter für mehrere beliebte Linux-Distributionen festgelegt werden kann.

Red Hat Enterprise Linux (RHEL)

In RHEL 5.9 müssen Sie den parameter prefer_ms_hyper_v über ein Kernel-Befehlszeilenargument an das ide_core Modul übergeben, das in den RHEL 5.9-Kernel integriert ist. Standardmäßig wird dieser Parameter auf 1 initialisiert und bewirkt, dass der virtuelle Linux-Computer die Verwendung des ide_core Moduls vermeidet, wenn er in einer Hyper-V-Umgebung ausgeführt wird. Administratoren müssen den prefer_ms_hyper_v Parameterwert auf 0 festlegen, damit der ide_core Treiber während des Startvorgangs des kexec-Kernels betriebsbereit wird.

In RHEL 6.4 müssen Sie den parameter prefer_ms_hyper_v an das ata_piix-Treibermodul übergeben.

Ändern Sie dazu den Inhalt von /etc/kdump.conf. Siehe 11.10. Verhindern, dass Kerneltreiber für kdump geladen werden , um weitere Informationen zu erhalten.

Ubuntu 12.04(.x)

In Ubuntu 12.04(. x) müssen Sie den parameter prefer_ms_hyper_v an den ata_piix treiber übergeben. Sie können den Inhalt der Datei /etc/init.d/kdump ändern.

Um den Inhalt der Datei "/etc/init.d/kdump" zu ändern, fügen Sie ata_piix an. prefer_ms_hyper_v=0 zu den kdump-Befehlszeilenoptionen:

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)

In SLES 11 SP2(x)-Verteilungen müssen Sie den parameter prefer_ms_hyper_v an den ata_piix Treiber übergeben. Dazu können Sie den Inhalt der Datei /etc/sysconfig/kdump wie folgt ändern:

Fügen Sie ata_piix.prefer_ms_hyper_v=0 an KDUMP_COMMANDLINE_APPEND an:

KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0"

Nach den erforderlichen Bearbeitungen sieht die Datei /etc/sysconfig/kdump wie folgt aus:

KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0"

Weitere Informationen

KDUMP sollte auf die von Linux-Distributionen vorgeschlagene Standardmethode konfiguriert werden.

Informationen zum Haftungsausschluss von Drittanbietern

Die in diesem Artikel genannten Drittanbieterprodukte stammen von Herstellern, die von Microsoft unabhängig sind. Microsoft gewährt keine implizite oder sonstige Garantie in Bezug auf die Leistung oder Zuverlässigkeit dieser Produkte.