トップページ -> インストール,設定,利用 -> KVM, Xenなど(仮想化) -> 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
    

    [image]

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

    kvm_intel
    kvm
    

    の2行を追加する

    [image]

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 下にいくつかの設定ファイルができる

    [image]
  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 に設定を追加

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

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

ドメインの一覧

virsh list --all 

◆ 実行結果の例

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

[image]

ドメインの新規作成(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 を指定する場合)

[image]

[image]

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

[image]

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 を指定する場合)

[image]

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

[image]

[image]

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

[image]

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

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

[image]

ドメインの定義解除

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

操作手順の例

virsh destroy ubuntu1204amd64
virsh undefine ubuntu1204amd64

[image]

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

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

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

[image]

ドメイン起動と停止 (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の設定を確認すること

[image]

[image]

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

virsh start ubuntu1204amd64
virsh list --all
virsh console ubuntu1204amd64

ドメインの停止 (Stop Domain)

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

virsh shutdown ubuntu1204amd64

[image]

ドメインの再起動 (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 を編集しているところ

    [image]
  2. virsh を使ってドメインを起動
    virsh start ubuntu1204amd64
    virsh list --all
    
  3. SPICE のプロトコルで、仮想マシンに接続してみる
    spicec -h 127.0.0.1 -p 5930 -w "hoge" 
    

    [image]

本サイトのサイトマップは,サイトマップのページをご覧下さい. 本サイト内の検索は,サイト内検索のページをご利用下さい.

問い合わせ先: 金子邦彦(かねこ くにひこ) [image]