QEMU をつかって仮想マシンを作成する


[!NOTE]
この記事は 2013/08/11 に momoto.github.io へ投稿した内容を Qiita へ移行してきたものです

 QEMU をつかって仮想マシンを作成する手順の記録です。ホスト側に仮想化機能が備わっていることを確かめたあと、QEMU をつかって ゲストOS を構築します。

1. 仮想化機能を確かめる

 ホストとなる GNU/Linux システムで、CPU のハードウェア仮想化支援機能と Linux KVM のサポートを確かめます。

ハードウェアサポートを確かめる

 lscpu の仮想化(Virtualization)の行、または /proc/cpuinfoのflags の行から、ハードウェア仮想化支援機能(Hardware-Assisted Virtualization)を確認します。 この機能は CPU ベンダーごとに実装が異なるので、インテル製品であれば VT-x を、AMD製品であれば AMD-V を確かめます。

lscpu
$ lscpu | grep -Ei "(vt-x|amd-v)"
仮想化:             AMD-V

 /proc/cpuinfo では、VT-x の動作モード VMX、または、AMD-V の Secure virtual machine(svm)を確かめます。

cpuinfo
$ grep -E "(vmx|svm)" /proc/cpuinfo
flags : ... svm ... svm_lock ...

カーネルサポートを確かめる

Linux KVM カーネルモジュールが有効になっていることを確認します。 /proc/config.gz または lsmod から確かめます。

config.gz
$ zgrep -E "KVM|VIRTUALIZATION" /proc/config.gz
CONFIG_KVM_GUEST=y
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
CONFIG_HAVE_KVM_IRQ_ROUTING=y
CONFIG_HAVE_KVM_EVENTFD=y
CONFIG_KVM_APIC_ARCHITECTURE=y
CONFIG_KVM_MMIO=y
CONFIG_KVM_ASYNC_PF=y
CONFIG_HAVE_KVM_MSI=y
CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
CONFIG_VIRTUALIZATION=y
CONFIG_KVM=m
CONFIG_KVM_INTEL=m
CONFIG_KVM_AMD=m
CONFIG_KVM_MMU_AUDIT=y
CONFIG_KVM_DEVICE_ASSIGNMENT=y
lsmod
$ lsmod | grep kvm
kvm_amd                52151  0
kvm                   376394  1 kvm_amd

 また、ユーザは /dev/kvm へアクセスできる権限が必要です。Arch Linux では kvm グループが用意されているので、ハイパーバイザを利用するユーザをこのグループに追加します。

gpasswd
$ sudo gpasswd -a $(whoami) kvm

2. ゲストOSを構築する

仮想ディスクイメージを作る

 qemu-img をつかって、ゲストOS のディスクイメージを作ります。 オプションとして、ディスクイメージのファイル形式、ファイル名、サイズを指定します。 qcow2 は QEMU でつかわれるイメージファイル形式です。

qemu-img
$ qemu-img create -f qcow2 ~/Workspace/CentOS-6.4-x86_64-netinstall.qcow2 8G
Formatting '/home/guest/Workspace/CentOS-6.4-x86_64-netinstall.qcow2', fmt=qcow2 size=8589934592 encryption=off cluster_size=65536 lazy_refcounts=off

ゲストOSをインストールする

 ゲストOSをインストールするために qemu-system-<architecture> をつかって仮想マシンを起動します。 このときのオプションには、OSインストールの方法にしたがって適当なオプションを付ける必要があります。 インストールメディアを CentOS-6.4-x86_64-netinstall.iso として、光学ドライブから起動させる場合は -boot order=d-cdrom <file> のオプションを付けます。

qemu-system-x86_64
$ qemu-system-x86_64 \
-enable-kvm \
-m 512 \
-boot order=d \
-cdrom ~/Downloads/CentOS-6.4-x86_64-netinstall.iso \
~/Workspace/CentOS-6.4-x86_64-netinstall.qcow2

  • failed to initialize KVM: Device or resource busy とでて先にすすめない場合は、ホスト側で別のハイパーバイザが起動していないか確認してください
  • ゲスト側で Trying to unpack rootfs image as initramfs とでるところで起動がとまってしまう場合は、ゲストOSに必要なメモリが足りていないようです。 QEMUの -m オプションの値を引き上げて試してみてください。

 インストール後はインストールメディアのオプションを外して仮想マシンを起動します。

qemu-system-x86_64
$ qemu-system-x86_64 \
-enable-kvm \
-m 512 \
~/Workspace/CentOS-6.4-x86_64-netinstall.qcow2

参考