Ubuntu KVM

It’s Virtualization with KVM ( Kernel-based Virtual Machine ) + QEMU.
This requires that the CPU on your computer which has a function Intel VT or AMD-V.
[1] Install required packages.
root@dlp:~#

apt-get -y install qemu-kvm libvirt-bin virtinst bridge-utils
[2] Enable vhost-net.
root@dlp:~#

modprobe vhost_net

root@dlp:~#

lsmod | grep vhost
vhost_net              20480  0
vhost                  32768  1 vhost_net
macvtap                20480  1 vhost_net

root@dlp:~#

echo vhost_net >> /etc/modules
[3] Configure Bridge networking.

root@dlp:~#

vi /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto ens33
# change like follows
iface ens33 inet manual
#

iface ens33 inet static

#

address 10.0.0.30

#

network 10.0.0.0

#

netmask 255.255.255.0

#

broadcast 10.0.0.255

#

gateway 10.0.0.1

#

dns-nameservers 10.0.0.30

# add bridge interface
iface br0 inet static
address 10.0.0.30
network 10.0.0.0
netmask 255.255.255.0
broadcast 10.0.0.255
gateway 10.0.0.1
dns-nameservers 10.0.0.30
bridge_ports ens33
bridge_stp off
auto br0

root@dlp:~#

root@dlp:~#

ip addr
1: lo: >LOOPBACK,UP,LOWER_UP< mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: >BROADCAST,MULTICAST,UP,LOWER_UP< mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 00:0c:29:da:3a:55 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::20c:29ff:feda:3a55/64 scope link
       valid_lft forever preferred_lft forever
3: br0: >BROADCAST,MULTICAST,UP,LOWER_UP< mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:0c:29:da:3a:55 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.30/24 brd 10.0.0.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feda:3a55/64 scope link
       valid_lft forever preferred_lft forever
4: virbr0: >NO-CARRIER,BROADCAST,MULTICAST,UP< mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:82:4b:a7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: virbr0-nic: >BROADCAST,MULTICAST< mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:82:4b:a7 brd ff:ff:ff:ff:ff:ff

 

Create Virtual Machine#1
Install GuestOS and create Virtual Machine. This example shows to install Ubuntu.
[1] Create a Virtual Machine on text mode via network, it’s OK on Console or remote connection with Putty and so on.

root@dlp:~#

apt-get -y install libosinfo-bin libguestfs-tools virt-top
# create a storage pool

root@dlp:~#

mkdir -p /var/kvm/images

root@dlp:~#

virt-install \

–name template \
–ram 4096 \
–disk path=/var/kvm/images/template.img,size=30 \
–vcpus 2 \
–os-type linux \
–os-variant ubuntu16.04 \
–network bridge=br0 \
–graphics none \
–console pty,target_type=serial \
–location ‘http://jp.archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/’ \
–extra-args ‘console=ttyS0,115200n8 serial’

Starting install…

# installation starts
# after installation, back to KVM host and shutdown the guest like follows

root@dlp:~#

virsh shutdown template

Domain template is being shutdown

# mount guest’s disk and enable a service like follows

root@dlp:~#

guestmount -d template -i /mnt

root@dlp:~#

ln -s /mnt/lib/systemd/system/getty@.service /mnt/etc/systemd/system/getty.target.wants/getty@ttyS0.service

root@dlp:~#

umount /mnt
# start guest again, if it’s possible to connect to the guest’s console, it’s OK all

root@dlp:~#

virsh start template –console
Domain template started
Connected to domain template
Escape character is ^]

Ubuntu 16.04 LTS ubuntu ttyS0

ubuntu login:
For options, make sure ‘man virt-install’, there are many options.

–name

specify the name of Virtual Machine

–ram

specify the amount of memories of Virtual Machine

–disk path=xxx ,size=xxx

‘path=’ ⇒ specify the location of disks of Virtual Machine
‘size=’ ⇒ specify the amount of disks of Virtual Machine

–vcpus

specify the virtual CPUs

–os-type

specify the type of GuestOS

–os-variant

specify the kind of GuestOS – list all valid variant with the following command
# osinfo-query os

–network

specify network types of Virtual Machine

–graphics

specify the kind of graphics. if set ‘none’, it means nographics.

–console

specify the console type

–location

specify the location of installation where from

–extra-args

specify parameters that is set in kernel
[2] Move to GuestOS to HostOS with Ctrl + ] key.
Move to HostOS to GuestOS with a command ‘virsh console (name of virtual machine)’.

xerus@ubuntu:~$

# Ctrl + ]

root@dlp:~#

# Host’s console

root@dlp:~#

virsh console template
# move to Guest

Connected to domain template
Escape character is ^]

# Enter key

xerus@ubuntu:~$

# Guest’s console
[3] It’s easy to clone a virtual machine from existing one to new like follows.
# Host’s console

root@dlp:~#

virt-clone –original template –name ubuntu1604 –file /var/kvm/images/ubuntu1604.img
Allocating 'ubuntu1604.img'                     |  30 GB     01:02

Clone ‘ubuntu1604’ created successfully.
root@dlp:~#

ll /var/kvm/images/ubuntu1604.img

-rw——- 1 root root 1899888640 May 16 21:05 /var/kvm/images/ubuntu1604.img
root@dlp:~#

ll /etc/libvirt/qemu/ubuntu1604.xml

-rw——- 1 root root 2694 May 16 21:05 /etc/libvirt/qemu/ubuntu1604.xml

 

Basic Operations

2016/05/15
This is the basic Operarions with virsh command.
[1] Start Virtual Machine
# start Virtual Machine ‘ubuntu’

root@dlp:~#

virsh start ubuntu
Domain ubuntu started
# start and connect to console of ‘ubuntu’

root@dlp:~#

virsh start ubuntu –console

Domain ubuntu started
Connected to domain ubuntu

[2] Stop Virtual Machine
# stop Virtual Machine ‘ubuntu’

root@dlp:~#

virsh shutdown ubuntu
Domain ubuntu is being shutdown
# stop fourcely Virtual Machine ‘ubuntu’

root@dlp:~#

virsh destroy ubuntu

Domain ubuntu destroyed

[3] Set auto-start for Virtual Machines
# enable auto-start for ‘ubuntu’

root@dlp:~#

virsh autostart ubuntu
Domain ubuntu marked as autostarted
# disable auto-start for ‘ubuntu’

root@dlp:~#

virsh autostart –disable ubuntu

Domain ubuntu unmarked as autostarted

[4] List all Virtual Machines
# list all active Virtual Machines

root@dlp:~#

virsh list

Id Name     State
——————————————

  2   win2k12R2     running
# list all Virtual Machines include inactives

root@dlp:~#

virsh list –all

Id Name     State
——————————————
2   win2k12R2     running
1   ubuntu     shut off

[5] Switch console,
Move to GuestOS to HostOS with Ctrl + ] key.
Move to HostOS to GuestOS with a command ‘virsh console (name of virtual machine)’.
root@dlp:~#

virsh console ubuntu
# connect to ‘ubuntu’
Connected to domain ubuntu
Escape character is ^]

# Enter key
Ubuntu 16.04 ubuntu ttyS0
ubuntu login:

# just switched on Guest

Password:
root@ubuntu:~#

# Ctrl + ] key

root@dlp:~#

# just switched on Parent Host
[6] For Other options, There are many options, please try to execute them.
root@dlp:~#

virsh –help
virsh [options]... [<command_string>]
virsh [options]... <command> [args...]

  options:
    -c | --connect=URI      hypervisor connection URI
    -r | --readonly         connect readonly
    -d | --debug=NUM        debug level [0-4]
    -h | --help             this help
    -q | --quiet            quiet mode
    -t | --timing           print timing information
    -l | --log=FILE         output logging to file
    -v                      short version
    -V                      long version
         --version[=TYPE]   version, TYPE is short or long (default short)
    -e | --escape <char>    set escape sequence for console

  commands (non interactive mode):

 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.
    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 (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
    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
    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
    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
    version                        show version
    vncdisplay                     vnc display

 Domain Monitoring (help keyword 'monitor')
    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
    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

 Interface (help keyword 'interface')
    iface-begin                    create a snapshot of current interfaces settings, which can be later commited
                                   (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-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 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-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


  (specify help <group> for details about the commands in the group)

  (specify help <command> for details about the command)