KUSONEKOの見る世界

CentOS 8 KVM上にWindows10をインストールしてみた


Linuc Level3 304の勉強の絡みもあり、KVMでWindows10の仮想化をしてみました。

同様の内容が書かれているサイトは多数ありますが、ホスト側がCLIのみでWindows10用のゲスト作成があまりないこと、有ってもそのままでは出来なかったことから、メモを残しておきます。
Windowsのドライバにはパフォーマンス向上ため、virtioを使用しています。

■物理サーバ環境
OS CentOS 8
CPU Intel Celeron N3150 4C/4T 1.60GHz (TB:2.08GHz) VT-x
メモリ 8GB (4GB x2) DDR3-1866 (PC3-14900)

準備編

Windows10 イメージ準備

Windows10のMedia Creation Toolを使用して、Windows10 Pro 64bitがインストールできるISOファイルを作成しておきます。

今回の例では、ISOファイルを以下に配置します。
/home/kvm/os/Windows10_1909.iso

仮想化関連ソフトウェアインストール & 起動

dnf install qemu-kvm libvirt virt-install virt-viewer
systemctl enable --now libvirtd

ブリッジ作成

ゲストOSがLANのネットワークに直接繋がるように、ホストOSでブリッジを作成しておきます。
enp2s0のIPアドレス設定をbr0に移行しています。
一旦enp2s0を削除する必要があるため、SSHが切れてしまいます。
そのため最後の一行で、削除、設定、再起動を一気に入れています。
(私はインターフェース名を間違え、ディスプレイ、キーボードを繋げて直す羽目になったので注意。)
nmcli connection add type bridge autoconnect yes con-name br0 ifname br0
nmcli connection modify br0 ipv4.addresses 172.16.0.254/24 ipv4.method manual
nmcli connection modify br0 ipv4.gateway 172.16.0.1
nmcli connection modify br0 ipv4.dns 172.16.0.1

connection del enp2s0;nmcli connection add type bridge-slave autoconnect yes con-name enp2s0 ifname enp2s0 master br0;reboot

デフォルトのブリッジ停止、自動起動無効化

使用しないデフォルトのブリッジを停止と自動起動を無効化します。
virsh net-destroy default
virsh net-autostart default --disable

virtioの準備等

私の環境では、/homeにそれぞれ配置しています。
mkdir -p /home/kvm/images
mkdir -p /home/kvm/os
mkdir -p /home/kvm/virtio

wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso

mv virtio-win.iso /home/kvm/virtio/

Windows10 インストール編

ゲスト作成

試行錯誤し、以下のようになりました。
virt-install \
--name Win10 \
--ram 4096 \
--vcpus 2 \
--disk /home/kvm/images/win10.img,size=30,bus=virtio \
--cdrom /home/kvm/os/Windows10_1909.iso \
--disk /home/kvm/virtio/virtio-win.iso,device=cdrom \
--os-type windows \
--os-variant win10 \
--network bridge=br0,model=virtio \
--graphics vnc,port=5900,listen=0.0.0.0 \
--video qxl \
--sound ich6 \
--noautoconsole

Windows10 インストール & 初期設定

作業用PCでVNC Viewerを立ち上げ、br0のIPアドレス(上記の例では172.16.0.254)にポート5900でアクセスする。
  1. Windowsのインストール画面が表示されるので、インストールを続ける。
    Windows10インストール画面
  2. Windowsのライセンス認証では、今回は『プロダクトキーがありません』を選択。
    Windows10のライセンス認証画面
  3. Windows 10 Proを選択。
    Windows10のエディション選択画面
  4. インストールの種類は、『カスタム: Windows のみをインストールする』を選択。
    Windows10インストールの種類画面
  5. Windowsのインストール場所の指定で、ディスクが見えていないはずなので、以降の手順を実施する。
    Windows10インストール場所画面
  6. ドライバーの読み込みを選択。
  7. OKをクリック。
    Windows10インストール場所ドライバ読み込み画面
  8. インストールするドライバを選択で、win10のものを選択。
    Windows10ディスクのドライバ選択画面
  9. ディスクが見えるようになるので、インストールを続行する。
    Windows10インストール場所画面 ドライブ表示後
  10. しばらくするとVNCが切れるはずなので、以下でシャットオフ状態になっているか確認する。 シャットオフになったことを確認。
    # virsh dominfo Win10
    (略)
    状態:         シャットオフ
    (略)
  11. 再び、起動させる。
    # virsh start Win10
    ドメイン Win10 が起動されました
  12. VNC Viewerで接続し、Windowsの初期設定をしていく。(この画面になるまで時間がかかる)
    Windows10の地域画面
  13. 途中、『ネットワークに接続しましょう』という画面になるが、NICのドライバをいれていないため、『インターネットに接続していません』を選択。
    Windows10のネットワーク接続画面

virtioドライバーインストール

  1. 初期設定が終わりデスクトップが表示されたら、左下のスタートを右クリックし、デバイスマネージャーを開く。
    Windows10デバイスマネージャー選択画面
  2. PCIデバイスを右クリックし、ドライバーの更新を選択。
    Windows10デバイス選択画面
  3. 『コンピューターを参照して~』を選択。
    Windows10ドライバ検索画面
  4. 参照をクリックして、virtio-winのドライブを選択。(E:になるはず)
    Windows10ドライバ選択画面 Windows10ドライバ選択画面
  5. 次へをクリック。
    Windows10ドライバ選択画面
  6. このデバイスをインストールしますか?と表示されるため、インストールをクリック。
    Windows10ドライバインストール画面 Windows10ドライバインストール完了画面
  7. イーサネットコントローラーも同様の手順でインストールする。これでネットワークに接続されるようになる。
  8. Windowsをシャットダウンする。
  9. シャットオフになったことを確認。
    # virsh dominfo Win10
    (略)
    状態:         シャットオフ
    (略)

インストールで使用したデバイスの削除

virsh detach-disk Win10 sda --persistent
virsh detach-disk Win10 sdb --persistent
これでインストール作業は完了です。

Windowsエクスペリエンスインデックス測定

KVM上のWindows10のスコアを見てみます。
1280x1024で実施しました。

PowerShellを管理者権限で起動して、以下を実施します。
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Windows\system32> winsat formal
(略)

PS C:\Windows\system32> Get-CimInstance Win32_WinSat

CPUScore              : 7.4
D3DScore              : 9.9
DiskScore             : 6.7
GraphicsScore         : 2
MemoryScore           : 7.4
TimeTaken             : MostRecentAssessment
WinSATAssessmentState : 1
WinSPRLevel           : 2
PSComputerName        :
グラフィックスは悪いですが、他はそこそこでしょうか。

TPM2.0の対応方法

TPM2.0の対応方法はこちらで記載しています。

CentOS8 KVM上のWindows10にTPM2.0を追加

KVM上のWindows10でソフトウェアTPMエミュレートをしてみました。

Windows11 Insider Previewのクリーンインストール

Windows11 Insider Previewのインストーラーが公開されたため、KVMにインストールしてみました。

KVM上にWindows11 Insider Previewをインストールしてみた

KVMでWindows11をインストールしてみました。ドライバにはvirtioを使用しました。