libvirt + QEMU + KVM + Debian¶
Check cpu virtualization access:
sudo virt-host-validate
egrep -c '(vmx|svm)' /proc/cpuinfo
sudo apt-get install cpu-checker
sudo kvm-ok
Check Debian source list sources.list
:
deb http://ftp.de.debian.org/debian jessie main non-free
deb-src http://ftp.de.debian.org/debian jessie main non-free
Free up not used space on a qcow2-image-file:
# zero fill on guest
dd if=/dev/zero of=/some/file
rm /some/file
# shut down the VM
# on host
qemu-img convert -O qcow2 original_image.qcow2 deduplicated_image.qcow2
qemu-system-x86_64¶
Show supported machines types:
qemu-system-x86_64 -machine help
QEMU config file - /etc/libvirt/qemu.conf
. VNC, SPICE, etc. configuration.
Networking - http://wiki.qemu.org/Documentation/Networking
qemu-img¶
Images and snapshots - http://azertech.net/content/kvm-qemu-qcow2-qemu-img-and-snapshots
qemu-img
tool:
# Show information (size, backing files, snapshots)
qemu-img info <image.qcow2>
# Create a simple QCOW2 image file
qemu-img create -f qcow2 <image.qcow2> <max_capacity_in_gigabytes>g
# Create a QCOW2 image linked with base image
qemu-img create -b <base_image> -f qcow2 -l <new_image>
# List snapshots
qemu-img snapshot -l <imagename>
# Create snapshot
qemu-img snapshot -c <snapshot-name> <imagename>
# Apply snapshot
qemu-img snapshot -a <snapshot-name> <imagename>
# Delete snapshot
qemu-img snapshot -d <snapshot-name> <imagename>
# Clone image
qemu-img convert -p -f qcow2 <source_image> -O qcow2 <dest_image>
Nested virtualization¶
Check is enabled:
cat /sys/module/kvm_intel/parameters/nested
# Y or N
Enable nested module on host¶
sudo sh -c "echo 'options kvm-intel nested=Y' > /etc/modprobe.d/kvm-intel.conf"
# reboot or reload the kernel module
modprobe -r kvm_intel
modprobe kvm_intel
Configuration in virt-manager¶
Make sure your VM is shut down. Open virt-manager, go to the VM details page for that VM. Click on the Processor page. In the Configuration section, there are two options - either type host-passthrough into to Model field or enable Copy host CPU configuration checkbox (that fills host-model value into the Model field). Click Apply. The difference between those two values is complicated, some details are in bug 1055002. For nested virt, you’ll probably want to use host-passthrough until issues with host-model are worked out. Be aware though, that host-passthrough is not recommended for general usage, just for nested virt purposes.
Install KVM, libvirt¶
sudo apt-get update
sudo apt-get install qemu-kvm libvirt-bin qemu-utils
# adduser root libvirt
# adduser lee libvirt
/etc/libvirt/ # configs
/etc/libvirt/storage/ # storage configs
/var/lib/libvirt/ # images, snapshots, etc.
Libvirt¶
/var/lib/libvirt/dnsmasq/virbr0.status
- MAC/IP/hostname of domains
Domain.xml
:
#
# Port forwarding to machine
#
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
...
<interface type='network'> -> <interface type='user'>
...
<qemu:commandline>
<qemu:arg value='-redir'/>
<qemu:arg value='tcp:2222::22'/>
</qemu:commandline>
#
# Custom loader::
#
<os>
<loader readonly='yes' type='pflash'>/path_to/OVMF_CODE-pure-efi.fd</loader>
<nvram>/path_to/fedora22_VARS.fd</nvram>
</os>
#
# Network
#
<interface type="network">
<source network="default"/>
</interface>
Virt-viewer¶
# connect via VNC
virt-viewer --connect qemu+ssh://<user>@<host>/system <domain>
Virsh CMD¶
Snapshots:
# get list of snapshot
virsh snapshot-list <domain>
# get snapshot info
virsh snapshot-info --domain <domain> --snapshotname <snapshot>
# create snapshot
virsh snapshot-create-as <domain> --name <snap_name> --description <snap_description>
# delete snapshot
virsh snapshot-delete --domain <domain> --snapshotname <snap_name>
# revert to snapshot
virsh snapshot-revert <domain> --snapshotname <snap_name>
Domains management:
# define domain from XML (without run)
virsh define <file.xml>
# undefine domain from XML
virsh undefine <domain>
virsh undefine --nvram <domain> # also remove nvram
virsh undefine --remove-all-storage <domain> # also remove storages
# show domains list
virsh list # run domains
virsh list --all # all domains
# generate xml from domain
virsh dumpxml <domain> > <domain>.xml
# create domain and start VM
virsh create <config.xml>
# forcefully shutdown VM
virsh destroy alice
# shutdown VM
virsh shutdown <domain>
# suspend/resume VM
virsh suspend alice
virsh resume alice
# add domain to autostart on host run
virsh autostart <domain>
# get domain info
virsh dominfo <domain>
# edit domain xml
virsh edit <domain>
# get VNC port of domain
virsh vncdisplay <domain>
Pool management:
# show pools (storages) list
virsh pool-list # active polls
virsh pool-list --all # all pools
virsh pool-define-as <name_of_storage> dir --target /etc/libvirt/images/ # create pool
virsh pool-autostart <name_of_storage> # add pool to autostart
virsh pool-start <name_of_storage> # start pool
virsh pool-destroy <pool>
virsh pool-undefine <pool>
Clonning:
virt-clone -o <from_domain> -n <to_domain> --auto-clone --original-xml <from_domain_xml>
Network:
# show all networks
virsh net-list
# get network info
virsh net-info <network>
# print lease info for a given network
net-dhcp-leases <network>
# print networks of domain (MAC, type, etc.)
virsh domiflist <domain>
Bridge configuration¶
sudo apt-get update
sudo apt-get dist-upgrade
# install drivers
sudo apt-get install firmware-realtek firmware-linux
sudo apt-get install bridge-utils
nano /etc/sysctl.conf
net.ipv4.ip_forward=1
Create bridge::
sudo brctl addbr br0
Network configuration /etc/network/interfaces
:
auto lo
iface lo inet loopback
auto eth1
iface eth1 inet manual
auto br0
iface br0 inet static
address <host_ip>
netmask <mask>
gateway <ip>
dns-nameservers <ip1> <ip2>
bridge_ports eth1
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Restart and check network configuration:
sudo /etc/init.d/networking restart
ifconfig
Show bridges:
brctl show
Virt-manager¶
Install latest version:
sudo wget -q -O - http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add -
sudo sh -c 'echo "deb http://archive.getdeb.net/ubuntu wily-getdeb apps" >> /etc/apt/sources.list.d/getdeb.list'
sudo apt-get update && sudo apt-get dist-upgrade
apt-get install virt-manager
# config file virt-manager
~/.gconf/apps/virt-manager/
Install latest version from GIT (prefer mode) [Ubuntu 16.04 - OK]:
git clone https://github.com/virt-manager/virt-manager.git
cd virt-manager/
sudo apt-get install -y gobject-introspection gir1.2-libosinfo-1.0 intltool-debian intltool
sudo python setup.py install -v