Hyper-V上でLinuxを動かす


Hyper-V上でLinuxを動かす

WSL2やDocker for Windowsを利用する場合、Hyper-Vを有効化する必要があります。
この場合、VirtualBoxを同時に利用することはできません。
WSL2やDockerでは、GUIがないため、Linux独自のGUIアプリであったり、画像・映像等に関わるものを気軽に試すことができません。(Westonとかも触ってみたいし)
そこで、Hyper-Vを使って、Linux仮想マシンを作成してみることにしました。

Hyper-Vでは自分で好きなディストリビューションを使用することができますが、デフォルトでは解像度が固定とかなり不便です。
linux-vm-toolsというMicrosoft製のツールを使用することで、解像度を変更することができます。
ですが、残念ながらこのツールは公式でリリースされているUbuntuでないとうまく動作しないようです。

Lubuntu18.04で試しましたが、うまく動作しませんでした。

ですので、今回使用するディストリビューションはUbuntu18.04とします。

Hyper-Vクイック作成

以下の手順を実行する前に、Hyper-Vを有効化する必要があります。
Hyper-V有効化の方法はここでは扱いません。

スタートメニューから[Windows管理ツール] > [Hyper-Vクイック作成]でHyper-V クイック作成を起動します。

Hyper-Vの管理ツールはHyper-V マネージャーなのですが、そこから仮想マシン作成だけ切り出したのがHyper-Vクイック作成のようです。

選択後、左側のオペレーションシステムの選択からUbunutu18.04.2 LTSを選択します。
その他のオプションを選択し、名前を適宜変更します。

上記実行後、[仮想マシンの作成]を実行します。

仮想マシンの作成が完了したら、[接続]の前に、[設定の編集]を行います。

設定では、仮想マシンにデフォルトで割り当てるメモリ量(動的メモリを有効にしておけば、RAMのサイズは勝手に伸縮するようです)や仮想ハードディスク、チェックポイント(差分バックアップ)の保存場所の指定等が可能です。

チェックポイントは便利ですが、後から仮想ハードディスクの容量を変更することが出来なくなる(チェックポイントをリセットすれば一応可能ではある)ので、注意が必要です。

設定が完了したら、[接続]を実行し、起動します。
起動後はインストールするディストリビューションに合わせてインストールの手順を実行します。

Hyper-Vというロゴが表示される場合、インストールメディアがうまく刺さっていない場合があります。
[メディア]メニューからDVDドライブを選択し、インストールに使う、isoファイル等を指定してから、再度起動する必要があります。

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

Hyper-V上のLinuxはインストール直後は解像度が固定だったり、不便な面が多いです。
これはMicrosoftがリリースしている、linux-vm-toolsをインストールすることで改善が可能です。

上記のUbuntu18.04.2 LTSをインストールしている場合はデフォルトでインストールされているため、以下の手順は不要です。

  • Ubuntu18.04相当の場合

自動ログイン機能は無効化しておく必要があります

$ wget https://raw.githubusercontent.com/Microsoft/linux-vm-tools/master/ubuntu/18.04/install.sh
$ sudo chmod +x install.sh
$ sudo ./install.sh

仮想マシンのシャットダウン後、Windows Power shellを管理者権限で実行し、以下のコマンドを実行します。

Set-VM -VMName <VMの名前> -EnhancedSessionTransportType HvSocket

実行後、仮想マシンを起動すると、画面解像度を聞かれるので、好きな解像度に変更可能です。
解像度を変更すると見慣れないログイン画面が現れますが、そのままLinuxのユーザーアカウントでログインします。

性能向上のための手順

I/Oスケジューラを変更

I/Oスケジューラをnoopに変更するために、以下のファイルを編集。

  • /etc/default/grub
- GRUB_CMDLINE_LINUX=""
+ GRUB_CMDLINU_LINUX="elevator=noop"

Grub設定をアップデート

$ sudo update-grub

GRUBタイムアウト値を変更

  • /etc/default/grub
- GRUB_TIMEOUT=0
+ GRUB_TIMEOUT=5

Grub設定をアップデート

$ sudo update-grub

mountオプションを変更

  • /etc/fstab
- LABEL=desktop-rootfs / ext4 errors=remount-ro 0 1
+ LABEL=desktop-rootfs / ext4 errors=remount-ro,noatime 0 1

仮想ハードディスク拡張

チェックポイントを使用している場合

  • チェックポイントを無効化する: 仮想マシンの設定画面のチェックポイントから無効化

  • チェックポイントを削除する: Hyper-Vマネージャで仮想マシンを選択するとチェックポイントツリーが見えるので親ノードを削除(これでチェックポイントが統合される)

  • Hyper-Vの設定でチェックボックスをリセットする

  • 仮想マシンの設定画面もしくはHyper-Vマネージャからディスクを編集してディスクを拡張する

  • Ubuntu上でパーティションを拡張する

$ sudo parted
(parted) resizepart 1
Warning: Partition /dev/sda1 is being used. Are you sure you want to continue?
Yes/No? Yes                                                               
End?  [11.8GB]? 100% 
(parted) quit
  • Ubuntu上でファイルシステムを拡張する
$ sudo resize2fs /dev/sda1
  • Ubuntu上でパーティションにラベルを付ける
$ sudo e2label /dev/sdb1 WORK
$ sudo e2label /dev/sdb1
WORK
  • Ubuntu上で/etc/fstabを編集
LABEL=WORK      /home/<you>/work        ext4    errors=remount-ro,noatime,discard, 0    2
  • マウント
$ sudo mount /dev/sdb1 ~/work

Hyper-Vで動かすLinuxは悪くはないのですが、VirtualBoxの方が単純に便利だと感じます。