=====KVM=====
====Install====
apt-get install qemu-kvm virtinst virt-manager bridge-utils libosinfo-bin
apt install -y qemu qemu-kvm libvirt-daemon libvirt-clients bridge-utils virt-manager #ubuntu 20.04
sudo adduser $USER kvm
#apt-get install qemu-kvm libvirt-bin virtinst bridge-utils cpu-checker
sudo kvm-ok #check
systemctl status libvirtd.service
https://github.com/LuyaoHuang/virsh-bash-completion #bash completion
====Network====
Set your network devices on OS level such as (example with 2 network interfaces "enp4s0" and "eno1" which is bridge slave interface for bridge "vmbr0"):
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
enp4s0:
dhcp4: no
dhcp6: no
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
mtu: 1500
nameservers:
addresses: [192.168.1.1]
search: [local]
eno1:
dhcp4: no
dhcp6: no
bridges:
vmbr0:
dhcp4: no
dhcp6: no
interfaces: [eno1]
addresses: [10.0.0.100/24]
gateway4: 10.0.0.1
mtu: 1500
#nameservers:
# addresses: [8.8.8.8,8.8.4.4]
#parameters:
# stp: true
# forward-delay: 4
====Commands====
virsh list #show running vm´s
virsh list --all #show all vm´s
virsh undefine vm1
virsh destroy vm1 #forcefully and immediately stop a given domain - the vm won´t be destoyed, just stopped.
virsh start vm-name
virsh autostart test #
virsh reboot vm-name
virsh shutdown vm-name
virsh suspend vm-name
virsh resume vm-name
virsh domrename foo bar #rename vm from foo to bar
virsh autostart vm-name
virsh autostart --disable vm-name
virsh domrename $OLD_NAME $NEW_NAME
virsh domrename --domain oldname newname #rename domain/ vm
virsh edit vm-name #edit vm properties
osinfo-query os #list available os when specify os by "--os-variant" - package "libosinfo-bin" is required!
virsh net-list #list running network configs
virsh net-list --all #list all network configs
virsh dumpxml vm-name #xml-config to stdout
virsh dumpxml master > master.xml #backup vm
virsh define master.xml #restore vm
virt-manager #gui to show, manage and create vm´s
====snapshot====
virsh snapshot-list vm-name #list all snaps
virsh snapshot-list vm-name--tree
virsh snapshot-create-as vm-name
virsh snapshot-create-as --domain vm-name --name snap-name
virsh snapshot-create-as vm-name
virsh snapshot-create-as vm-name "snap1" --diskspec sda,file=/var/backups/snapshots/snap1-vm-name.qcow2 --disk-only --atomic
virsh snapshot-info --domain vm-name --snapshotname snap-name
virsh snapshot-revert --current vm-name
virsh snapshot-delete --current vm-name
virsh snapshot-delete --domain vm-name --snapshotname snap-name
virsh snapshot-create-as --disk-only vm-name
virsh snapshot-edit --rename --domain vm-name --snapshotname snap-name #rename
virsh snapshot-delete --current --metadata vm-name #delete "disk-snapshot"
qemu-img info --backing-chain test.qcow2
qemu-img info test.qcow2
qemu-img convert -O output_format source destination
virsh domblklist vm-name
virsh blockcommit vm-name sda --active --verbose --pivot
===Change Path Of "backing file"===
#!/bin/bash
BACKINGFILE="/kvm/images/master.qcow2"
QCOW2_FILE_TO_CHANGE="master.1586464836"
sudo qemu-img rebase \
-f qcow2 \
-u \
-b $BACKINGFILE \
$QCOW2_FILE_TO_CHANGE
Other:
sudo qemu-img rebase \
-f qcow2 \
-b $NEW_BACKING_FILE \
$QCOW2_FILE_TO_CHANGE
===Merge snapshot and backing file into standalone disk===
cp test1-base new-master #test1-base = base-disk
qemu-img rebase -b new-master test1-master-0 #snapshot="test1-master-0"
qemu-img commit test1-master-0
qemu-img commit new-master #output if success: "Image committed"
Image committed.
qemu-img info new-master
===Backup===
virsh blockcopy --domain kmaster sda \
/data/images/backup/copy.qcow2 \
--wait --verbose --shallow \
--pivot
====Pool====
virsh pool-list --all #show also inactice pool
virsh pool-list #show active storage pool
virsh pool-list --details #show details like disk usage
virsh pool-info poolname #detailed pool info
virsh pool-autostart poolame
virsh pool-start poolname
virsh pool-undefine poolname #delete pool "default"
virsh pool-destroy poolname #set inactive
virsh pool-edit poolname
virsh pool-define-as --name default --type dir --target /media/work/kvm
virsh pool-refresh --pool default
virsh pool-refresh --pool kvm-vm
====Volume====
virsh vol-list default
virsh vol-list default --details
virsh vol-list kvm-vm --details
virsh vol-delete volume-name.qcow2 --pool default
virsh vol-create-as default test_vol2.qcow2 2G
virsh vol-clone --pool default vol1.qcow2 vol2.qcow2
qemu-img resize volume-name.qcow2 30G && virsh pool-refresh --pool poolname0 #vm has to be shutdown!
Pool refesh an volume list:
#!/bin/bash
virsh pool-refresh --pool poolname0
virsh pool-refresh --pool poolname1
virsh vol-list poolname0 --details
virsh vol-list poolname1 --details
====clone domain/ vm====
Simple Guest Clone
#!/bin/bash
#author: Thomas Roehm
#version: 1.0
echo ""
echo "Overview VM´s:"
echo ""
virsh list --all
echo ""
read -p "Please enter the name of the vm you want to clone: " SOURCEVM
echo ""
read -p "Please enter the name of the cloned vm: " DESTVM
echo ""
virt-clone \
--original $SOURCEVM \
--auto-clone \
--name $DESTVM
STATUS=$(echo $?)
echo ""
if [ $STATUS -eq 0 ]
then
echo "VM \"$DESTVM\" cloned."
else
echo "Problem - VM not cloned!"
fi
====Log====
journalctl -a -b -k -u libvirtd.service
systemctl status libvirtd.service
====Link====
https://computingforgeeks.com/virsh-commands-cheatsheet/