Windows10 ProでHyper-Vを使ってみた

## この記事について…

開発用PCがWindows10にリプレースされたので、最近業務の合間にセットアップを進めています。

> 前回の記事
> Windows10でChocolateyを使ってみた
> https://qiita.com/hideki0145/items/e760eebcc5019275ae6a

せっかくWindows10になったということで、仮想環境を`Hyper-V`でセットアップする方法について調査してみました。その備忘録を纏めておきます。
尚、2019/03/14現在 Windows10 1809を使用しています。

**■2019/06/19更新：Ubuntu18.04.2でxrdp経由のログインに失敗する件を追記しました。**
~~Ubuntu18.04.2で当記事の手順を試したところ、xrdp経由のログインに失敗しました。~~
Ubuntu18.04.3での回避策が判明しました。Ubuntu18.04.2でも回避策が有効であったと[GitHubのissue](https://github.com/microsoft/linux-vm-tools/issues/76#issuecomment-486073202)に報告があります。
**■2019/09/25更新：[□ゲストサービス]の設定について追記しました。**
[管理]-[統合サービス]の[□ゲストサービス]にチェックを入れた場合の動作を補足しました。
**■2020/02/15更新：linux-vm-toolsのインストール方法について再編集しました。**
Ubuntu18.04.3で再セットアップした際のlinux-vm-toolsのインストール手順について追記しました。

## BIOSの設定変更

Hyper-Vをはじめとする仮想環境ツールは、BIOSで`Virtualization Technology`を有効にしないといけません。
マザーボード毎に設定方法は異なると思いますが、Think Centre M910sでは[Advanced]-[CPU Setup]-[Virtualization Technology]の順に追っていけば設定項目を見つけることができました。
これを[Enable]に変更して記録すれば完了です。

## Hyper-V機能の追加

Windowsが立ち上がっている状態で[Win+I]キーを押下してWindowsの設定画面を開きます。
次に[アプリ]を押下し、アプリと機能画面を開きます。
そして、画面右端か画面最下部にある[関連設定]-[プログラムと機能]を押下して、プログラムと機能画面を開きます。

> Windowsの設定から[アプリ]を押下する方法以外に、[Win+X]キーを押下して表示されるメニューの一番上[アプリと機能(F)]を押下(または[F]キー押下)してもアプリと機能画面は開きます。
> もちろんコントロールパネルからプログラムと機能画面を開いてもいいのですが、そろそろWindowsの設定画面に慣れようということで、最近は無理やり使っています。

[Windowsの機能の有効化または無効化]を押下することで、Windowsの機能画面を開きます。
`□Hyper-V`にチェックを付けて[OK]を押下し、再起動するとHyper-V機能の追加が完了します。

## Hyper-V マネージャーの起動

Hyper-V機能の追加が完了すると、スタートメニューのWindows 管理ツール内にHyper-V マネージャーが追加されます。これを起動します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/78896/e2f0e3e0-58e0-c13a-5cf2-15efcef7d976.png)

> 管理者権限を持たない標準ユーザーでは、Hyper-V マネージャーで仮想化サーバー(＝ローカルコンピューター)に接続することができません。そのような場合はHyper-V マネージャーを管理者権限で実行しましょう。

## 仮想マシンの追加

Hyper-V マネージャーを起動すると、画面左側にローカルコンピューター名がツリー表示されていると思いますので、それを押下します。
その後、[操作]-[新規]-[仮想マシン(M)...]と順に押下して仮想マシンの新規作成ウィザードを開きます。

今回はUbuntu 18.04辺りをインストールしてみようと思います。
ウィザードで設定した値は以下の通りです。

|項目名|設定値||
|:--|:--|:--|
|名前|Ubuntu|お好みで|
|場所|C:\VMs\|初期値でも可、お好みで|
|世代|第2世代|これについては勉強不足だが、Ubuntu 18.04は第2世代でも動作する|
|起動メモリ|6144MB|ひとまず6GBくらい、用途に応じて|
|ネットワークの構成|Default Switch||
|仮想ハードディスクの接続|仮想ハードディスクを作成する|今回は初期値名前/場所に127GBで作成|
|インストールオプション|ブートイメージファイルからオペレーティングシステムをインストールする|予め準備したUbuntuインストール用ISOファイルを指定|

上記設定を終えて[完了]を押下すると、無事に仮想マシンが追加されます。

## 追加した仮想マシンの設定変更

> 参考
> Windows 10 Pro Hyper-V に Ubuntu 18.04 LTS をインストール
> https://qiita.com/mfunaki/items/9e2901936b04f00f9cd7

ここまで自力で設定したところで一度インストール作業を試みたのですが、なぜかUbuntuが起動しません。事例がないか調査したところ、上記記事に多くの情報が記述されていました。

[仮想マシン]-[仮想マシン名(Ubuntu)]を押下すると操作ペインに仮想マシン用メニューが追加されます。そこから[設定...]を押下して設定画面を開きます。

まず、[ハードウェア]-[セキュリティ]を押下します。[□セキュアブートを有効にする]のチェックを外さないと、Ubuntuインストール後に起動しないようです。

次に、[ハードウェア]-[プロセッサ]を押下します。[仮想プロセッサの数]を必要に応じて任意の値に更新します(初期値は1)。
今回は4と指定しました。他の仮想環境ツールではウィザードで指定する場合が多いですが、Hyper-Vは個別に設定するんですね。

最後に、これは参考記事とは関係ありませんが、[管理]-[チェックポイント]を押下します。[□自動チェックポイントを使用する]のチェックを外します。自動チェックポイントを使用すると何かやらかしたときにすぐにロールバックできて便利そうですが、仮想マシン起動時に毎回チェックポイントを作成するのはなんだかやりすぎな感があったので必要に応じて手動でチェックポイントを作成することとします。

**■2019/09/25追記**

仮想マシンの追加～追加した仮想マシンの設定変更の流れについてスクリーンショット付きで纏めたQiita記事に、リンクを貼っていただきました。画像が付いているととてもわかりやすいですね。

> Hyper-V で Ubuntu18.04 LTSの環境を構築する（Windows 10 Pro）
> https://qiita.com/Noebgmo/items/00c00b7a496d5ddb500a

1点、上記記事では[管理]-[統合サービス]の[□ゲストサービス]にチェックを入れているようですが、恥ずかしながらどんな設定なのか知りませんでした。
[Microsoft Docs](https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/reference/integration-services#hyper-v-guest-service-interface)を参照したところ、[□ゲストサービス]にチェックを入れるとPowerShellのCopy-VMFileコマンドレットを使用してゲストOSへファイルのコピーが可能となるようです。

```sh:PowerShell
Copy-VMFile "Ubuntu" -SourcePath "C:\Temp\Test.txt" -DestinationPath "/home/username/Downloads" -CreateFullPath -FileSource Host
```

ネットワークを経由せずにファイルコピーができるのが利点のようです。

## 仮想マシンの起動

ここまで準備が整ったら、仮想マシン用メニューから[接続...]を押下して仮想マシン接続画面を開きます。
「仮想マシン '[仮想マシン名]' はオフになっています」と表示されているはずなので、[起動]を押下します。

![コメント 2019-03-14 153955.png](https://qiita-image-store.s3.amazonaws.com/0/78896/74b98c30-efd2-63e7-82aa-a9c91a79a736.png)

すると、上記のようにUbuntu 18.04のインストールウィザードが起動するはずです。

## Hyper-V上でUbuntu 18.04を動作させる際の追加設定

Hyper-V上でUbuntu 18.04を動作させる場合、以下の設定を行うことが好ましいようです。

### linux-azureのインストール

linux-azureはドライバ関係の処理を最適化してくれるそうです。

> 参考
> Supported Ubuntu virtual machines on Hyper-V
> https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/supported-ubuntu-virtual-machines-on-hyper-v

```sh:bash
$ sudo apt update
$ sudo apt install -y linux-azure
```

### linux-vm-toolsのインストール

**■2020/02/15追記**
ブログ記事URLが古くなっていることや、linux-vm-toolsのインストール手順について変更があったことから、本項を再編集しました。
以下はUbuntu18.04.3で検証しています。


linux-vm-toolsを使用することで拡張セッションモード接続が可能となります。このモードでは画面解像度の変更やクリップボード共有など便利な機能を使用することができます。

> 参考
> Sneak Peek: Taking a Spin with Enhanced Linux VMs
> ~~https://blogs.technet.microsoft.com/virtualization/2018/02/28/sneak-peek-taking-a-spin-with-enhanced-linux-vms/~~
> https://techcommunity.microsoft.com/t5/virtualization/sneak-peek-taking-a-spin-with-enhanced-linux-vms/ba-p/382415
>
> Manual Config - Ubuntu 18.04
> https://github.com/Microsoft/linux-vm-tools/wiki/Onboarding:-Ubuntu#manual-config---ubuntu-1804

```sh:bash
$ cd
$ wget https://raw.githubusercontent.com/microsoft/linux-vm-tools/master/ubuntu/18.04/install.sh
$ sudo chmod +x install.sh
$ sudo ./install.sh
# ここで一旦再起動
$ sudo reboot

# 以下、再起動後
$ cd
# 再度install.shを実行する
$ sudo ./install.sh
# [重要]次のパッケージを順にインストールする
$ sudo apt install -y xorg-video-abi-23 xserver-xorg-core
$ sudo apt install -y xorgxrdp
# 今度は再起動ではなくシャットダウン
$ sudo shutdown now
```

特に重要なのが`sudo apt install -y xorg-video-abi-23 xserver-xorg-core`の実行後に`sudo apt install -y xorgxrdp`を実行するという点です。どうしてもUbuntu18.04.2以降xrdp経由のログインに躓いていたのですが、[GitHubのissue](https://github.com/microsoft/linux-vm-tools/issues/76#issuecomment-486073202)に回避策が載っていました！

ここまで処理した後、ホストOSのPowerShellを管理者権限で開き、次の処理を実行します。

```sh:PowerShell
# 今回の例では、<your_vm_name>はUbuntu
$ Set-VM -VMName <your_vm_name> -EnhancedSessionTransportType HvSocket
```

お疲れ様です。ここまで処理が完了したら、再度仮想マシンを起動してみましょう。

![コメント 2019-03-14 162251.png](https://qiita-image-store.s3.amazonaws.com/0/78896/c336475d-d123-f656-2fd0-95e04b61f93f.png)

このように、画面解像度を指定するダイアログが表示されるはずです。
尚、拡張セッションモードを使用する場合、以降のログインはxrdp経由となります。

**■2019/06/19追記**

~~Ubuntu18.04.2で上記手順を試したところ、xrdp経由のログインに失敗しました。~~

> ~~Ubuntu18.04.2にxrdpをインストールしてもRDP経由のログインでエラーになる事象のメモ~~
> ~~https://note.spage.jp/archives/576~~

~~上記参考記事にある通り、現時点では多少設定し直さないと18.04.2でxrdpを使うことができないようです。~~
~~この現象が発生した場合は上記記事を参考に設定を見直すか、18.04.1でインストールしてから18.04.2にアップグレードするといいと思います。~~
Ubuntu18.04.3での回避策が判明しました。Ubuntu18.04.2でも回避策が有効であったと[GitHubのissue](https://github.com/microsoft/linux-vm-tools/issues/76#issuecomment-486073202)に報告があります。