Non è possibile usare kdump o kexec per le macchine virtuali Linux in Hyper-V

Questo articolo fornisce una soluzione a un problema per cui kdump o kexec non possono essere usati per le macchine virtuali Linux in Hyper-V.

Si applica a: Windows Server 2012 R2, Windows Server 2008 R2 Service Pack 1
Numero KB originale: 2858695

Sintomi

  • Pre-Windows Server 2012 R2

    Considerare lo scenario descritto di seguito:

    • Si dispone di un computer pre-Windows Server 2012 basato su R2 in cui è installato il ruolo Hyper-V.

    • Si installa Linux in una macchina virtuale Hyper-V nel computer.

    • È possibile configurare kdump nella macchina virtuale Linux.

      Nota

      La macchina virtuale Linux dispone già dei driver di Linux Integration Services. I driver possono essere precompilati o installati manualmente.

      In questo scenario, se la macchina virtuale Linux si arresta in modo anomalo, il file dump di base dal kernel Linux non viene generato come previsto.

  • Windows Server 2012 R2

    Considerare lo scenario descritto di seguito:

    • Sono disponibili macchine virtuali Linux in Windows Server 2012 host Hyper-V R2.

    • 15 o più vCPU sono collegati alla macchina virtuale Linux.

    • È possibile configurare kdump nella macchina virtuale Linux.

      In questo scenario kdump non funziona e il dump di arresto anomalo non viene creato, perché il processo smette di rispondere (si blocca).

Causa

Questo problema si verifica perché Hyper-V non può ospitare due connessioni simultanee dallo stesso driver sintetico, in esecuzione all'interno di una macchina virtuale.

Quando kdump è configurato in una macchina virtuale Linux che usa il driver di archiviazione sintetico di Linux Integration Services (noto anche come storvsc), il kernel kexec è configurato per l'uso dello stesso driver. Se la macchina virtuale Linux si arresta in modo anomalo, il driver di archiviazione sintetico ospitato nel kernel kexec tenta di aprire una connessione al provider di archiviazione Hyper-V. Tuttavia, Hyper-V non riesce a stabilire la nuova connessione a causa della connessione preesistente allo stesso driver di archiviazione nella macchina virtuale Linux arrestata in modo anomalo. Pertanto, il kernel kexec non può eseguire il dump del core per la macchina virtuale Linux arrestata in modo anomalo.

Risoluzione

Per risolvere questo problema, configurare il kernel kexec usando il driver di archiviazione Linux standard. Questa configurazione deve essere eseguita dopo l'abilitazione della funzionalità kdump in una macchina virtuale Linux. L'idea di base consiste nel disattivare il driver di archiviazione di Linux Integration Services e quindi abilitare il driver di archiviazione Linux standard all'interno del kernel kexec usando il parametro prefer_ms_hyper_v nel file di configurazione appropriato.

Il parametro prefer_ms_hyper_v può essere usato per controllare il comportamento del driver di archiviazione Linux standard. Quando questo parametro è impostato su 1 e la macchina virtuale Linux è in esecuzione in Hyper-V, il driver di archiviazione Linux standard si disabilita e consente al driver di archiviazione di Linux Integration Services di controllare i dispositivi di archiviazione. Impostando il parametro prefer_ms_hyper_v su 0, il driver di archiviazione Linux standard può funzionare. Poiché il driver di archiviazione Linux standard non richiede una connessione a Hyper-V, il kernel kexec può eseguire il dump del core.

Distribuzioni Linux diverse hanno meccanismi leggermente diversi per specificare il valore di prefer_ms_hyper_v. Nella sezione seguente viene descritto come impostare il parametro per diverse distribuzioni Linux più diffuse.

Red Hat Enterprise Linux (RHEL)

In RHEL 5.9 è necessario passare il parametro prefer_ms_hyper_v tramite un argomento della riga di comando del kernel al modulo ide_core integrato nel kernel RHEL 5.9. Per impostazione predefinita, questo parametro viene inizializzato su 1 e fa in modo che la macchina virtuale Linux eviti di usare il modulo ide_core se è in esecuzione in un ambiente Hyper-V. Gli amministratori devono impostare il valore del parametro prefer_ms_hyper_v su 0 in modo che il driver ide_core diventi operativo durante il processo di avvio del kernel kexec.

In RHEL 6.4 è necessario passare il parametro prefer_ms_hyper_v al modulo driver ata_piix .

A tale scopo, modificare il contenuto di /etc/kdump.conf. Vedere 11.10. Impedire il caricamento dei driver del kernel per kdump per altre informazioni.

Ubuntu 12.04(.x)

In Ubuntu 12.04(. x), è necessario passare il parametro prefer_ms_hyper_v al driver ata_piix. È possibile eseguire questa operazione modificando il contenuto del file /etc/init.d/kdump.

Per modificare il contenuto del file /etc/init.d/kdump, aggiungere ata_piix. prefer_ms_hyper_v=0 alle opzioni della riga di comando 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)

Nelle distribuzioni SLES 11 SP2(x) è necessario passare il parametro prefer_ms_hyper_v al driver ata_piix. A tale scopo, modificare il contenuto del file /etc/sysconfig/kdump come indicato di seguito:

Aggiungere ata_piix.prefer_ms_hyper_v=0 a KDUMP_COMMANDLINE_APPEND:

KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0"

Dopo le modifiche necessarie, il file /etc/sysconfig/kdump sarà simile al seguente:

KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0"

Ulteriori informazioni

KDUMP deve essere configurato nel modo standard suggerito dalle distribuzioni Linux.

Dichiarazione di non responsabilità sulle informazioni di terze parti

I prodotti di terzi citati in questo articolo sono prodotti da società indipendenti da Microsoft. Microsoft non rilascia alcuna garanzia implicita o esplicita relativa alle prestazioni o all'affidabilità di tali prodotti