Cheap VPS & Xen Server

Residential Proxy Network - Hourly & Monthly Packages

Virtualization With KVM On An OpenSUSE 12.2 Server

This guide explains how you can install and use KVM for creating and running virtual machines on an OpenSUSE 12.2 server. I will show how to create image-based virtual machines and also virtual machines that use a logical volume (LVM). KVM is short for Kernel-based Virtual Machine and makes use of hardware virtualization, i.e., you need a CPU that supports hardware virtualization, e.g. Intel VT or AMD-V.

I do not issue any guarantee that this will work for you!

1 Preliminary Note

I’m using an OpenSUSE 12.2 server with the hostname and the IP address here as my KVM host.

We also need a desktop system where we install virt-manager so that we can connect to the graphical console of the virtual machines that we install. I’m using an OpenSUSE 12.2 desktop here.


2 Installing KVM

OpenSUSE 12.2 KVM Host:

First check if your CPU supports hardware virtualization – if this is the case, the command

egrep ‘(vmx|svm)’ –color=always /proc/cpuinfo

should display something, e.g. like this:

server1:~ # egrep ‘(vmx|svm)’ –color=always /proc/cpuinfo
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall
nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch lbrv
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall
nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch lbrv
server1:~ #

If nothing is displayed, then your processor doesn’t support hardware virtualization, and you must stop here.

To install KVM and virtinst (a tool to create virtual machines), we run

zypper install kvm libvirt libvirt-python qemu virt-manager

Unfortunately libvirt-python conflicts with the package patterns-openSUSE-minimal_base-conflicts. Therefore we must choose to uninstall that package:

Problem: libvirt-python- requires python = 2.7, but this requirement cannot be provided
uninstallable providers: python-2.7.3-3.6.1.x86_64[openSUSE-12.2-1.6]
Solution 1: Following actions will be done:
do not install libvirt-python-
do not install virt-manager-0.9.4-1.6.1.x86_64
Solution 2: Following actions will be done:
do not install virt-manager-0.9.4-1.6.1.x86_64
do not install libvirt-python-
Solution 3: deinstallation of patterns-openSUSE-minimal_base-conflicts-12.2-5.5.1.x86_64
Solution 4: break libvirt-python- by ignoring some of its dependencies

Choose from above solutions by number or cancel [1/2/3/4/c] (c): <– 3

Then create the system startup links for libvirtd…

systemctl enable libvirtd.service

… and start the libvirt daemon:

systemctl start libvirtd.service

To check if KVM has successfully been installed, run

virsh -c qemu:///system list

It should display something like this:

server1:~ # virsh -c qemu:///system list
WARNING: no socket to connect to
Id Name                 State

server1:~ #

If it displays an error instead, then something went wrong.

Next we need to set up a network bridge on our server so that our virtual machines can be accessed from other hosts as if they were physical systems in the network.

To do this, we install the package bridge-utils

zypper install bridge-utils

… and configure a bridge.

To configure the bridge, create the file /etc/sysconfig/network/ifcfg-br0 as follows (make sure you use the IPADDR setting from the /etc/sysconfig/network/ifcfg-eth0 file):

vi /etc/sysconfig/network/ifcfg-br0

NAME='Bridge 0'

(If you get the message You do not have a valid vim binary package installed. Please install either “vim”, “vim-enhanced” or “gvim”., please run

zypper install vim

to install vi and try again. )

Modify /etc/sysconfig/network/ifcfg-eth0 as follows (set IPADDR to and change STARTMODE to hotplug):

vi /etc/sysconfig/network/ifcfg-eth0

NAME='MCP77 Ethernet'

Then restart the network:

systemctl restart network.service

Afterwards, run


It should now show the network bridge (br0):

server1:~ # ifconfig
br0       Link encap:Ethernet  HWaddr 00:1E:90:F3:F0:02
inet addr:  Bcast:  Mask:
inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link
RX packets:92 errors:0 dropped:0 overruns:0 frame:0
TX packets:38 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:12716 (12.4 Kb)  TX bytes:5961 (5.8 Kb)

eth0      Link encap:Ethernet  HWaddr 00:1E:90:F3:F0:02
inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link
RX packets:131711 errors:0 dropped:0 overruns:0 frame:0
TX packets:80954 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:185764801 (177.1 Mb)  TX bytes:6374023 (6.0 Mb)
Interrupt:41 Base address:0x8000

lo        Link encap:Local Loopback
inet addr:  Mask:
inet6 addr: ::1/128 Scope:Host
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:860 (860.0 b)  TX bytes:860 (860.0 b)

server1:~ #

3 Installing virt-manager On Your OpenSUSE 12.1 Desktop

OpenSUSE 12.2 Desktop:

We need a means of connecting to the graphical console of our guests – we can use virt-manager for this. I’m assuming that you’re using an OpenSUSE 12.2 desktop.

Become root…


… and run…

zypper install virt-manager libvirt

… to install virt-manager.

(If you’re using an Ubuntu 11.10 desktop, you can install virt-manager as follows:

sudo apt-get install virt-manager



4 Creating A Debian Squeeze Guest (Image-Based)

OpenSUSE 12.2 KVM Host:

Now let’s go back to our OpenSUSE 12.2 KVM host.

Take a look at

virt-install –help

to learn how to use it.

We will create our image-based virtual machines in the directory /var/lib/libvirt/images/ which was created automatically when we installed KVM in chapter two.

To create a Debian Squeeze guest (in bridging mode) with the name vm10, 512MB of RAM, two virtual CPUs, and the disk image /var/lib/libvirt/images/vm10.img (with a size of 12GB), insert the Debian Squeeze Netinstall CD into the CD drive and run

virt-install –connect qemu:///system -n vm10 -r 512 –vcpus=2 –disk path=/var/lib/libvirt/images/vm10.img,size=12 -c /dev/cdrom –vnc –noautoconsole –os-type linux –os-variant debiansqueeze –accelerate –network=bridge:br0 –hvm

Of course, you can also create an ISO image of the Debian Squeeze Netinstall CD (please create it in the /var/lib/libvirt/images/ directory because later on I will show how to create virtual machines through virt-manager from your OpenSUSE 12.2 desktop, and virt-manager will look for ISO images in the /var/lib/libvirt/images/ directory)…

dd if=/dev/cdrom of=/var/lib/libvirt/images/debian-6.0.0-amd64-netinst.iso

… and use the ISO image in the virt-install command:

virt-install –connect qemu:///system -n vm10 -r 512 –vcpus=2 –disk path=/var/lib/libvirt/images/vm10.img,size=12 -c /var/lib/libvirt/images/debian-6.0.0-amd64-netinst.iso –vnc –noautoconsole –os-type linux –os-variant debiansqueeze –accelerate –network=bridge:br0 –hvm

The output is as follows:

server1:~ # virt-install –connect qemu:///system -n vm10 -r 512 –vcpus=2 –disk path=/var/lib/libvirt/images/vm10.img,size=12 -c /var/lib/libvirt/images/debian-6.0.0-amd64-netinst.iso –vnc –noautoconsole –os-type linux –os-variant debiansqueeze –accelerate –network=bridge:br0 –hvm
WARNING: no socket to connect to

Starting install…
Allocating ‘vm10.img’       |  12 GB     00:00
Creating domain…          |    0 B     00:00
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
server1:~ #

5 Connecting To The Guest

OpenSUSE 12.2 Desktop:

The KVM guest will now boot from the Debian Squeeze Netinstall CD and start the Debian installer – that’s why we need to connect to the graphical console of the guest. You can do this with virt-manager on the OpenSUSE 12.2 desktop.

To make this work with virt-manager, we have to configure the local and the remote system in such a way that a password-less SSH login is possible from the local system to the remote system. To do this, we create a private/public key pair on the local system as a normal user (not root)…


falko@linux-ci7w:~> ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/falko/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/falko/.ssh/id_rsa.
Your public key has been saved in /home/falko/.ssh/
The key fingerprint is:
The key’s randomart image is:
+–[ RSA 2048]—-+
|          ..+.E  |
|           o = . |
|            + +  |
|           o B   |
|        S o = o  |
|       o o + o   |
|      . o . o    |
|       . =       |
|        ..o      |

… and copy the public key to the remote KVM host:

ssh-copy-id -i $HOME/.ssh/ root@



as a normal user (not root) on the desktop to start virt-manager (this is exactly the same on an Ubuntu desktop).

When you start virt-manager, you will most likely see the following message (Packages required for KVM usage). Click on No because we don’t want to connect to the local libvirt daemon, but to the one on our OpenSUSE 12.2 KVM host.


For the same reason you can ignore the message Could not detect a default hypervisor.:


Go to File > Add Connection… to connect to our OpenSUSE 12.2 KVM host:


Select QEMU/KVM as Hypervisor, then check Connect to remote host, select SSH from the Method drop-down menu, fill in root in the Username field, type in the hostname ( or IP address ( of the OpenSUSE 12.2 KVM host in the Hostname field, and click on Connect:


You should see vm10 as running. Mark that guest and click on the Open button to open the graphical console of the guest:


You should now be connected to the graphical console of the guest and see the Debian installer:


Now install Debian as you would normally do on a physical system. Please note that at the end of the installation, the Debian guest needs a reboot. The guest will then stop, so you need to start it again, either with virt-manager or like this on our OpenSUSE 12.2 KVM host command line:

OpenSUSE 12.2 KVM Host:

virsh –connect qemu:///system

start vm10


Afterwards, you can connect to the guest again with virt-manager and configure the guest. If you install OpenSSH (package openssh-server) in the guest, you can connect to it with an SSH client (such as PuTTY).

6 Creating A Debian Squeeze Guest (Image-Based) From The Desktop With virt-manager

Instead of creating a virtual machine from the command line (as shown in chapter 4), you can as well create it from the OpenSUSE 12.2 desktop using virt-manager (of course, the virtual machine will be created on the OpenSUSE 12.2 KVM host – in case you ask yourself if virt-manager is able to create virtual machines on remote systems).

To do this, click on the following button:


The New VM dialogue comes up. Fill in a name for the VM (e.g. vm11), select Local install media (ISO image or CDROM), and click on Forward:


Next select Linux in the OS type drop-down menu and Debian Squeeze in the Version drop-down menu, then check Use ISO image and click on the Browse… button:


Select the debian-6.0.0-amd64-netinst.iso image that you created in chapter 4 and click on Choose Volume:


Now click on Forward:


Assign memory and the number of CPUs to the virtual machine and click on Forward:


Now we come to the storage. Check Enable storage for this virtual machine, select Create a disk image on the computer’s hard drive, specify the size of the hard drive (e.g. 12GB), and check Allocate entire disk now. Then click on Forward:


Now we come to the last step of the New VM dialogue. Go to the Advanced options section. Select Specify shared device name; the Bridge name field will then appear where you fill in br0 (the name of the bridge which we created in chapter 2). Click on Finish afterwards:


The disk image for the VM is now being created.

Afterwards, the VM will start. You should now be connected to the graphical console of the guest and see the Debian installer:


Now install Debian as you would normally do on a physical system.

7 Managing A KVM Guest

OpenSUSE 12.2 KVM Host:

KVM guests can be managed through virsh, the “virtual shell”. To connect to the virtual shell, run

virsh –connect qemu:///system

This is how the virtual shell looks:

server1:~ # virsh –connect qemu:///system
WARNING: no socket to connect to
Welcome to virsh, the virtualization interactive terminal.

Type:  ‘help’ for help with commands
‘quit’ to quit

virsh #

You can now type in commands on the virtual shell to manage your guests. Run


to get a list of available commands:

virsh # help
Grouped commands:

Domain Management (help keyword ‘domain’):
attach-device                  attach device from an XML file
attach-disk                    attach disk device
attach-interface               attach network interface
autostart                      autostart a domain
blkdeviotune                   Set or query a block device I/O tuning parameters.
blkiotune                      Get or set blkio parameters
blockpull                      Populate a disk from its backing image.
blockjob                       Manage active block operations.
blockresize                    Resize block device of domain.
change-media                   Change media of CD or floppy drive
console                        connect to the guest console
cpu-baseline                   compute baseline CPU
cpu-compare                    compare host CPU with a CPU described by an XML file
cpu-stats                      show domain cpu statistics
create                         create a domain from an XML file
define                         define (but don’t start) a domain from an XML file
desc                           show or set domain’s description or title
destroy                        destroy (stop) a domain
detach-device                  detach device from an XML file
detach-disk                    detach disk device
detach-interface               detach network interface
domid                          convert a domain name or UUID to domain id
domif-setlink                  set link state of a virtual interface
domiftune                      get/set parameters of a virtual interface
domjobabort                    abort active domain job
domjobinfo                     domain job information
domname                        convert a domain id or UUID to domain name
dompmsuspend                   suspend a domain for a given time duration
dompmwakeup                    wakeup a domain suspended by dompmsuspend command
domuuid                        convert a domain name or id to domain UUID
domxml-from-native             Convert native config to domain XML
domxml-to-native               Convert domain XML to native config
dump                           dump the core of a domain to a file for analysis
dumpxml                        domain information in XML
edit                           edit XML configuration for a domain
inject-nmi                     Inject NMI to the guest
send-key                       Send keycodes to the guest
managedsave                    managed save of a domain state
managedsave-remove             Remove managed save of a domain
maxvcpus                       connection vcpu maximum
memtune                        Get or set memory parameters
migrate                        migrate domain to another host
migrate-setmaxdowntime         set maximum tolerable downtime
migrate-setspeed               Set the maximum migration bandwidth
migrate-getspeed               Get the maximum migration bandwidth
numatune                       Get or set numa parameters
reboot                         reboot a domain
reset                          reset a domain
restore                        restore a domain from a saved state in a file
resume                         resume a domain
save                           save a domain state to a file
save-image-define              redefine the XML for a domain’s saved state file
save-image-dumpxml             saved state domain information in XML
save-image-edit                edit XML for a domain’s saved state file
schedinfo                      show/set scheduler parameters
screenshot                     take a screenshot of a current domain console and store it into a file
setmaxmem                      change maximum memory limit
setmem                         change memory allocation
setvcpus                       change number of virtual CPUs
shutdown                       gracefully shutdown a domain
start                          start a (previously defined) inactive domain
suspend                        suspend a domain
ttyconsole                     tty console
undefine                       undefine a domain
update-device                  update device from an XML file
vcpucount                      domain vcpu counts
vcpuinfo                       detailed domain vcpu information
vcpupin                        control or query domain vcpu affinity
vncdisplay                     vnc display

Domain Monitoring (help keyword ‘monitor’):
domblkerror                    Show errors on block devices
domblkinfo                     domain block device size information
domblklist                     list all domain blocks
domblkstat                     get device block stats for a domain
domcontrol                     domain control interface state
domif-getlink                  get link state of a virtual interface
domiflist                      list all domain virtual interfaces
domifstat                      get network interface stats for a domain
dominfo                        domain information
dommemstat                     get memory statistics for a domain
domstate                       domain state
list                           list domains

Host and Hypervisor (help keyword ‘host’):
capabilities                   capabilities
connect                        (re)connect to hypervisor
freecell                       NUMA free memory
hostname                       print the hypervisor hostname
nodecpustats                   Prints cpu stats of the node.
nodeinfo                       node information
nodememstats                   Prints memory stats of the node.
nodesuspend                    suspend the host node for a given time duration
qemu-attach                    QEMU Attach
qemu-monitor-command           QEMU Monitor Command
sysinfo                        print the hypervisor sysinfo
uri                            print the hypervisor canonical URI
version                        show version

Interface (help keyword ‘interface’):
iface-begin                    create a snapshot of current interfaces settings, which can be later committed (iface-commit) or restored (iface-rollback)
iface-bridge                   create a bridge device and attach an existing network device to it
iface-commit                   commit changes made since iface-begin and free restore point
iface-define                   define (but don’t start) a physical host interface from an XML file
iface-destroy                  destroy a physical host interface (disable it / “if-down”)
iface-dumpxml                  interface information in XML
iface-edit                     edit XML configuration for a physical host interface
iface-list                     list physical host interfaces
iface-mac                      convert an interface name to interface MAC address
iface-name                     convert an interface MAC address to interface name
iface-rollback                 rollback to previous saved configuration created via iface-begin
iface-start                    start a physical host interface (enable it / “if-up”)
iface-unbridge                 undefine a bridge device after detaching its slave device
iface-undefine                 undefine a physical host interface (remove it from configuration)

Network Filter (help keyword ‘filter’):
nwfilter-define                define or update a network filter from an XML file
nwfilter-dumpxml               network filter information in XML
nwfilter-edit                  edit XML configuration for a network filter
nwfilter-list                  list network filters
nwfilter-undefine              undefine a network filter

Networking (help keyword ‘network’):
net-autostart                  autostart a network
net-create                     create a network from an XML file
net-define                     define (but don’t start) a network from an XML file
net-destroy                    destroy (stop) a network
net-dumpxml                    network information in XML
net-edit                       edit XML configuration for a network
net-info                       network information
net-list                       list networks
net-name                       convert a network UUID to network name
net-start                      start a (previously defined) inactive network
net-undefine                   undefine an inactive network
net-uuid                       convert a network name to network UUID

Node Device (help keyword ‘nodedev’):
nodedev-create                 create a device defined by an XML file on the node
nodedev-destroy                destroy (stop) a device on the node
nodedev-detach                 detach node device from its device driver
nodedev-dumpxml                node device details in XML
nodedev-list                   enumerate devices on this host
nodedev-reattach               reattach node device to its device driver
nodedev-reset                  reset node device

Secret (help keyword ‘secret’):
secret-define                  define or modify a secret from an XML file
secret-dumpxml                 secret attributes in XML
secret-get-value               Output a secret value
secret-list                    list secrets
secret-set-value               set a secret value
secret-undefine                undefine a secret

Snapshot (help keyword ‘snapshot’):
snapshot-create                Create a snapshot from XML
snapshot-create-as             Create a snapshot from a set of args
snapshot-current               Get or set the current snapshot
snapshot-delete                Delete a domain snapshot
snapshot-dumpxml               Dump XML for a domain snapshot
snapshot-edit                  edit XML for a snapshot
snapshot-list                  List snapshots for a domain
snapshot-parent                Get the name of the parent of a snapshot
snapshot-revert                Revert a domain to a snapshot

Storage Pool (help keyword ‘pool’):
find-storage-pool-sources-as   find potential storage pool sources
find-storage-pool-sources      discover potential storage pool sources
pool-autostart                 autostart a pool
pool-build                     build a pool
pool-create-as                 create a pool from a set of args
pool-create                    create a pool from an XML file
pool-define-as                 define a pool from a set of args
pool-define                    define (but don’t start) a pool from an XML file
pool-delete                    delete a pool
pool-destroy                   destroy (stop) a pool
pool-dumpxml                   pool information in XML
pool-edit                      edit XML configuration for a storage pool
pool-info                      storage pool information
pool-list                      list pools
pool-name                      convert a pool UUID to pool name
pool-refresh                   refresh a pool
pool-start                     start a (previously defined) inactive pool
pool-undefine                  undefine an inactive pool
pool-uuid                      convert a pool name to pool UUID

Storage Volume (help keyword ‘volume’):
vol-clone                      clone a volume.
vol-create-as                  create a volume from a set of args
vol-create                     create a vol from an XML file
vol-create-from                create a vol, using another volume as input
vol-delete                     delete a vol
vol-download                   Download a volume to a file
vol-dumpxml                    vol information in XML
vol-info                       storage vol information
vol-key                        returns the volume key for a given volume name or path
vol-list                       list vols
vol-name                       returns the volume name for a given volume key or path
vol-path                       returns the volume path for a given volume name or key
vol-pool                       returns the storage pool for a given volume key or path
vol-resize                     resize a vol
vol-upload                     upload a file into a volume
vol-wipe                       wipe a vol

Virsh itself (help keyword ‘virsh’):
cd                             change the current directory
echo                           echo arguments
exit                           quit this interactive terminal
help                           print help
pwd                            print the current directory
quit                           quit this interactive terminal

virsh #


shows all running guests;

list –all

shows all guests, running and inactive:

virsh # list –all

Id Name                 State
3 vm10                 running
4 vm11                 running

virsh #

If you modify a guest’s xml file (located in the /etc/libvirt/qemu/ directory), you must redefine the guest:

define /etc/libvirt/qemu/vm10.xml

Please note that whenever you modify the guest’s xml file in /etc/libvirt/qemu/, you must run the define command again!

To start a stopped guest, run:

start vm10

To stop a guest, run

shutdown vm10

To immediately stop it (i.e., pull the power plug), run

destroy vm10

Suspend a guest:

suspend vm10

Resume a guest:

resume vm10

These are the most important commands.



to leave the virtual shell.

8 Creating An LVM-Based Guest

OpenSUSE 12.2 KVM Host:

LVM-based guests have some advantages over image-based guests. They are not as heavy on hard disk IO, and they are easier to back up (using LVM snapshots).

To use LVM-based guests, you need a volume group that has some free space that is not allocated to any logical volume. In this example, I use the volume group /dev/system with a size of approx. 465GB…


server1:~ # vgdisplay
— Volume group —
VG Name               system
System ID
Format                lvm2
Metadata Areas        1
Metadata Sequence No  3
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                2
Open LV               2
Max PV                0
Cur PV                1
Act PV                1
VG Size               465.61 GiB
PE Size               4.00 MiB
Total PE              119195
Alloc PE / Size       27136 / 106.00 GiB
Free  PE / Size       92059 / 359.61 GiB
VG UUID               fKvgEc-efcR-yIfz-E35O-GSou-xdtT-etyJik

server1:~ #

… that contains the logical volume /dev/system/root with a size of approx. 100GB and the logical volume /dev/system/swap (about 6GB) – the rest is not allocated and can be used for KVM guests:


server1:~ # lvdisplay
— Logical volume —
LV Name                /dev/system/root
VG Name                system
LV UUID                0yR2UP-FSrM-uu6p-Xy11-dRFb-omZV-5qZTX6
LV Write Access        read/write
LV Status              available
# open                 1
LV Size                100.00 GiB
Current LE             25600
Segments               1
Allocation             inherit
Read ahead sectors     auto
– currently set to     256
Block device           253:0

— Logical volume —
LV Name                /dev/system/swap
VG Name                system
LV UUID                XkdRHz-b5V0-Zyc8-nGYw-ljqF-WI49-dGoMxt
LV Write Access        read/write
LV Status              available
# open                 2
LV Size                6.00 GiB
Current LE             1536
Segments               1
Allocation             inherit
Read ahead sectors     auto
– currently set to     256
Block device           253:1

server1:~ #

I will now create the virtual machine vm12 as an LVM-based guest. I want vm12 to have 20GB of disk space, so I create the logical volume /dev/system/vm12 with a size of 20GB:

lvcreate -L20G -n vm12 system

Afterwards, we use the virt-install command again to create the guest:

virt-install –connect qemu:///system -n vm12 -r 512 –vcpus=2 –disk path=/dev/system/vm12 -c /var/lib/libvirt/images/debian-6.0.0-amd64-netinst.iso –vnc –noautoconsole –os-type linux –os-variant debiansqueeze –accelerate –network=bridge:br0 –hvm

Please note that instead of –disk path=/var/lib/libvirt/images/vm12.img,size=20 I use –disk path=/dev/system/vm12, and I don’t need to define the disk space anymore because the disk space is defined by the size of the logical volume vm12 (20GB).

Now follow chapter 5 to install that guest.


9 Converting Image-Based Guests To LVM-Based Guests

OpenSUSE 12.2 KVM Host:

No let’s assume we want to convert our image-based guest vm10 into an LVM-based guest. This is how we do it:

First make sure the guest is stopped:

virsh –connect qemu:///system

shutdown vm10


Then create a logical volume (e.g. /dev/system/vm10) that has the same size as the image file – the image has 12GB, so the logical volume must have 12GB of size as well:

lvcreate -L12G -n vm10 system

Now convert the disk image:

qemu-img convert /var/lib/libvirt/images/vm10.img -O raw /dev/system/vm10

Afterwards you can delete the disk image:

rm -f /var/lib/libvirt/images/vm10.img

Now we must open the guest’s xml configuration file /etc/libvirt/qemu/vm10.xml

vi /etc/libvirt/qemu/vm10.xml

… and change the following section…

    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/var/lib/libvirt/images/vm10.img'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>

… so that it looks as follows:

    <disk type='block' device='disk'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/system/vm10'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>

Afterwards we must redefine the guest:

virsh –connect qemu:///system

define /etc/libvirt/qemu/vm10.xml

Still on the virsh shell, we can start the guest…

start vm10

… and leave the virsh shell:



  • KVM:
  • OpenSUSE:
  • Debian:
  • Ubuntu: