Det går inte att använda kdump eller kexec för virtuella Linux-datorer på Hyper-V

Den här artikeln innehåller en lösning på ett problem där kdump eller kexec inte kan användas för virtuella Linux-datorer på Hyper-V.

Gäller för: Windows Server 2012 R2, Windows Server 2008 R2 Service Pack 1
Ursprungligt KB-nummer: 2858695

Symptom

  • Före Windows Server 2012 R2

    Tänk dig följande situation:

    • Du har en Windows Server 2012 R2-baserad dator som har Hyper-V-rollen installerad.

    • Du installerar Linux på en virtuell Hyper-V-dator på datorn.

    • Du konfigurerar kdump på den virtuella Linux-datorn.

      Obs!

      Den virtuella Linux-datorn har redan Linux Integration Services-drivrutiner. Drivrutinerna kan antingen vara fördefinierade eller manuellt installerade.

      I det här scenariot genereras inte kärndumpfilen från Linux-kärnan som förväntat om den virtuella Linux-datorn kraschar.

  • Windows Server 2012 R2

    Tänk dig följande situation:

    • Du har virtuella Linux-datorer på Windows Server 2012 R2 Hyper-V-värd.

    • 15 eller fler virtuella processorer är anslutna till den virtuella Linux-datorn.

    • Du konfigurerar kdump på den virtuella Linux-datorn.

      I det här scenariot fungerar inte kdump och kraschdumpen skapas inte eftersom processen slutar svara (låser sig).

Orsak

Det här problemet beror på att Hyper-V inte kan vara värd för två samtidiga anslutningar från samma syntetiska drivrutin, som körs på en virtuell dator.

När kdump har konfigurerats på en virtuell Linux-dator som använder den syntetiska lagringsdrivrutinen för Linux Integration Services (även kallat storvsc) konfigureras kexec-kerneln för att använda samma drivrutin. Om den virtuella Linux-datorn kraschar försöker den syntetiska lagringsdrivrutinen som finns i kexec-kerneln att öppna en anslutning till Hyper-V-lagringsprovidern. Hyper-V kan dock inte upprätta den nya anslutningen på grund av den befintliga anslutningen till samma lagringsdrivrutin på den kraschade virtuella Linux-datorn. Därför kan kexec-kärnan inte dumpa kärnan för den kraschade virtuella Linux-datorn.

Åtgärd

Lös problemet genom att konfigurera kexec-kerneln med hjälp av linux-standardlagringsdrivrutinen. Den här konfigurationen måste utföras när kdump-funktionen har aktiverats på en virtuell Linux-dator. Den grundläggande idén är att stänga av Linux Integration Services-lagringsdrivrutinen och sedan aktivera linux-standardlagringsdrivrutinen i kexec-kerneln med hjälp av parametern prefer_ms_hyper_v i lämplig konfigurationsfil.

Parametern prefer_ms_hyper_v kan användas för att styra beteendet för linux-standardlagringsdrivrutinen. När den här parametern är inställd på 1 och den virtuella Linux-datorn körs på Hyper-V inaktiverar linux-standardlagringsdrivrutinen sig själv och låter Linux Integration Services-lagringsdrivrutinen styra lagringsenheterna. Genom att ange prefer_ms_hyper_v parametern till 0 tillåts linux-standardlagringsdrivrutinen att fungera. Eftersom standarddrivrutinen för Linux-lagring inte kräver någon anslutning till Hyper-V kan kexec-kerneln dumpa kärnor.

Olika Linux-distributioner har lite olika mekanismer för att ange värdet för prefer_ms_hyper_v. I följande avsnitt beskrivs hur parametern kan anges för flera populära Linux-distributioner.

Red Hat Enterprise Linux (RHEL)

I RHEL 5.9 måste du skicka parametern prefer_ms_hyper_v via ett kernel-kommandoradsargument till den ide_core modul som är inbyggd i RHEL 5.9-kerneln. Som standard initieras den här parametern till 1 och gör att den virtuella Linux-datorn undviker att använda modulen ide_core om den körs i en Hyper-V-miljö. Administratörer måste ange parametervärdet prefer_ms_hyper_v till 0 så att drivrutinen för ide_core används under startprocessen för kexec-kerneln.

I RHEL 6.4 måste du skicka parametern prefer_ms_hyper_v till modulen ata_piix driver.

Det gör du genom att ändra innehållet i /etc/kdump.conf. Se 11.10. Förhindra att kerneldrivrutiner läses in för kdump för mer information.

Ubuntu 12.04(.x)

I Ubuntu 12.04(. x) måste du skicka parametern prefer_ms_hyper_v till ata_piix drivrutinen. Du kan göra det genom att ändra innehållet i filen /etc/init.d/kdump.

Om du vill ändra innehållet i filen /etc/init.d/kdump lägger du till ata_piix. prefer_ms_hyper_v=0 till kommandoradsalternativen för 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)

I SLES 11 SP2(x)-distributioner måste du skicka parametern prefer_ms_hyper_v till ata_piix drivrutinen. Du kan göra det genom att ändra innehållet i filen /etc/sysconfig/kdump på följande sätt:

Lägg till ata_piix.prefer_ms_hyper_v=0 i KDUMP_COMMANDLINE_APPEND:

KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0"

Efter de nödvändiga redigeringarna ser filen /etc/sysconfig/kdump ut så här:

KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0"

Mer information

KDUMP bör konfigureras på det standardmässiga sätt som föreslås av Linux-distributioner.

Ansvarsfriskrivning för information från tredje part

De produkter från andra tillverkare som diskuteras i denna artikel tillverkas oberoende av Microsoft. Produkternas funktion eller tillförlitlighet kan därför inte garanteras.