Windows 8 および Windows 2012 Server 以降の仮想マシンが再起動時に失敗する
search cancel

Windows 8 および Windows 2012 Server 以降の仮想マシンが再起動時に失敗する

book

Article ID: 342800

calendar_today

Updated On:

Products

VMware vCenter Server VMware vSphere ESXi

Issue/Introduction

Symptoms:

免責事項:これは英文の記事「Windows 8 and Windows 2012 Server or later virtual machines fail upon reboot (2092807)」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。



ESXi 5.5 を仮想マシン ハードウェア バージョン 10 (vmx-10) で実行すると、次の症状が発生することがあります。

  • Windows 8 または 2012 Server 以降の仮想マシンが Microsoft Windows の起動画面で失敗する。
  • 仮想マシンを再起動、または電源を入れ直すと、仮想マシンが正常に起動する。
  • 仮想マシンが、何時間も、または何日も経ってから起動をレジュームする場合がある。
  • メモリ ダンプ分析により、タイマーの切れる将来の時間または日付のスレッド ブロックが発覚する。
  • スレッド ブロックが PciStallForPowerChange() の最中に KeDelayExecutionThread() で停止する場合がある。

:この問題は、次のような場合に発生することが確認されています。
  • 仮想マシンが 2 か月以上にわたって、電源の入れ直し(パワーオフ/パワーオン)がまったく行われていない。
  • 仮想マシンが複数の vCPU で構成されている。


Environment

VMware vCenter Server 6.0.x
VMware vSphere ESXi 5.5
VMware vSphere ESXi 6.0
VMware vCenter Server 5.5.x

Cause

Windows 8 または Windows Server 2012 以降、オペレーティング システムは起動プロセス中に、TSC(サイクルをパスするたびに 1 ずつ増える TimeStampCounter)が 0x40000000000000 以上であることを検出した場合に、TSCを CPU0 でリセットします。別の vCPU の TSC はリセットされず、その結果、2 つの vCPU TSC 値に差違が発生し、「症状」セクションに説明されている問題が発生する場合があります。Windows は、(hypervisor.cpuid.v2 をサポートしない)古いハードウェア バージョンの仮想マシンですべての CPU の TSC をリセットするため、これが該当するのはハードウェア バージョン 10 のみです。

従来の BIOS を利用する仮想マシンの場合:

ハードウェア バージョン 10 (vmx-10) までの仮想マシンでの Windows の再起動は、INIT がアサートされるソフト リセット中に行われます。ハード リセット(CPURSTPCIRST#、および RSTDRV のアサート)の後とは異なり、オペレーティング システムは TSC がソフト リセット後に 0x0 にリセットされることを想定していません。ソフト リセットでの TSC リセットのデフォルトの動作は、構成オプションを使用して変更できます。

EFI を利用する仮想マシンの場合:

これは、VMware EFI ファームウェアの既知の問題です。VMware EFI ファームウェアではハード リセットが使用できるように見えますが、実際に行われるのはソフト リセットです。

Resolution

この問題は次の各アップデートで修正されました。
または、この問題を vSphere 6.0 で解決するには、仮想マシンをハードウェア バージョン 11 にアップグレードします。

:Windows 8 または Windows Server 2012 以降がインストールされていてもゲスト オペレーティング システムが Windows 8 または Windows Server 2012 以降に設定されていない仮想マシンでは、修正でこの問題が解決されることはありません。
この問題を回避するには、vSphere Web Client で詳細構成を更新します。

vSphere Web Client で、仮想マシンの詳細構成に monitor_control.enable_softResetClearTSC = TRUE を追加するには:
  1. vSphere Web Client にログインします。

    :続行する前に、仮想マシンがパワーオフされていることを確認します。

  2. 仮想マシンを右クリックし、[設定の編集] をクリックして、仮想マシンの [設定の編集] ダイアログ ボックスを開きます。
  3. [仮想マシン オプション] をクリックします。
  4. 左側のリストで、詳細オプションを展開します。
  5. [構成パラメータの編集] をクリックします。
  6. [行の追加] をクリックします。
  7. [新しい名前] 列に monitor_control.enable_softResetClearTSC と入力します。
  8. [新しい値] 列に TRUE と入力します。
  9. [OK] をクリックし、仮想マシンの変更を保存します。
  10. 仮想マシンをパワーオンします。
詳細については、「Monitoring software shows incorrect system uptime for Windows 2008 R2 or later on hardware version 10 (2082042)」を参照してください。

または、次の PowerCLI スクリプトを複数の仮想マシンに対して使用することができます。

  • このスクリプトを実行したら、仮想マシンを vMotion またはシャットダウンしてからパワーオンし、変更を有効にする必要があります。
  • Windows 8 または Windows Server 2012 以降がインストールされていてもゲスト オペレーティング システムが Windows 8 または Windows Server 2012 以降に設定されていない仮想マシンでは、スクリプトでこの問題が回避されることはありません。

ForEach ($vm in (Get-VM)){
$vmv = Get-VM $vm | Get-View
$name = $vmv.Name
$guestid = $vmv.Summary.Config.GuestId
$vmx = New-Object VMware.Vim.VirtualMachineConfigSpec
$vmx.extraConfig += New-Object VMware.Vim.OptionValue
$vmx.extraConfig[0].key = "monitor_control.enable_softResetClearTSC"
$vmx.extraConfig[0].value = "TRUE"
if ($guestid -like "windows8*Guest") {
($vmv).ReconfigVM_Task($vmx)
}
}


Additional Information

最後の電源入れ直しからどのくらい経過すると、ハードウェア バージョン 10 の Windows 8 または Windows Server 2012 以降の仮想マシンが再起動時にハングするかを計算するには:

0x40000000000000 (Windows TSC reset value) -> 0n18014398509481984 /86400 (cycles to days) /1000000000 (Hz to GHz)

GHz:
/2 -> 104 days
/3 -> 69 days
7Windows 8 and Windows 2012 Server or later virtual machines fail upon reboot