仮想化関連

参考資料

KVM

VHostNet を使うには vhost_net モジュールを明示的にロードしないといけない。

$ sudo modprobe vhost_net

/etc/default/qemu-kvm で自動ロードするように設定可能。ついでに KSM は disable する。

$ sudo vi /etc/default/qemu-kvm
KSM_ENABLED=0
...
VHOST_NET_ENABLED=1

インストール直後の Ubuntu 12.04 には、virtio を使うとゲスト OS がブート中にハングアップする致命的な不具合があります。
https://bugs.launchpad.net/ubuntu/+source/seabios/+bug/931371

seabios 0.6.2-0ubuntu2.1 で修正されているので、apt-get upgrade して適用してください。

libvirt

  • libvirtd グループに初期アカウントが所属しなくなっている。
    そのため、sudo virsh ... としないと各種機能が正常に動作しない。

    $ sudo adduser cybozu libvirtd
    (logout and login)
    
  • virsh console は sudo しなくても使えるようになった。
  • virt-install では --autostart オプションをつけると VM の自動起動を最初から設定できるようになった。

以前と同様、邪魔なブリッジがあるので消す。

$ sudo restart libvirt-bin
$ sudo virsh net-destroy default
$ sudo virsh net-undefine default

virt-install で VM を作ってみる。例によって ISO イメージのみでチャレンジ。

$ sudo apt-get install virtinst
$ sudo lvcreate -n vm-test -L 20g ubuntu
$ mkdir cdrom
$ sudo mount -t iso9660 -o loop,ro ubuntu-12.04-server-amd64.iso cdrom
$ sudo virt-install --name=test -r 1024 --vcpus=4 -l cdrom/install --os-type=linux \
  --os-variant=ubuntuprecise --disk /dev/ubuntu/vm-test,bus=virtio,cache=none \
  --disk ubuntu-12.04-server-amd64.iso,device=cdrom,perms=ro \
  --network=bridge=br0,model=virtio,mac=02:00:01:23:45:67 --nographics \
  -v --virt-type kvm --serial pty --autostart --extra-args=console=ttyS0,9600

serial コンソールを使うようにカーネルパラメーターを grub で設定する。

$ sudo vi /etc/default/grub
...
GRUB_CMDLINE_LINUX="console=ttyS0"
...
$ sudo update-grub

init ram disk イメージが virtual フレバーになっていないので、作り直す。generic フレバーのは消す。

$ ls /boot/initrd.*
/boot/initrd.img-3.2.0-23-generic
$ sudo update-initramfs -c -k 3.2.0-23-virtual
$ sudo update-grub
$ sudo rm /boot/initrd.img-3.2.0-23-generic

acpid が入ってないので入れる。

$ sudo apt-get install acpid

ゲストの仮想 CPU のモデルをホストと同じにするには XML 定義を書き換える。ついでにブート用の CDROM デバイスを削除する。

$ virsh edit test
-<domain type='kvm'>
+<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
...
-    <disk type='file' device='cdrom'>
-      <driver name='qemu' type='raw'/>
-      <source file='/home/cybozu/ubuntu-12.04-server-amd64.iso'/>
-      <target dev='hdc' bus='ide'/>
-      <readonly/>
-      <alias name='ide0-1-0'/>
-      <address type='drive' controller='0' bus='1' unit='0'/>
-    </disk>
-    <controller type='ide' index='0'>
-      <alias name='ide0'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
-    </controller>
...
+  <qemu:commandline>
+    <qemu:arg value='-cpu'/>
+    <qemu:arg value='host'/>
+  </qemu:commandline>
 </domain>