Virtualization With KVM On Ubuntu 11.04 - Page 2

4 Creating A Second VM

If you want to create a second VM (vm2), here's a short summary of the commands:

mkdir -p /var/lib/libvirt/images/vm2/mytemplates/libvirt
cp /etc/vmbuilder/libvirt/* /var/lib/libvirt/images/vm2/mytemplates/libvirt/

vi /var/lib/libvirt/images/vm2/vmbuilder.partition

vi /var/lib/libvirt/images/vm2/

cd /var/lib/libvirt/images/vm2/
vmbuilder kvm ubuntu --suite=natty --flavour=virtual --arch=amd64 --mirror= -o --libvirt=qemu:///system --ip= --gw= --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=/var/lib/libvirt/images/vm2/ --mem=256 --hostname=vm2 --bridge=br0

(Please note that you don't have to create a new directory for the VM (/var/lib/libvirt/images/vm2) if you pass the -d DESTDIR argument to the vmbuilder command - it allows you to create a VM in a directory where you've already created another VM. In that case you don't have to create new vmbuilder.partition and files and don't have to modify the template, but can simply use the existing files:

cd /var/lib/libvirt/images/vm1/
vmbuilder kvm ubuntu --suite=lucid --flavour=virtual --arch=amd64 --mirror= -o --libvirt=qemu:///system --ip= --gw= --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=/var/lib/libvirt/images/vm1/ --mem=256 --hostname=vm2 --bridge=br0 -d vm2-kvm



5 Managing A VM

VMs 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:

root@server1:~# virsh --connect qemu:///system
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 VMs. 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
    console                        connect to the guest console
    cpu-baseline                   compute baseline CPU
    cpu-compare                    compare host CPU with a CPU described by an XML file
    create                         create a domain from an XML file
    define                         define (but don't start) a domain from an XML file
    destroy                        destroy 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
    domjobabort                    abort active domain job
    domjobinfo                     domain job information
    domname                        convert a domain id or UUID to domain name
    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
    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
    reboot                         reboot 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
    schedinfo                      show/set scheduler parameters
    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 an inactive domain
    update-device                  update device from an XML file
    vcpucount                      domain vcpu counts
    vcpuinfo                       detailed domain vcpu information
    vcpupin                        control domain vcpu affinity
    version                        show version
    vncdisplay                     vnc display

 Domain Monitoring (help keyword 'monitor'):
    domblkinfo                     domain block device size information
    domblkstat                     get device block stats for a domain
    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
    nodeinfo                       node information
    qemu-monitor-command           Qemu Monitor Command
    sysinfo                        print the hypervisor sysinfo
    uri                            print the hypervisor canonical URI

 Interface (help keyword 'interface'):
    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-start                    start a physical host interface (enable it / "if-up")
    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 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 a device on the node
    nodedev-dettach                dettach 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
    snapshot-current               Get the current snapshot
    snapshot-delete                Delete a domain snapshot
    snapshot-dumpxml               Dump XML for a domain snapshot
    snapshot-list                  List snapshots for a domain
    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 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-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-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 VMs;

list --all

shows all VMs, running and inactive:

virsh # list --all
 Id Name                 State
  - vm1                  shut off
  - vm2                  shut off

virsh #

Before you start a new VM for the first time, you must define it from its xml file (located in the /etc/libvirt/qemu/ directory):

define /etc/libvirt/qemu/vm1.xml

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

Now you can start the VM:

start vm1

After a few moments, you should be able to connect to the VM with an SSH client such as PuTTY; log in with the default username and password. After the first login you will be prompted to change the password.


should now show the VM as running:

virsh # list
 Id Name                 State
  1 vm1                  running

virsh #

To stop a VM, run

shutdown vm1

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

destroy vm1

Suspend a VM:

suspend vm1

Resume a VM:

resume vm1

These are the most important commands.



to leave the virtual shell.

Share this page:

11 Comment(s)

Add comment


From: Anonymous at: 2011-05-10 14:17:38


From: Anonymous at: 2011-05-07 20:09:49

Instead of confusing the users with all this code, why can't you design a simple step-by-step "install wizard" with all the commands embedded?

All I would have to do is just download the "Install Wizard"!!!

I truly can't understand why do I have to bother will all that code...

Even though I am a Linux Fan, sorry, but Windows world is just so simpler...

I truly will not bother playing around with Virtualization in Linux if I have to bother with so much code, and so many articles.


From: Anonymous at: 2011-05-31 21:11:29

You must have a very simple job. One that robots will be doing sometimes soon.

From: Anonymous at: 2011-07-14 18:48:16

you have got to be kidding me! Windows is so much easier??? Really!! LMAO!

From: Tim at: 2011-07-16 06:43:38

The beauty of Linux is that it is not cookie cutter like Windows.  Even though it is tougher to configure (code), it gives a you a better feeling of accomplishment when you do find success. This leads to more trials and victories, you gain proficiency along the way. 

From: David N at: 2011-05-19 07:12:21

To avoid this problem:

Traceback (most recent call last):
  File "/usr/bin/vmbuilder", line 24, in <module>
  File "/usr/lib/python2.7/dist-packages/VMBuilder/contrib/", line 222, in main
  File "/usr/lib/python2.7/dist-packages/VMBuilder/contrib/", line 399, in set_disk_layout
IndexError: list index out of range

make sure that your vmbuilder.partition file has the columns separated by spaces, not tabs.  I learned the hard way!

From: David W at: 2015-04-22 19:31:20

Thank You so much!  

Spent a whole day trying to figure this one out!! 

From: tim999 at: 2011-07-18 06:40:11

If you get an error indicating there are not enough Loops and you are running Ubuntu with Grub2, then you can increase Loops with the following.

First see how many loops you have with this command
ls /dev/loop*

Then edit grub module 10_linux
gedit /etc/grub.d/10_linux

Inside 10_linux, find the line that looks simular to the line below
linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}

Make the lline look like this -
linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} max_loop=64

Save it, 10_linux

Remember to run the command below (to incorporate the change)

ReBoot your system and rerun this command you should see 64 loops
ls /dev/loop*

From: at: 2011-09-06 17:32:32

Can't figure this text editor out:

No text is entered until I hit the o key.

Can't remove carriage returns.

Arrow keys behave erratically, sometimes entering A, C, etc characters when pressed.  This is on a normal 110 key keyboard.

Can't save.

Found Ctrl-C <Enter> :quit <Enter>, but that doesn't save.

No commands help available within the vi text editing screen.

It would be nice if this guide explicitly stated how to edit (and SAVE) files using the vi command from terminal.

 I know I've gotten lazy using Windows, but even in DOS I never had these kinds of troubles.  Makes me wish for a GUI based Virtual Machine installer, since this is all just so the kid can run some PC based games.  QEMU Launcher won't even get past Launch, no error, just nothing happens...  (Don't even ask about Play On Linux / Wine)

From: Anonymous at: 2011-10-13 12:58:32

Have you never used vi before?  Google the commands for vi.  Quick reference:

 To edit (insert new characters or delete, etc.) hit "i" then start editing.

 To save and quite, press "esc" once done editing.  Then press ":" and type "wq".  That will write and quit.

From: Anonymous at: 2011-11-02 12:42:38

Great tutorial; just one question. I don't get any errors when running the vmbuilder command, but when attempting to "define" a vm the error says there is no file or directory. It's all there in the /var/... directories, but the .xml profile is not being created in the /etc/.. directory. (I've searched the entire file system). Do you have any suggestions on where else to troubleshoot?  I'm using Ubuntu 11.04 on an 64-bit AMD dual core with KVM. The same hardware supported VMs fine under Ubuntu 9.04.