トップページ -> 実践知識 -> クラウドコンピューティング -> Ubuntu で QEMU+KVM の仮想マシンを libvirt を使って管理する
[サイトマップへ]  

Ubuntu で QEMU+KVM の仮想マシンを libvirt を使って管理する

サイト構成 連絡先,業績など 実践知識 データの扱い コンピュータ 教材 サポートページ

Libvirt は仮想マシン管理用のソフトウエア.次のような機能がある.

◆ この Web ページで行うこと:

QEMU は x86, PowerPC, S390, ARM などのマシンのエミューレータ.


Ubuntu でのインストール

Ubuntu で SPICE サーバ, SPICE 対応の QEMU+KVM のインストール

◆ 以下、 Ubuntu 12.04 で、パッケージを使ってインストールしたいときの手順を示します(ソースコードからビルドしたいときは, 別の Web ページの説明を見てください)

  1. インストール
    sudo apt-get -yV install kvm
    sudo apt-get -yV install kvm-ipxe
    sudo apt-get -yV install qemu-common
    sudo apt-get -yV install qemu-keymaps
    sudo apt-get -yV install qemu-kvm-extras
    sudo apt-get -yV install qemu-kvm 
    sudo apt-get -yV install qemu-system
    sudo apt-get -yV install qemu-user
    sudo apt-get -yV install qemu-utils 
    sudo apt-get -yV install qemu-launcher
    sudo apt-get -yV install qemulator
    sudo apt-get -yV install qemuctl
    sudo apt-get -yV install qtemu 
    sudo apt-get -yV install qemu-kvm-spice 
    

  2. カーネルモジュールの設定

    まず手動でカーネルモジュールの組み込みを行ってみる

     
    sudo modprobe kvm_intel
    sudo modprobe kvm
    lsmod | grep kvm
    kvm-ok
    

    うまく組み込めるようだったら、自動で組み込むように設定することにする。 /etc/modules を編集し、

     
    kvm_intel
    kvm
    

    の2行を追加する

Ubuntu でSPICE クライアントのインストール

sudo apt-get -yV install spice-client

Ubuntu で仮想マシン管理ソフトウエア libvirt と ubuntu-vm-builder のインストール

次の手順を踏む.

  1. インストール
     
    sudo apt-get install libvirt0
    sudo apt-get install libvirt-bin
    sudo apt-get install libvirt-dev
    sudo apt-get install libvirt-doc
    sudo apt-get install python-libvirt
    sudo apt-get install libvirt-ruby 
    sudo apt-get install virt-manager 
    sudo apt-get install virt-viewer
    sudo apt-get install virt-goodies
    sudo apt-get install virt-top
    sudo apt-get install ubuntu-vm-builder
    sudo apt-get install cpu-checker
    sudo apt-get install bridge-utils
    

    以上の操作で,vmware2libvirt, virt-viewer, virsh, virt-install などのコマンドが使えるようになります また /etc/libvirt 下にいくつかの設定ファイルができます

  2. ユーザの所属グループの調整
    sudo usermod $(whoami) -a -G libvirtd
    cat /etc/group | grep libvirtd
    

(オプション) ブリッジ接続の設定 (書きかけ)

see http://gihyo.jp/admin/serial/01/ibm_kvm/0003

  1. /etc/network/interfaces に設定を追加

  2. その後,次のコマンドを実行
    sudo /etc/init.d/networking restart
    
  3. その後,確認のため次のコマンドを実行
    ifconfig -a 
    

仮想マシン管理ソフトウエア libvirt を使って、ドメインの新規作成を行ってみる

ドメインの一覧

 
virsh list --all 

◆ 実行結果の例

ここでの実行結果では、ドメインがない(まだドメインを作成していないので)

ドメインの新規作成(Domain Creation)

ここでの設定内容(例)

設定項目 データ型 本 Web ページでの設定値
ゲスト OS の種類 文字列 precise (Ubuntu 12.04)
接続に使用するドライバ 文字列 qemu:///system
仮想マシン識別名(libvirtでは「ドメイン名」ともいう) 文字列 ubuntu1204i386 または ubuntu1204amd64
仮想マシン・イメージファイルのディレクトリ 文字列 /home
仮想マシン・イメージファイルのファイル名 文字列 /home/ubuntu1204i386.qcow2 または /home/ubuntu1204amd64.qcow2
仮想マシン・イメージファイルのフォーマット 文字列 qcow2
仮想マシン・イメージファイルの最大サイズ 数値 80 (GB)
仮想マシンに割り当てるメインメモリのサイズ 数値 2048 (MB)
仮想マシンに割り当てるCPU数 数値 1
仮想マシンの起動に使う ISO イメージファイル名 文字列 /home/www/linux/ubuntu-12.04-desktop-i386.iso または /home/www/linux/ubuntu-12.04-desktop-amd64.iso

※ 参考 Web ページ: http://libvirt.org/formatdomain.html#elementsGraphics

操作手順の例 (グラフィックスとして vnc を指定する場合)

ホストが 64 ビット Linux ならゲストも 64 ビット Linux, ホストが 32 ビット Linux ならゲストも 32 ビット Linuxとしている。 

 
virsh list --all 
 
if [ `arch` = 'i686' ]; then
    export QEMU_ISOFILE=/home/www/linux/ubuntu-12.04-desktop-i386.iso
    export QEMU_FILE_PATH=/home/ubuntu1204i386.qcow2
    export QEMU_MACHINE_NAME=ubuntu1204i386
elif [ `arch` = 'x86_64' ]; then
    export QEMU_ISOFILE=/home/www/linux/ubuntu-12.04-desktop-amd64.iso
    export QEMU_FILE_PATH=/home/ubuntu1204amd64.qcow2
    export QEMU_MACHINE_NAME=ubuntu1204amd64
fi

/usr/bin/qemu-img create -f qcow2 ${QEMU_FILE_PATH} 80G .
sudo virt-install --connect=qemu:///system --name=${QEMU_MACHINE_NAME} --hvm --accelerate --disk path=${QEMU_FILE_PATH},size=80,device=disk,bus=virtio,format=qcow2 --ram=2048 --vcpus=1 --cdrom ${QEMU_ISOFILE} --network network=default,model=virtio --vnc --os-type=linux --os-variant=ubuntuprecise --livecd --noacpi 

実行結果の例 (グラフィックスとして vnc を指定する場合)

このとき、ドメインはすでに起動した状態になっている.ドメインの状態は virsh list --all で確認できる.

XML ファイルができている. ファイルの場所は /etc/libvirt/qemu の下

<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE 
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh edit ubuntu1204amd64
or other application using the libvirt API.
-->

<domain type='kvm'>
  <name>ubuntu1204amd64</name>
  <uuid>085960a1-cfaa-354e-a47c-f9542c1d9efe</uuid>
  <memory>2097152</memory>
  <currentMemory>2097152</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='x86_64' machine='pc-1.1'>hvm</type>
    <boot dev='cdrom'/>
    <boot dev='hd'/>
  </os>
  <features>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/kvm-spice</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/home/ubuntu1204amd64.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/home/www/linux/ubuntu-12.04-desktop-amd64.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' unit='0'/>
    </disk>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:00:55:0d:13'/>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes'/>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon>
  </devices>
</domain>

操作手順の例 (グラフィックスとして spice を指定する場合)

「--graphics spice,port=5930,password=hoge --video qxl」のようにしている。

※ libvirt のバージョンによっては 「--graphics spice,port=5930,passwd=hoge --video qxl」のようにしなければならないようです(「password」でなく「passwd」)

 
virsh list --all 
 
if [ `arch` = 'i686' ]; then
    export QEMU_ISOFILE=/home/www/linux/ubuntu-12.04-desktop-i386.iso
    export QEMU_FILE_PATH=/home/ubuntu1204i386.qcow2
    export QEMU_MACHINE_NAME=ubuntu1204i386
elif [ `arch` = 'x86_64' ]; then
    export QEMU_ISOFILE=/home/www/linux/ubuntu-12.04-desktop-amd64.iso
    export QEMU_FILE_PATH=/home/ubuntu1204amd64.qcow2
    export QEMU_MACHINE_NAME=ubuntu1204amd64
fi

/usr/bin/qemu-img create -f qcow2 ${QEMU_FILE_PATH} 80G .
sudo virt-install --connect=qemu:///system --name=${QEMU_MACHINE_NAME} --hvm --accelerate --disk path=${QEMU_FILE_PATH},size=80,device=disk,bus=virtio,format=qcow2 --ram=2048 --vcpus=1 --cdrom ${QEMU_ISOFILE} --network network=default,model=virtio --graphics spice,port=5930,password=hoge --video qxl --os-type=linux --os-variant=ubuntuprecise --livecd --noacpi 

実行結果の例 (グラフィックスとして spice を指定する場合)

このとき、下図のように「うまく動作してない」ように見える場合があるが、 無視する。

ドメインはすでに起動した状態になっている.ドメインの状態は virsh list --all で確認できる.

SPICE のプロトコルで、仮想マシンに接続してみる. パスワードは適切に指定すること。

spicec -h 127.0.0.1 -p 5930 -w "hoge" 

ドメインの定義解除

ドメインの定義解除は「virsh undefine」で行う.定義解除の前に「virsh destroy」で強制停止する.

操作手順の例

virsh destroy ubuntu1204amd64 
virsh undefine ubuntu1204amd64 


仮想マシン管理ソフトウエア libvirt を使って、ドメインの複製、ドメインの起動、ドメインの停止,スナップショットの作成を行ってみる

仮想マシンの複製(クローン)

sudo virt-clone -o ubuntu1204amd64 -n new_ubuntu1204amd64 -f /home/new_ubuntu1204amd64.qcow2 --connect=qemu:///system 

ドメイン起動と停止 (Start Domain and Stop Domain)

停止しているドメインを起動し、Virt-viewer を用いて接続する操作

virsh start ubuntu1204amd64 
virsh list --all
virt-viewer --connect qemu:///system <ID番号>

停止しているドメインを起動し、VNC を用いて接続する操作

virsh start ubuntu1204amd64 
virsh list --all
virsh vncdisplay ubuntu1204amd64 
vncviewer :0  

※ リモートから接続したいときは、ファイヤウオールの設定、/etc/libvirt/qemu.confの設定を確認すること

停止しているドメインを起動し、SPICE を用いて接続する操作

virsh start ubuntu1204amd64 
virsh list --all
spicec -h 127.0.0.1 -p 5930 -w hoge

※ リモートから接続したいときは、ファイヤウオールの設定、/etc/libvirt/qemu.confの設定を確認すること

停止しているドメインを起動し、コンソールを起動する操作

virsh start ubuntu1204amd64 
virsh list --all
virsh console ubuntu1204amd64 

ドメインの停止 (Stop Domain)

まず、仮想マシン(ゲスト)の方でシャットダウン操作を行った後に、 ホストの方で、次のコマンドを実行する

virsh shutdown ubuntu1204amd64 

ドメインの再起動 (Reboot Domain)

virsh reboot ubuntu1204amd64 

スナップショットの作成と復帰

仮想マシンの状態をファイルに保存し、あとで復帰できるようにする.

スナップショットの作成

virsh save ubuntu1204amd64 ubuntu1204amd64.snap01 

スナップショットを用いた復帰

virsh restore ubuntu1204amd64.snap01 

既存の XML ファイルを書き換えて、SPICE を使って接続できるようにする

以下 Ubuntu 12.04 での操作手順例を示す

※ 参考 Web ページ: http://libvirt.org/formatdomain.html#elementsGraphics

  1. XML ファイルの graphics セクションの書き換え

    まず、 graphics セクションで vnc が定義されているのを削除する. 次に、spice に関する記述を行う。例えば、次のように記述する.

    ◆ 先ほど virt-installコマンドの実行により作成された XML ファイル /etc/libvirt/qemu/ubuntu1204.xml を編集しているところ

  2. virsh を使ってドメインを起動
    virsh start ubuntu1204amd64 
    virsh list --all
    

  3. SPICE のプロトコルで、仮想マシンに接続してみる
    spicec -h 127.0.0.1 -p 5930 -w "hoge"