仮想化関連
参考資料
- https://help.ubuntu.com/12.04/serverguide/virtualization.html
- https://help.ubuntu.com/12.04/serverguide/libvirt.html
- http://wiki.dev.cybozu.co.jp/display/gaia2/Setup+libvirt+VM
- http://www.linux-kvm.org/page/UsingVhost
- http://www.linux-kvm.com/content/how-maximize-virtio-net-performance-vhost-net
- https://help.ubuntu.com/community/KVM
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>