他の仮想環境を利用するためにHyper-Vを一時的に無効にするTech TIPS

Windows OS標準の仮想環境「Hyper-V」をインストールしていると、それ以外の仮想環境を利用することができない。こんな場合はHyper-Vを一時的に無効にしてシステムを再起動させるとよい。

» 2015年11月13日 05時00分 公開
[打越浩幸デジタルアドバンテージ]
Tech TIPS
Windows Server Insider


「Tech TIPS」のインデックス

連載目次

対象OS:Windows 8/Windows 8.1/Windows 10/Windows Server 2012/Windows Server 2012 R2



解説

 Windows OSでは標準の仮想環境としてHyper-Vが利用できる。Windows Server OSだけでなく、クライアント向けのWindows 8/8.1/10(64bit版のPro/Enterpriseエディション)でもHyper-Vが利用できるため(→参考記事)、OSを問わず仮想実行環境を統一することが可能になった。

 クライアント向けのHyper-Vは、Windows OSなどをインストールして実験に使うだけでなく、例えばVisual StudioでユニバーサルWindowsアプリを開発する際に、さまざまな実行環境(WindowsタブレットやWindows Phoneなどのエミュレーター)を実行するためにも利用されている。

 だが最近ではHyper-V以外の仮想実行環境を利用したいことも少なくないだろう。他のシステムとの相互運用性などを考えると、例えばVMware(→参考記事)やVirtualBox(→参考記事)、Vagrant(これは仮想環境を管理するツール。→参考記事)などの需要があるだろう。またAndroidアプリの開発を行うなら、Intel HAXM(Intel Hardware Accelerated Execution Manager。Androidのアプリ開発でよく使われる仮想環境)を使うことも多いだろう。

 だがWindows OSにHyper-V機能がインストールされていると、これらの仮想環境アプリケーションは競合を起こして利用できない。Hyper-Vが有効なシステムでこれらを起動しようとすると、例えば次のように表示される。

Hyper-Vと競合を起こす仮想環境の例 Hyper-Vと競合を起こす仮想環境の例
Hyper-Vがインストールされていると、(現在のHyper-Vでは)それ以外の仮想実行環境を同時に実行できない。すでにCPUの仮想化機能をHyper-Vが独占的に使用しているからだ。Hyper-V機能がインストールされて有効になっている(サービスが起動している)だけで、たとえHyper-V上で仮想マシンが1つも動作していなくても、他の仮想環境を利用することはできない。
  (1)仮想環境VMware Workstation 12 Proでのエラー例。Hyper-Vがインストールされていると仮想マシンを起動できない。
  (2)Androidアプリの開発に使われるAndroid Studio上で仮想Androidデバイスを起動しようとしたところ。AVD Manager(Android Virtual Device Manager)が管理しているIntel HAXMがHyper-Vと競合を起こして、エミュレーターを起動できない。

 これのようなエラーを解消するには、Hyper-V機能をアンインストールすればよい(コントロールパネルの[プログラムと機能]にある[Windowsの機能の有効化または無効化]で「Hyper-Vプラットフォーム」の設定をオフにする)。とはいえ、この方法ではまたHyper-Vを使いたい時に面倒である。

 そこでこのような場合は、Hyper-Vを一時的に無効にしてシステムを再起動するとよい。Hyper-Vが必要な場合は、またHyper-Vを有効にしてシステムを再起動する。本TIPSでは、ブートメニューを切り替えてHyper-V機能を有効化/無効化する方法を紹介する。

 Hyper-Vの有効/無効を切り替えるには、いちいちシステムを再起動しなければならない。それでも、Hyper-V機能をインストールしたりアンインストールしたりするよりははるかに簡単である。

操作方法

 Hyper-Vの有効/無効の切り替えは、ブートメニューの設定変更だけで対応できる。

 まず管理者権限でコマンドプロンプトを開き、「bcdedit」コマンドで現在のブートメニュー項目をコピーして、新たに作成する。「/copy {current}」は現在選択・実行されているメニュー項目をコピーして新規作成するための指示である。「/d 〜〜」はブートメニュー名を指定する文字列なので、分かりやすいものを付けておく。

bcdedit /copy {current} /d "Hyper-Vなし Windows 10"



 これを実行すると新しいID文字列(メニューID)が表示されるので、それを/setに続けて記述して、次のコマンドを実行する。

bcdedit /set {<新しいID文字列>} hypervisorlaunchtype off



 実際に実行すると次のようになる。

C:\>bcdedit /copy {current} /d "Hyper-Vなし Windows 10" ……ブートエントリのコピー
エントリは {ea807010-88da-11e5-b8d5-84fe47afc82d} に正常にコピーされました。 ……この結果の {ea8070〜〜afc82d} の部分をコピーして、次のコマンドを実行する

C:\>bcdedit /set {ea807010-88da-11e5-b8d5-84fe47afc82d} hypervisorlaunchtype off ……Hyper-Vを無効にする設定
この操作を正しく終了しました。

C:\>bcdedit ……ブートメニューの編集結果を確認する

Windows ブート マネージャー
--------------------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
……<中略>……
displayorder            {current} ……ブートメニューの表示順序。これは現在のメニュー項目
                        {ea807010-88da-11e5-b8d5-84fe47afc82d} ……新しく追加したメニュー項目
toolsdisplayorder       {memdiag}
timeout                 30 ……メニュー選択のタイムアウト(30秒経つとデフォルト項目が自動的に選択される)

Windows ブート ローダー ……元のブートメニュー項目
--------------------------------
identifier              {current} ……{current} となっているのが、現在のデフォルトブート項目
device                  partition=C:
path                    \Windows\system32\winload.efi
description             Windows 10 ……元のブートメニューの表示名
locale                  ja-JP
……<中略>……
bootmenupolicy          Standard

Windows ブート ローダー ……新しくコピーして追加したブートメニュー項目
--------------------------------
identifier              {ea807010-88da-11e5-b8d5-84fe47afc82d} ……新規作成されたブートメニューを識別するID文字列
device                  partition=C:
path                    \Windows\system32\winload.efi
description             Hyper-Vなし Windows 10 ……新しいブートメニューの表示名。これがOS選択画面に表示される
locale                  ja-JP
inherit                 {bootloadersettings}
……<中略>……
bootmenupolicy          Standard
hypervisorlaunchtype    Off ……このブートメニュー項目ではHyper-Vが無効になる

C:\>



 これでシステムを再起動すると、OSを選択するブートメニューが表示されるはずである。もし表示されないようなら[Shift]キーを押しながら[スタート]画面の[再起動]メニューを実行する。するとトラブルシューティングのメニューなどが表示され、そこでも起動するOSを切り替えることができる。

ブートするOSの選択 ブートするOSの選択
ブートメニューに2つ以上の項目があると、起動時にこのようなメニューが自動的に表示されるはずである(スリープや休止状態からの復旧では表示されない)。強制的に表示させるには、[Shift]キーを押しながら[再起動]メニューを実行する。
  (1)ブートするOSメニューが複数ある場合はこの画面が表示される。
  (2)こちらはデフォルトのブート項目(これはWindows 10の場合)。何もしなくても、(デフォルトでは)30秒経つと自動的にこちらの構成で起動する。
  (3)新しく追加したブート項目。Hyper-Vを無効にしたい場合はこれを選択する。
  (4)デフォルトの選択肢やタイムアウト時間を変更したければ、これを選択する。

 デフォルトでは、30秒経つと自動的に上側のメニュー(この例では「Windows 10」の方)が選択され、Hyper-Vが有効になった状態でシステムが起動する。一方、下側の方をクリックすると、Hyper-Vが無効になってシステムが起動する。こちらの方をデフォルトにしたければ、下にある[既定の起動設定やその他のオプションの変更]をクリックして設定すればよい。

 ブートメニューのデフォルト選択肢や表示順序、タイムアウト値などは、bcdeditコマンドやシステム構成コマンド(msconfigコマンド)でも切り替えられる。詳細は以下のTIPSなどを参照していただきたい。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。