「KVM」の版間の差分
細 (行頭の空白の抜けを修正) |
|||
| 202行目: | 202行目: | ||
{{bc|1= |
{{bc|1= |
||
<os firmware="efi"> |
<os firmware="efi"> |
||
| − | <loader readonly="yes" secure="yes" type="pflash">/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd</loader> |
+ | <loader readonly="yes" secure="yes" type="pflash">/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd</loader> |
</os> |
</os> |
||
}} |
}} |
||
| 208行目: | 208行目: | ||
次に、いくつかのキーを登録する必要があります。この例では、Microsoft および Red Hat のセキュアブートキーを登録します。{{Pkg|virt-firmware}} をインストールし、以下のコマンドを実行します。{{ic|''vm_name''}} は対象の仮想マシンの名前に置き換えてください。 |
次に、いくつかのキーを登録する必要があります。この例では、Microsoft および Red Hat のセキュアブートキーを登録します。{{Pkg|virt-firmware}} をインストールし、以下のコマンドを実行します。{{ic|''vm_name''}} は対象の仮想マシンの名前に置き換えてください。 |
||
| − | $ virt-fw-vars --input /usr/share/edk2/x64/OVMF_VARS.4m.fd --output /var/lib/libvirt/qemu/nvram/''vm_name''_SECURE_VARS.fd --secure-boot --enroll-redhat |
+ | $ virt-fw-vars --input /usr/share/edk2/x64/OVMF_VARS.4m.fd --output /var/lib/libvirt/qemu/nvram/''vm_name''_SECURE_VARS.fd --secure-boot --enroll-redhat |
その後、仮想マシンの libvirt XML 設定を編集し、新しく作成された VARS ファイルを指定します。 |
その後、仮想マシンの libvirt XML 設定を編集し、新しく作成された VARS ファイルを指定します。 |
||
| 214行目: | 214行目: | ||
{{bc|1= |
{{bc|1= |
||
<os firmware="efi"> |
<os firmware="efi"> |
||
| − | <loader readonly="yes" secure="yes" type="pflash">/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd</loader> |
+ | <loader readonly="yes" secure="yes" type="pflash">/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd</loader> |
| − | <nvram template="/usr/share/edk2/x64/OVMF_VARS.4m.fd">/var/lib/libvirt/qemu/nvram/'''{vm-name}'''_SECURE_VARS.fd</nvram> |
+ | <nvram template="/usr/share/edk2/x64/OVMF_VARS.4m.fd">/var/lib/libvirt/qemu/nvram/'''{vm-name}'''_SECURE_VARS.fd</nvram> |
</os> |
</os> |
||
}} |
}} |
||
2025年7月26日 (土) 23:33時点における最新版
関連記事
KVM、Kernel-based Virtual Machine 、は Linux カーネルに組み込まれた ハイパーバイザ です。その目的は Xen に似ていますがより簡単に動作させることができます。エミュレーションを使うネイティブの QEMU とは異なり、KVM はカーネルモジュールを介して CPU 拡張機能 (HVM) を用いた QEMU の特別な動作モードです。
KVM を使用することで、修正を加えずに GNU/Linux や Windows などのオペレーティングシステムが動作する仮想マシンを複数動かすことができます (詳しくは Guest Support Status を参照してください)。それぞれの仮想マシンには専用の仮想化されたハードウェアが使われます: ネットワークカード、ディスク、グラフィックカードなど。
KVM と Xen, VMware, QEMU の違いについては KVM FAQ で説明されています。
この記事では KVM をバックエンドに使うエミュレータに共通の機能は扱いません。そのような情報は各々の該当する記事を参照してください。
目次
KVM サポートの確認
ハードウェアのサポート
KVM を使うには仮想マシンのホストのプロセッサが仮想化をサポートしている必要があります (Intel のプロセッサでは VT-x、AMD のプロセッサでは AMD-V という名前が付けられています)。あなたの使っているプロセッサがハードウェア仮想化をサポートしているかは次のコマンドで確認できます:
$ LC_ALL=C.UTF-8 lscpu | grep Virtualization
次を実行することでも確認できます:
$ grep -E --color=auto 'vmx|svm|0xc0f' /proc/cpuinfo
いずれのコマンドを実行しても何も表示されない場合、あなたのプロセッサはハードウェア仮想化をサポートしていないため、KVM を使用することはできません。
カーネルのサポート
Arch Linux のカーネルは KVM をサポートするために必要な カーネルモジュール を提供しています。
- 必要なモジュール (
kvmと、kvm_amdまたはkvm_intelのいずれか) がカーネルに含まれているかどうかは、次のコマンドで確認できます:
$ zgrep CONFIG_KVM= /proc/config.gz
この設定が y または m の場合のみ、モジュールは利用可能です。
- 続いて、以下のコマンドでカーネルモジュールが自動的に読み込まれているかを確認します:
$ lsmod | grep kvm
kvm_intel 245760 0 kvmgt 28672 0 mdev 20480 2 kvmgt,vfio_mdev vfio 32768 3 kvmgt,vfio_mdev,vfio_iommu_type1 kvm 737280 2 kvmgt,kvm_intel irqbypass 16384 1 kvm
このコマンドが何も出力しない場合、モジュールを手動で読み込む必要があります。詳細は カーネルモジュール#手動でモジュールを扱う を参照してください。
Virtio を使った準仮想化
準仮想化は、ゲストがホストマシン上のデバイスを使用するための、高速かつ効率的な通信手段を提供します。KVM は Virtio API をハイパーバイザーとゲスト間のレイヤーとして使うことで準仮想化デバイスを仮想マシンに提供します。
すべての Virtio デバイスは 2 つの構成要素を持ちます: ホストのデバイスとゲストのドライバーです。
カーネルの対応状況
VIRTIO モジュールがカーネルに組み込まれているかを確認するには、仮想マシン内で 次のコマンドを実行します:
$ zgrep VIRTIO /proc/config.gz
続いて、以下のコマンドでカーネルモジュールが自動的に読み込まれているか確認します:
$ lsmod | grep virtio
上記のコマンドが何も出力しない場合は、カーネルモジュールを手動で読み込む 必要があります。
準仮想化デバイスの一覧
- ネットワークデバイス (virtio-net)
- ブロックデバイス (virtio-blk)
- コントローラデバイス (virtio-scsi)
- シリアルデバイス (virtio-serial)
- バルーンデバイス (virtio-balloon)
KVM の使い方
次の記事を参照してください: QEMU。
ヒントとテクニック
ネストされた仮想化
ネストされた仮想化を使うことで、元の仮想マシンやネットワークに修正を加えることなく、既存の仮想マシンを別のハイパーバイザや他のクラウド上で動作させることができるようになります。
ホスト側で、kvm_intel の nested 機能を有効にしてください:
# modprobe -r kvm_intel # modprobe kvm_intel nested=1
永続化させるには (カーネルモジュール#モジュールオプションを設定するを参照):
/etc/modprobe.d/kvm_intel.conf
options kvm_intel nested=1
機能が有効になっているか確認:
$ cat /sys/module/kvm_intel/parameters/nested
Y
全ての CPU の機能をゲスト環境に転送するために"ホストパススルー"モードを有効化:
- QEMU を使用する場合、次のコマンドでゲスト VM を実行してください:
qemu-system-x86_64 -enable-kvm -cpu host。 - virt-manager を使用する場合、CPU モデルを
host-passthroughに変更してください。 - virsh を使用する場合、
virsh edit vm-nameを使って CPU 行を<cpu mode='host-passthrough' check='partial'/>に変更してください。
VM を起動したら vmx フラグが存在するか確認:
$ grep -E --color=auto 'vmx|svm' /proc/cpuinfo
ヒュージページの有効化
ヒュージページを有効にすることで仮想マシンのパフォーマンスを向上させることができます。
最新の Arch Linux と KVM ならおそらく必要条件はすべて満たされているはずです。/dev/hugepages ディレクトリが存在しているかどうかチェックしてください。ディレクトリが存在しなかったら、作成してください。
このディレクトリを利用するには適切なパーミッションが必要です。デフォルトでは root の UID および GID で 0755 ですが、ここでは kvm グループのメンバーであればヒュージページにアクセスできるようにします。
/etc/fstab に以下を追加:
/etc/fstab
hugetlbfs /dev/hugepages hugetlbfs mode=01770,gid=kvm 0 0
gid=kvm の代わりに GID 番号を直接指定しても構いませんが、その番号は kvm グループと一致している必要があります。1770 のモードは、グループ内の誰でもファイルの作成は可能ですが、他のメンバーのファイルの削除やリネームはできないようにします。/dev/hugepages が正しくマウントされていることを確認してください:
# umount /dev/hugepages # mount /dev/hugepages $ mount | grep huge
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,mode=1770,gid=78)
それから必要なヒュージページの数を計算します。ヒュージページの大きさを確認するには:
$ grep Hugepagesize /proc/meminfo
通常は 2048 kB ≙ 2 MB です。仮想マシンを 1024 MB で動作させたい場合、1024 / 2 = 512 となり少し追加して 550 まで丸めることができます。必要とするヒュージページをマシンに設定:
# sysctl -w vm.nr_hugepages=550
十分な空きメモリがあれば以下のように表示されるはずです:
$ grep HugePages_Total /proc/meminfo
HugesPages_Total: 550
数字がさらに小さい場合、アプリケーションを閉じるか少ないメモリで仮想マシンを開始してください (number_of_pages x 2):
$ qemu-system-x86_64 -enable-kvm -m 1024 -mem-path /dev/hugepages -hda <disk_image> [...]
そして -mem-path パラメータを使うことでヒュージページが利用されます。
仮想マシンの実行中に、使われているヒュージページを確認するには:
$ grep HugePages /proc/meminfo
HugePages_Total: 550 HugePages_Free: 48 HugePages_Rsvd: 6 HugePages_Surp: 0
問題がないようでしたらデフォルトでヒュージページを有効にすることができます。以下を /etc/sysctl.d/40-hugepage.conf に追加してください:
/etc/sysctl.d/40-hugepage.conf
vm.nr_hugepages = 550
参照:
セキュアブート
KVM において Secure Boot を有効にするには、いくつかの要件を満たす必要があります:
- セキュアブートをサポートする UEFI を使用する必要があります。
- その UEFI にキーが登録されている必要があります。
セキュアブート対応の UEFI を有効にするには、edk2-ovmf をインストールし、仮想マシンにセキュアブート対応の UEFI を使用させます。libvirt を使用している場合、仮想マシンの XML 設定に以下を追加します:
<os firmware="efi"> <loader readonly="yes" secure="yes" type="pflash">/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd</loader> </os>
次に、いくつかのキーを登録する必要があります。この例では、Microsoft および Red Hat のセキュアブートキーを登録します。virt-firmware をインストールし、以下のコマンドを実行します。vm_name は対象の仮想マシンの名前に置き換えてください。
$ virt-fw-vars --input /usr/share/edk2/x64/OVMF_VARS.4m.fd --output /var/lib/libvirt/qemu/nvram/vm_name_SECURE_VARS.fd --secure-boot --enroll-redhat
その後、仮想マシンの libvirt XML 設定を編集し、新しく作成された VARS ファイルを指定します。
<os firmware="efi">
<loader readonly="yes" secure="yes" type="pflash">/usr/share/edk2/x64/OVMF_CODE.secboot.4m.fd</loader>
<nvram template="/usr/share/edk2/x64/OVMF_VARS.4m.fd">/var/lib/libvirt/qemu/nvram/{vm-name}_SECURE_VARS.fd</nvram>
</os>
これでセキュアブートが自動的に有効になるはずです。UEFI ブートロゴが表示されたときに F2 を押して仮想マシンの BIOS に入り、セキュアブートが有効になっているか確認できます。