tmori3y2のブログ

主にWindowsのプログラムなど

Hyper-VによるWindows 10 Pro開発用仮想環境の構築 (1)

構築環境
Hyper-Vチュートリアル

Windows 10の開発環境と言えばHyper-Vは必須。

MSDNチュートリアルはこちらを参照。

Hyper-V on Windows 10 | Microsoft Docs

サポートされるゲストOSは以下のリストの通り。

Supported Windows guests | Microsoft Docs

今回は、仮想環境用にスタンドアロンライセンスを取得済み。

ライセンス条項によると、

となっているので、仮想インスタンス1つのみなら、個人でWindows Enterprise upgrade & SAのボリュームライセンス契約をするより安上がり。

Hyper-Vの有効化

まずは、Hyper-Vの機能を有効にするところから・・・

Install Hyper-V on Windows 10 | Microsoft Docs

一度限りなので、コントロールパネルによる方法が一番簡単。

PCが仮想環境構築に必要な要件を満たしていないと、Hyper-Vプラットフォームが選択できない。

そのときは、CPUが要件を満たしているか、BIOSの設定で必要な機能が有効になっているかを確認すること。

さて、PC再起動後、正しく有効化出来ていればHyper-Vマネージャがスタートメニューに登録されているので、スタート画面やタスクバーにピン止めして起動する。

f:id:tmori3y2:20160423113956p:plain

仮想スイッチの作成

最初に、以下の手順に従って仮想スイッチを作成。

Create a Virtual Network | Microsoft Docs

上手くいけば、仮想スイッチマネージャを開きなおしたときに正しく登録されている。

f:id:tmori3y2:20160423114403p:plain

「上手くいけば・・・」

と書いたが、実は画面キャプチャーをOneDriveに落としていて、確認のために同期フォルダを開いていたためか、作成は出来たけど、仮想スイッチマネージャの管理外となってしまった。 (仮想スイッチと物理アダプタでブリッジを作るときに一度ネットワークが遮断するが、OneDriveが接続中になっていたのが悪さした・・・)

作り直そうと思い、ネットワーク接続でWiFi接続とのブリッジを解除するとフリーズしてした上、再起動後にHyper-V Virtual Ethernet Adapterを削除しようと思ってもできない。

いろいろ悩んだが、不要になったHyper-V Virtual Ethernet Adapterは、ネットワーク接続ではなく、デバイスマネージャで削除すれば良かった。

f:id:tmori3y2:20160423115332p:plain

仮想マシンの作成

仮想スイッチが無事作成できたら、今度は仮想マシンの作成。

Deploy a Windows Virtual Machine in Hyper-V on Windows 10 | Microsoft Docs

  • 世代の指定: 第一世代を選択
  • メモリの割り当て: 標準設定 (後で変更)
  • ネットワークの構成: 作成した仮想スイッチを選択
  • 仮想ハードディスクの接続: 127GBの容量可変ディスク (VHDX)を作成 (物理容量の半分)
  • インストールオプション: 後でオペレーションシステムをインストール

今まで、VirtualBoxWindows 7/8.1のみだったので、第二世代仮想マシン/GPTパーティションのペアを試してみようと色々調べてみた。

しかし、第二世代仮想マシン/GPTパーティションは、クライアントOS/容量可変127GB仮想ハードディスクという条件では、オーバースペックな上に無駄なシステム予約パーティションが必須なので、採用メリットがないという結論に達したので見送った。*1

仮想マシンのカスタマイズ

ホストOSでは、ネットブラウズなどしかしないとは言え、ホストあってのゲストなので、ホストOS/ゲストOSで折半とした。

  • メモリ: RAM 2048MB 4096MB, 動的メモリ 2048-4096MB*2

f:id:tmori3y2:20160424201219p:plain

f:id:tmori3y2:20160424201232p:plain

ディスクの管理による仮想ハードディスクの初期化

以下の説明にあるように、物理マシンでは、OSインストール時にシステム予約パーティションが作成されるが、仮想マシンでは不要なので、操作が楽で確実なGUIの管理ツールで、予めフォーマットしておく。

BIOS/MBR ベースのハード ドライブ パーティション - Windows 10 hardware dev

上記の内容は物理ハードディスクの話なので、仮想ハードディスクの場合は以下も参考にする。

VHD に Windows を展開する (ネイティブ ブート) - Windows 10 hardware dev

  • エクスプローラで仮想ハードディスクをマウント
  • ディスクの管理を起動
  • 仮想ハードディスクが未初期化なのでMBRパーティションで初期化
  • 仮想ハードディスク全体をNTFSでフォーマットして、例えばDドライブにマウント
  • ボリュームを選択して、右クリックメニューで[パーティションをアクティブにマーク]を実行 (2016/06/01追記)
DismコマンドによるOSイメージのインストール

Windows 7/8.1などと同じく、Dismを使用してOSイメージを仮想ハードディスクに展開できる。

Windows 10に対応したDismが必要だが、今回はホストOSにインストール済みなので、それを使用する。

Windowsの展開についての詳細は以下を参照のこと。

Windows の展開オプション - Windows 10 hardware dev

DISM - 展開イメージのサービスと管理 - Windows 10 hardware dev

今回は、以下を参考にOSイメージをVHDに展開するが、物理ハードディスクのブートマネージャに登録する手順なので、仮想マシンに読み替える。

DISM を使ったイメージの適用 - Windows 10 hardware dev

  • 管理者権限でコマンドプロンプトを起動
  • Diskpartを実行
  • list diskコマンドで仮想ハードディスクのディスク番号を確認
  • select diskコマンドで仮想ハードディスクを選択
  • list partコマンドで仮想ハードディスクのパーティション番号を確認
  • select partコマンドで仮想ハードディスクのパーティションを選択
  • activeコマンドで仮想ハードディスクを起動可能にマーク
  • exitコマンドでdiskpartを終了

(2016/06/01 diskpartの手順を削除)

  • スタンドアロンWindows 10 Professionalのメディアを、例えばEドライブにマウント (今回はUSB)
  • Dism /Get-WimInfoコマンドでwimイメージのインデックスを確認
  • Windows 10 Pro Technical Previewとなっているが気にせずにインデックス1を覚えておく
  • Dism /Apply-Imageコマンドでwimイメージのインデックスを仮想ハードディスクに展開
  • Dism /Get-WimInfoコマンドでwimイメージの情報を確認
  • Windows 10 Pro Technical Previewとなっているが気にせずに名前をコピーしておく
  • Dism /Apply-Imageコマンドの/Nameオプションでコピーした名前を指定して、wimイメージを仮想ハードディスクに展開 f:id:tmori3y2:20160424201741p:plain

→訂正: Dism /Apply-Image /ImageFile:E:\x64\sources\innstall.wim /Name:“Windows 10 Pro Technical Preview” /ApplyDir:D:\

(1607では"Windows 10 Pro")

  • bcdbootコマンドで仮想ハードディスクのルートフォルダにブートファイルをコピーする
    • コピー元のWindowsフォルダとコピー先のルートフォルダのドライブ文字は、必ず仮想ハードディスクのドライブ文字にする
    • /fオプションを省略するとホストOSの起動モードと同じUEFIモードのブートファイルがコピーされるので、必ず/f BIOSオプションを付けて実行する f:id:tmori3y2:20160424201730p:plain
キーボードレイアウトの変更 (2016/06/11 追記)

仮想マシンでキーボードが英語レイアウトになるので以下のコマンドを実行しておく。

md C:\offline

Dism /Mount-Image /ImageFile:<スナップショットの.vhdファイルパス> /index:1 /MountDir:C:\offline

Dism /Image:C:\offline /Set-LayeredDriver:6

Dism /Unmount-Image /MountDir:C:\offline /commit

ドライブDにマウントした状態で以下を実行。

Dism /Image:D:\ /Set-LayeredDriver:6

(2017/02/01 修正)

更新プログラムの適用 (2017/02/01 追記)

https://support.microsoft.com/ja-jp/help/4000825/windows-10-and-windows-server-2016-update-history

をチェックして、最新のロールアップ、および、前提条件の更新をチェックする。

例) 1607の14393.726 (2017/01/26)

2017/01/26のロールアップKB3216755をダウンロード。

http://www.catalog.update.microsoft.com/Search.aspx?q=KB3216755

念のため、14393.571 (2016/12/13)の前提条件であるKB3199986もダウンロード。

http://www.catalog.update.microsoft.com/search.aspx?q=kb3199986

その他、Adobe Flash Player のセキュリティ更新プログラム (KB3214628)などもダウンロードする。

http://www.catalog.update.microsoft.com/Search.aspx?q=KB3214628

ダウンロードしたファイルは、C:\Updateなどにコピーして以下を実行。

Dism /Image:D:\ /Add-Package /PackagePath:C:\Update
Windowsのセットアップ

ここまで、出来たら、

  • 仮想ハードディスクをアンマウントして、仮想マシンを起動
  • OSイメージは仮想ハードディスクに展開済みなので、ドライバの読み込みが完了したら、ユーザ入力を求められる

f:id:tmori3y2:20160424211117p:plain

  • 仮想マシンでは通常英語キーボードと認識されて記号の一部がずれるが、我慢して探し出して、ライセンス認証その他の基本的なセットアップを済ませる

(2016/06/11 削除)

f:id:tmori3y2:20160424211400p:plain

  • 日本語キーボードの問題は、デバイスマネージャでインストール済みキーボードのプロパティを開き、ドライバの更新をマニュアルで行い、106/109キーボードのドライバに差し替えると大体なおる
  • その他、画面サイズ等のカスタマイズや、ウィルススキャンソフト等の基本的なソフトのインストールWindows Update (悪意のある削除ツールなどのexe形式の更新など)が済んだら、一旦、仮想マシンをシャットダウンする
仮想マシンのバックアップ

Hyper-Vのチェックポイントの実態は差分ディスクなので、パフォーマンスの問題や、仮想ハードディスクの容量以上の物理スペースを占有する問題を引き起こす。

Using checkpoints | Microsoft Docs

長期的には仮想マシンの設定ファイルや仮想ハードディスク一式を含む一括エクスポートによるバックアップを取ることで、開発環境のアップデート等によるトラブルからの復帰を行えるようにする。

Export and import virtual machines

なお、インポート時には、コピーを選択して仮想マシンのGUIDを変更するとライセンス認証に引っかかるので、仮想マシンHyper-Vマネージャから削除してからインポートする必要がある。

また、インプレース登録は、エクスポートした場所のまま登録するので、復元を選択すること。

f:id:tmori3y2:20160426192124p:plain

エクスポートの世代は、

  • OSセットアップ
  • 開発環境セットアップ
  • 開発環境の大型アップデート前後
  • OSの大型アップデート前後
  • 定期バックアップの最後の2世代程度

として、チェクポイントは短期で作成して、問題がなければマージしたらよいと思う。

*1:UEFI/GPT ベースのハード ドライブ パーティション - Windows 10 hardware devを見ると、100MBの起動パーティション(ESP)、最低16MBのMSRパーティションが必須と書かれているが、実際にGPTパーティションを作成した時点で、128MBのパーティションが作成されるので、手順通りにやると244MBのシステム予約のパーティションが作られる。これらは、マルチブートに対応するためや、2TBを超えるパーティションを作成するために必須だが、127GBの仮想ハードディスクの仮想マシンでは無駄でしかない。MBRパーティションも、推奨構成では100MBの予約パーティションがあるが、マルチブートをしないのであれば省略可能なので、仮想マシンMBRパーティションが1つあれば事足りる。

*2:2016/06/11: 動的メモリは物理メモリ8GBだと、仮想マシンの状態を保存したときに再開に失敗するケースがあるので、今は止めている。