Hyper-VによるWindows 10 Pro開発用仮想環境の構築 (1)
構築環境
- ホストPC: Dell Inspiron 13-7359
- CPU: Intel Core i7-6500U
- プロセッサ数 (物理/論理): 2/4
- メモリ: 8GB (DDR3L 1600MHz)
- ストレージ: SSD 256GB
- ファームウェア: UEFI
- ホストOS: Windows 10 Professional 64bit OEM版
- ゲストOS: Windows 10 Professional 64bit スタンドアローン版
- 仮想プロセッサ数: 2
- メモリ割り当て: 2-4GB
- 仮想ハードディスク: 127GB (可変容量)
Hyper-Vのチュートリアル
Windows 10の開発環境と言えばHyper-Vは必須。
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マネージャがスタートメニューに登録されているので、スタート画面やタスクバーにピン止めして起動する。
仮想スイッチの作成
最初に、以下の手順に従って仮想スイッチを作成。
Create a Virtual Network | Microsoft Docs
上手くいけば、仮想スイッチマネージャを開きなおしたときに正しく登録されている。
「上手くいけば・・・」
と書いたが、実は画面キャプチャーをOneDriveに落としていて、確認のために同期フォルダを開いていたためか、作成は出来たけど、仮想スイッチマネージャの管理外となってしまった。 (仮想スイッチと物理アダプタでブリッジを作るときに一度ネットワークが遮断するが、OneDriveが接続中になっていたのが悪さした・・・)
作り直そうと思い、ネットワーク接続でWiFi接続とのブリッジを解除するとフリーズしてした上、再起動後にHyper-V Virtual Ethernet Adapterを削除しようと思ってもできない。
いろいろ悩んだが、不要になったHyper-V Virtual Ethernet Adapterは、ネットワーク接続ではなく、デバイスマネージャで削除すれば良かった。
仮想マシンの作成
仮想スイッチが無事作成できたら、今度は仮想マシンの作成。
Deploy a Windows Virtual Machine in Hyper-V on Windows 10 | Microsoft Docs
- 世代の指定: 第一世代を選択
- メモリの割り当て: 標準設定 (後で変更)
- ネットワークの構成: 作成した仮想スイッチを選択
- 仮想ハードディスクの接続: 127GBの容量可変ディスク (VHDX)を作成 (物理容量の半分)
- インストールオプション: 後でオペレーションシステムをインストール
今まで、VirtualBoxのWindows 7/8.1のみだったので、第二世代仮想マシン/GPTパーティションのペアを試してみようと色々調べてみた。
しかし、第二世代仮想マシン/GPTパーティションは、クライアントOS/容量可変127GB仮想ハードディスクという条件では、オーバースペックな上に無駄なシステム予約パーティションが必須なので、採用メリットがないという結論に達したので見送った。*1
仮想マシンのカスタマイズ
ホストOSでは、ネットブラウズなどしかしないとは言え、ホストあってのゲストなので、ホストOS/ゲストOSで折半とした。
- メモリ: RAM
2048MB4096MB,動的メモリ 2048-4096MB*2
ディスクの管理による仮想ハードディスクの初期化
以下の説明にあるように、物理マシンでは、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となっているが気にせずに名前をコピーしておく
- 1607ではWindows 10 Pro (2017/02/01)
- Dism /Apply-Imageコマンドの/Nameオプションでコピーした名前を指定して、wimイメージを仮想ハードディスクに展開
→訂正: Dism /Apply-Image /ImageFile:E:\x64\sources\innstall.wim /Name:“Windows 10 Pro Technical Preview” /ApplyDir:D:\
(1607では"Windows 10 Pro")
- bcdbootコマンドで仮想ハードディスクのルートフォルダにブートファイルをコピーする
キーボードレイアウトの変更 (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イメージは仮想ハードディスクに展開済みなので、ドライバの読み込みが完了したら、ユーザ入力を求められる
(2016/06/11 削除)
日本語キーボードの問題は、デバイスマネージャでインストール済みキーボードのプロパティを開き、ドライバの更新をマニュアルで行い、106/109キーボードのドライバに差し替えると大体なおる- その他、画面サイズ等のカスタマイズや、ウィルススキャンソフト等の基本的なソフトのインストール、Windows Update (悪意のある削除ツールなどのexe形式の更新など)が済んだら、一旦、仮想マシンをシャットダウンする
仮想マシンのバックアップ
Hyper-Vのチェックポイントの実態は差分ディスクなので、パフォーマンスの問題や、仮想ハードディスクの容量以上の物理スペースを占有する問題を引き起こす。
Using checkpoints | Microsoft Docs
長期的には仮想マシンの設定ファイルや仮想ハードディスク一式を含む一括エクスポートによるバックアップを取ることで、開発環境のアップデート等によるトラブルからの復帰を行えるようにする。
Export and import virtual machines
なお、インポート時には、コピーを選択して仮想マシンのGUIDを変更するとライセンス認証に引っかかるので、仮想マシンをHyper-Vマネージャから削除してからインポートする必要がある。
また、インプレース登録は、エクスポートした場所のまま登録するので、復元を選択すること。
エクスポートの世代は、
- 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だと、仮想マシンの状態を保存したときに再開に失敗するケースがあるので、今は止めている。