自宅サーバーのセットアップ (4. KVMの設定 前編)

はじめに

前回の記事の続きで、今回のメインである KVM 周りのセットアップ作業をしていきます。

Linux のサーバー上で Windows10 を動作させるところまでやっていきます。

KVM とは

まず、KVM とはなにか。

KVM(Kernel-based Virtual Machine) とは Linux カーネルをハイパーバイザ(VMM)として機能させるためのカーネルモジュールのことを指します。

これを利用することで、物理マシンのハードウェアを完全にエミュレーションできる環境(完全仮想化)を実現することができます。

KVM を使用するためには、CPU が Intel VT-x または AMD-V/SVM に対応している必要があります。(今回使用する CPU は対応しています。)

今回は KVM を利用して、Linux のホスト OS 上に Windows を起動させるところまでやってみようとおもいます。

virtio とは

今回は準仮想化ドライバーである virtio も使っていきます。

完全仮想化方式に比べて、準仮想化方式はデバイス速度の向上において有利らしく、KVM 上の仮想マシンの NIC やディスクの I/O 周りのパフォーマンス向上に役立つみたいです。

今回はまずディスクのドライバーとして使用していきます。

PCI パススルーとは

今回ゲスト OS の Windows 上では 3D ゲームをやりたいと考えています。

そのため、PCI パススルーとよばれる仕組みを利用することで、ゲスト OS からホスト OS に接続された GTX1650 を使用できるように設定を行います。(この場合グラボのリソースはホスト側では使用することはできません。)

直接物理的な PCI デバイスにアクセスできるため、ネイティブに近いパフォーマンスを得ることができると言われているらしい。

現状 Linux 上で GTX1650 を使用することは想定していないので問題はないです。

注意点としては、PCI パススルーを使用するには、マザーボードと CPU が Intel VT-d もしくは AMD I/O に対応している必要があります。(今回使用する CPU とマザーボードは対応しています。)

ネットワークの設定

前置きが長くなりましたが、設定を行っていきます。

こちらのサイトを参考にして構築していきました。

参考

ネットワークは前々回の記事で仮想ブリッジの設定を行ったので、今回の作業は不要です。

KVM の設定

KVM が使用できるか確認

まずは KVM を使用するために必要な仮想化拡張機能 (Intel VT-x または AMD-V) が有効になっているか確認します。

参考: https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-system_requirements-kvm_requirements

$ grep -E 'svm|vmx' /proc/cpuinfo

また、KVM カーネルモジュールが読み込まれているかどうか確認します。

$ sudo lsmod | grep kvm

必要なツールのインストール

これらのコマンドの結果が何かしら出力される場合は問題ありません。

次に、qemu と virt-manager を install します。

qemu はマウスやキーボード、HDD、CD-ROM、VGA、サウンドカード、PCI、NIC、USB などの周辺機器のエミュレートを行います。

CPU は KVM を介して CPU の仮想化支援機能を利用するようになっています。

virt-manager は QEMU/KVM の GUI ツールです。

CPU や周辺機器など仮想マシンの設定を行うことができます。

$ sudo apt install qemu-kvm virt-manager

仮想ディスクの作成

KVM に使用できるディスクには qcow2 と raw という 2 つのフォーマットが存在します。

qcow2 は実際に使用する領域分のみ確保するため、ファイルサイズを節約することができますが,ディスク領域を拡張する際、IO 性能が極端に劣化する欠点があります。

今回は raw(ノンスパース)形式でディスクを作成します。

ノンスパースなファイルなので dd コマンドで作成が可能です。

今回は 256GB のディスクを作成します。

参考

# 1024*256 = 262144
# 1M * 1024 * 256 = 256GB
$ sudo dd if=/dev/zero of=/usr/local/win10_disk.img bs=1M count=262144

仮想マシンの作成

virsh から作成することも可能ですが、今回は virt-manager から作成します。

予め仮想マシンで使用する OS のイメージファイルをここからダウンロードしておきます。

OS のダウンロードが完了したら、まずは virt-manager を起動します。

その後、一番左の作成ボタンを押します。

image

Local install media を選択して、先ほどダウンロードした OS イメージファイルを選択

image

OS の自動検出にチェックを入れると Windows10 と認識されました。

image

仮想 CPU と仮想メモリを設定します。

今回は 6 コア/10GB で設定します。

image

ストレージとして先ほど作成した raw ディスクファイルを指定します。

image

設定が完了したら、Finish をクリックします。

image

起動しますが一旦 Shutoff します。

ディスクの Disk bus を SATA から VirtIO に変更します。

image

また、VirtIO を利用したディスクを Windows 上で使用するにはドライバーが必要です。

OS 同様 iso ファイルをダウンロードして、仮想ディスクとして接続しておきます。

参考

接続が完了したら、仮想マシンを起動します。

Boot Option で先程設定した Windows10 の OS イメージの仮想ディスクが設定されていると思います。

問題がなければ以下のようなインストール画面が表示されます。

image

OS のエディションを選択します。

image

ライセンスに同意します。

image

カスタムを選択してインストール先のディスクを選択します。

image

ドライバーの読み込みをクリックします。

image

VirtIO の仮想ディスクから Windows10 用のドライバーを読み込みます。

image

image

無事ディスクが認識されました。新規をクリックしてインストールを継続します。

image

image

image

image

通常のインストールと同様、Windows の初期設定を行います。

image

image

image

image

image

image

image

image

image

image

image

セットアップが完了するとデスクトップが表示されます。

image

これで仮想マシンのセットアップは完了です。

次回は PCI パススルーの設定を行い、Windows ゲスト上で GTX1650 が使用できるように設定を行います。