現在オフラインです。再接続するためにインターネットの接続を待っています

Hyper-V 上で Linux 仮想コンピューターの kdump または kexec を使用できない

現象
次のような状況で問題が発生します。
  • Windows 2012 R2 より前の OS を搭載したコンピューターに Hyper-V の役割がインストールされています。
  • そのコンピューターで Hyper-V 仮想コンピューター上に Linux をインストールします。
  • Linux VM 上で kdump を構成します。Linux VM には、Linux Integration Services ドライバーがあらかじめまたは手動で既にインストールされています。
このシナリオで Linux 仮想コンピューターがクラッシュした場合、Linux カーネルからコアダンプ ファイルが正常に生成されません。
原因
この問題は、仮想コンピューター内部で実行されている同じ統合ドライバーからの 2 つの同時接続を Hyper-V がホストできないことが原因で発生します。

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 に初期設定され、このために Linux 仮想コンピューターは Hyper-V 環境で実行されている場合に ide_core モジュールの使用を回避します。管理者は、prefer_ms_hyper_v パラメーター値を 0 に設定し、kexec カーネルの起動処理中に ide_core ドライバーが動作可能になるようにする必要があります。この操作は、/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. オプションのパラメーターを追加し、そのパラメーターを 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 Server (SLES) 11 SP2(x)

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

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 ディストリビューションで指定されている標準的な方法で構成する必要があります。

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

文書番号:2858695 - 最終更新日: 07/30/2013 12:08:00 - リビジョン: 4.0

Microsoft Hyper-V Server 2008 R2, Microsoft Hyper-V Server 2008 R2 Service Pack 1, Windows Server 2008 R2 Standard, Windows Server 2008 R2 Enterprise, Windows Server 2008 R2 Datacenter, Windows Server 2008 R2 for Itanium-Based Systems, Windows Server 2008 R2 Service Pack 1, Windows Storage Server 2008 R2, Windows Storage Server 2008 R2 Essentials, Microsoft Hyper-V Server 2012, Windows Server 2012 Foundation, Windows Server 2012 Release Candidate, Windows Server 2012 Standard, Windows Storage Server 2012 Standard, Windows Storage Server 2012 Workgroup

  • KB2858695
フィードバック
r="var m=document.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">