Nie można użyć narzędzia kdump lub kexec dla maszyn wirtualnych z systemem Linux w funkcji Hyper-V

Ten artykuł zawiera rozwiązanie problemu polegającego na tym, że kdump lub kexec nie mogą być używane dla maszyn wirtualnych z systemem Linux w funkcji Hyper-V.

Dotyczy: Windows Server 2012 R2, Windows Server 2008 R2 Service Pack 1
Oryginalny numer KB: 2858695

Symptomy

  • Przed Windows Server 2012 R2

    Rozpatrzmy następujący scenariusz:

    • Masz wstępnie Windows Server 2012 komputer oparty na języku R2 z zainstalowaną rolą funkcji Hyper-V.

    • System Linux jest instalowany na maszynie wirtualnej funkcji Hyper-V na komputerze.

    • Narzędzie kdump można skonfigurować na maszynie wirtualnej z systemem Linux.

      Uwaga

      Maszyna wirtualna z systemem Linux ma już sterowniki usług Integracja systemu Linux. Sterowniki można wstępnie lub ręcznie zainstalować.

      W tym scenariuszu, jeśli maszyna wirtualna z systemem Linux ulegnie awarii, podstawowy plik zrzutu z jądra systemu Linux nie zostanie wygenerowany zgodnie z oczekiwaniami.

  • Windows Server 2012 R2

    Rozpatrzmy następujący scenariusz:

    • Masz maszyny wirtualne z systemem Linux na hoście funkcji Hyper-V Windows Server 2012 R2.

    • Do maszyny wirtualnej z systemem Linux jest dołączonych co najmniej 15 procesorów wirtualnych.

    • Narzędzie kdump można skonfigurować na maszynie wirtualnej z systemem Linux.

      W tym scenariuszu narzędzie kdump nie działa, a zrzut awaryjny nie jest tworzony, ponieważ proces przestaje odpowiadać (zawiesza się).

Przyczyna

Ten problem występuje, ponieważ funkcja Hyper-V nie może hostować dwóch równoczesnych połączeń z tego samego sterownika syntetycznego, który działa wewnątrz maszyny wirtualnej.

Gdy kdump jest skonfigurowany na maszynie wirtualnej z systemem Linux, która używa sterownika magazynu syntetycznego usług Integracja systemu Linux (znanego również jako storvsc), jądro kexec jest skonfigurowane do używania tego samego sterownika. Jeśli maszyna wirtualna z systemem Linux ulegnie awarii, syntetyczny sterownik magazynu hostowany w jądrze kexec próbuje otworzyć połączenie z dostawcą magazynu funkcji Hyper-V. Jednak funkcja Hyper-V nie może ustanowić nowego połączenia z powodu istniejącego wcześniej połączenia z tym samym sterownikiem magazynu na awarii maszyny wirtualnej z systemem Linux. W związku z tym jądro kexec nie może zrzucić rdzenia dla awarii maszyny wirtualnej z systemem Linux.

Rozwiązanie

Aby rozwiązać ten problem, skonfiguruj jądro kexec przy użyciu standardowego sterownika magazynu systemu Linux. Tę konfigurację należy wykonać po włączeniu funkcji kdump na maszynie wirtualnej z systemem Linux. Podstawową ideą jest wyłączenie sterownika magazynu usług Integracja systemu Linux, a następnie włączenie standardowego sterownika magazynu systemu Linux wewnątrz jądra kexec przy użyciu parametru prefer_ms_hyper_v w odpowiednim pliku konfiguracji.

Parametr prefer_ms_hyper_v może służyć do kontrolowania zachowania standardowego sterownika magazynu systemu Linux. Gdy ten parametr jest ustawiony na wartość 1, a maszyna wirtualna z systemem Linux jest uruchomiona w funkcji Hyper-V, standardowy sterownik magazynu systemu Linux wyłącza się i umożliwia sterownikowi magazynu usługi Linux Integration Services kontrolowanie urządzeń magazynujących. Ustawiając parametr prefer_ms_hyper_v na wartość 0, standardowy sterownik magazynu systemu Linux może działać. Ponieważ standardowy sterownik magazynu systemu Linux nie wymaga połączenia z funkcją Hyper-V, jądro kexec może zrzucić rdzeń.

Różne dystrybucje systemu Linux mają nieco inne mechanizmy określania wartości prefer_ms_hyper_v. W poniższej sekcji opisano sposób ustawiania parametru dla kilku popularnych dystrybucji systemu Linux.

Red Hat Enterprise Linux (RHEL)

W programie RHEL 5.9 należy przekazać parametr prefer_ms_hyper_v za pośrednictwem argumentu wiersza polecenia jądra do modułu ide_core wbudowanego w jądro RHEL 5.9. Domyślnie ten parametr jest inicjowany do wartości 1 i powoduje, że maszyna wirtualna z systemem Linux unika używania modułu ide_core, jeśli jest uruchomiona w środowisku funkcji Hyper-V. Administratorzy muszą ustawić wartość parametru prefer_ms_hyper_v na 0, aby sterownik ide_core mógł działać podczas procesu rozruchu jądra kexec.

W programie RHEL 6.4 należy przekazać parametr prefer_ms_hyper_v do modułu sterownika ata_piix .

W tym celu zmień zawartość pliku /etc/kdump.conf. Zobacz 11.10. Aby uzyskać więcej informacji, nie można załadować sterowników jądra dla narzędzia kdump .

Ubuntu 12.04(.x)

W systemie Ubuntu 12.04(. x), musisz przekazać parametr prefer_ms_hyper_v do sterownika ata_piix. Możesz to zrobić, zmieniając zawartość pliku /etc/init.d/kdump.

Aby zmienić zawartość pliku /etc/init.d/kdump, dołącz ata_piix. prefer_ms_hyper_v=0 do opcji wiersza polecenia 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)

W dystrybucjach SLES 11 SP2(x) należy przekazać parametr prefer_ms_hyper_v do sterownika ata_piix. Można to zrobić, modyfikując zawartość pliku /etc/sysconfig/kdump w następujący sposób:

Dołącz ata_piix.prefer_ms_hyper_v=0 do KDUMP_COMMANDLINE_APPEND:

KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0"

Po wprowadzeniu wymaganych zmian plik /etc/sysconfig/kdump wygląda następująco:

KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0"

Więcej informacji

Protokół KDUMP należy skonfigurować w standardowy sposób sugerowany przez dystrybucje systemu Linux.

Zastrzeżenie dotyczące innych firm

Produkty innych firm omówione w tym artykule są wytwarzane przez producentów niezależnych od firmy Microsoft. Firma Microsoft nie udziela żadnych gwarancji, dorozumianych ani żadnego innego rodzaju, w odniesieniu do wydajności lub niezawodności tych produktów.