Hyper-V で Linux 仮想マシンに kdump または kexec を使用できない

この記事では、Hyper-V 上の Linux 仮想マシンで kdump または kexec を使用できない問題の解決方法について説明します。

適用対象:  Windows Server 2012R2、Windows Server 2008 R2 Service Pack 1
元の KB 番号:   2858695

現象

  • Pre-Windows Server 2012 R2

    次のような状況で問題が発生します。

    • Hyper-V の役割がWindows Server 2012 R2 ベースのコンピューターが事前にインストールされています。

    • コンピューター上の Hyper-V 仮想マシンに Linux をインストールします。

    • Linux 仮想マシンで kdump を構成します。

      注意

      Linux 仮想マシンには、Linux 統合サービス ドライバーが既に存在します。 ドライバーは、事前構築または手動でインストールできます。

      このシナリオでは、Linux 仮想マシンがクラッシュした場合、Linux カーネルのコア ダンプ ファイルは予想通り生成されません。

  • Windows Server 2012 R2

    次のような状況で問題が発生します。

    • R2 Hyper-V ホストWindows Server 2012 Linux 仮想マシンがあります。

    • 15 つ以上の vCPU が Linux 仮想マシンに接続されています。

    • Linux 仮想マシンで kdump を構成します。

      このシナリオでは、kdump は動作しないので、クラッシュ ダンプは作成されません。これは、プロセスが応答を停止する (ハング) ためです。

原因

この問題は、Hyper-V が仮想マシン内で実行されている同じ代理ドライバーから 2 つの同時接続をホストできない場合に発生します。

Linux Integration Services 合成記憶域ドライバー (storvsc とも呼ばれる) を使用している Linux 仮想マシンで kdump が構成されている場合、kexec カーネルは同じドライバーを使用するように構成されます。 Linux 仮想マシンがクラッシュした場合、kexec カーネルでホストされている代理記憶域ドライバーは、Hyper-V ストレージ プロバイダーへの接続を開きます。 ただし、クラッシュした Linux 仮想マシン上の同じストレージ ドライバーへの既存の接続のため、Hyper-V は新しい接続を確立できません。 したがって、kexec カーネルは、クラッシュした Linux 仮想マシンのコアをダンプできません。

解決方法

この問題を解決するには、標準の Linux ストレージ ドライバーを使用して kexec カーネルを構成します。 この構成は、Linux 仮想マシンで kdump 機能を有効にした後に実行する必要があります。 基本的な考え方は、Linux Integration Services ストレージ ドライバーをオフにしてから、適切な構成ファイルで prefer_ms_hyper_v パラメーターを使用して、kexec カーネル内の標準 Linux ストレージ ドライバーを有効にすることです。

標準prefer_ms_hyper_vパラメーターを使用して、標準の Linux ストレージ ドライバーの動作を制御できます。 このパラメーターを 1 に設定し、Linux 仮想マシンが Hyper-V で実行されている場合、標準の Linux ストレージ ドライバーはそれ自体を無効にし、Linux Integration Services ストレージ ドライバーがストレージ デバイスを制御できます。 prefer_ms_hyper_vパラメーターを 0 に設定すると、標準の Linux ストレージ ドライバーが機能します。 標準の Linux ストレージ ドライバーは Hyper-V への接続を必要としないので、kexec カーネルはコアをダンプできます。

異なる Linux ディストリビューションでは、システムの値を指定するメカニズムが若干異prefer_ms_hyper_v。 次のセクションでは、いくつかの一般的な Linux ディストリビューションに対してパラメーターを設定する方法について説明します。

Red Hat Enterprise Linux (RHEL) 5.9

RHEL 5.9 では、カーネル コマンド ライン引数を使用して prefer_ms_hyper_v パラメーターを RHEL 5.9 カーネルに組み込む ide_core モジュールに渡す必要があります。 既定では、このパラメーターは 1 に初期化され、Hyper-V 環境で実行されている場合、Linux 仮想マシンは ide_core モジュールの使用を回避します。 管理者は、kexec カーネル ブート プロセス中prefer_ms_hyper_vドライバーが動作しなide_coreパラメーターの値を 0 に設定する必要があります。 これを行うには、/etc/kdump.conf の内容を変更します。

/etc/kdump.conf の内容を変更するには、次の手順を実行します。

  1. 次のコマンドを実行して、ローカル ディレクトリに書き込む kdump を構成します。

    path /var/crash`
    
  2. /etc/kdump.conf の Linux Integration Services ドライバーの一覧をブロックし、ドライバーが kexec カーネルに読み込むのを防ぐ。 これを行うには、次のコマンドを実行します。

    blacklist hv_vmbus hv_storvsc hv_utils hv_netvsc hid-hyperv
    
  3. 次のコマンドを実行して、ディスクのタイム アウト値を構成します。

    disk_timeout 100
    
  4. 必要な編集が完了すると、/etc/kdump.conf ファイルは次のように表示されます。

    path /var/crash  
    core_collector makedumpfile -c--message-level 1 -d 31  
    blacklist hv_vmbus hv_storvsc hv_utils hv_netvsc hid-hyperv  
    disk_timeout 100
    
  5. /etc/sysconfig/kdump ファイルの内容を次のように変更します。

    • 引数 prefer_ms_hyperv=0 を含めるには、次の行を追加または変更します。

      KDUMP_COMMANDLINE_APPEND="irqpoll maxcpus=1 reset_devices ide_core.prefer_ms_hyperv=0"

    • 必要な編集の後、/etc/sysconfig/kdump ファイルは次のように表示されます。

      KDUMP_COMMANDLINE=""
      # この変数を使用すると、現在の kdump コマンド ラインに引数を追加できます
      # 上記のいずれかの方法からKDUMP_COMMANDLINE/proc/cmdline から取得した場合
      KDUMP_COMMANDLINE_APPEND="irqpoll maxcpus=1 reset_devices ide_core.prefer_ms_hyperv=0"

Red Hat Enterprise Linux (RHEL) 6.4

RHEL 6.4 では、prefer_ms_hyper_v ドライバー モジュールに ata_piixする必要があります。 これを行うには、/etc/kdump.conf ファイルの内容を変更します。

/etc/kdump.conf の内容を変更するには、次の手順を実行します。

  1. ローカル ディレクトリに書き込む kdump を構成します。

    path /var/crash
    
  2. 追加のモジュールを追加ata_piix、sr_mod、sd_mod。

    extra_modules ata_piix sr_mod sd_mod
    
  3. etc/kdump.conf の Linux Integration Services ドライバーの一覧をブロックします。 これにより、ドライバーが kexec カーネルに読み込まれるのを防ぐ。

    blacklist hv_vmbus hv_storvsc hv_utils hv_netvsc hid-hyperv
    
  4. options パラメーターを追加して、パラメーターを次のモジュールata_piixします。

    options ata_piix prefer_ms_hyperv=0
    
  5. ディスクのタイム アウト値を構成して、応答を停止しない (ハング) よう設定します。

    disk_timeout 100
    
  6. 必要な編集が完了すると、/etc/kdump.conf ファイルは次のように表示されます。

    path /var/crash  
    core_collector makedumpfile -c--message-level 1 -d 31  
    extra_modules ata_piix sr_mod sd_mod  
    blacklist hv_vmbus hv_storvsc hv_utils hv_netvsc hid-hyperv  
    options ata_piix prefer_ms_hyperv=0  
    disk_timeout 100
    

Ubuntu 12.04(.x)

Ubuntu 12.04(. x)、prefer_ms_hyper_v パラメーターをドライバーに渡ata_piixがあります。 /etc/init.d/kdump ファイルの内容を変更することで実行できます。

/etc/init.d/kdump ファイルの内容を変更するには、次のata_piix。 prefer_ms_hyper_v=0 を kdump コマンド ライン オプションに設定します。

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

SUSE Linux Enterprise サーバー (SLES) 11 SP2(x)

SLES 11 SP2(x) ディストリビューションでは、prefer_ms_hyper_v パラメーターをドライバーに渡ata_piixがあります。 これを行うには、/etc/sysconfig/kdump ファイルの内容を次のように変更します。

次ata_piixに ata_piix.prefer_ms_hyper_v=0 を追加KDUMP_COMMANDLINE_APPEND。

KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0"

必要な編集の後、/etc/sysconfig/kdump ファイルは次のように表示されます。

KDUMP_COMMANDLINE_APPEND="ata_piix.prefer_ms_hyperv=0"

詳細

KDUMP は、Linux ディストリビューションで推奨される標準的な方法で構成する必要があります。

サードパーティの情報に関する免責事項

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。