QEMU
Virtualization with KVM ( Kernel-based Virtual Machine ) + QEMU. It requires that the CPU on your computer has a feature Intel VT or AMD-V.
Install
# KVM and qemu
apt update
apt -y install qemu-kvm libvirt-clients libvirt-daemon-system virtinst bridge-utils
apt -y install qemu-utils qemu-system-x86 qemu-system-gui
# KVM - the --no-install-recommends apt option prevent installation of extraneous graphical packages:
apt -y install --no-install-recommends qemu-system libvirt-clients libvirt-daemon-system virtinst
# setup libvirtd
systemctl start libvirtd
systemctl enable libvirtd
# Add user to group
adduser youruser libvirt
usermod -a -G libvirt youruser
usermod -a -G kvm youruser
usermod -a -G libvirt-qemu rep
# Creating a new guest
wget https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/debian-testing-amd64-netinst.iso
virt-install --virt-type kvm --name bookworm-2 \
--cdrom debian-testing-amd64-netinst.iso \
--disk size=10 --memory 1024
# Check CPU flags
egrep -m 1 "svm|vmx" /proc/cpuinfo
svm -> AMD CPU capable of virtualization.
vmx -> Intel CPU capable of virtualization.
# cpu-checker
apt install cpu-checker -y
kvm-ok
# module check
lsmod|grep kvm
# You will need to grant the 'libvirt-qemu' user search permissions for the following directories: ['/root']
getent passwd | cut -d: -f1
# list groups for users
groups libvirt-qemu
# Grant access
chown -R :kvm /home/user/kvm
chmod -R g+rwX /home/user/kvm
chmod -R +x /home/user/kvm
ls -ld /home/user/kvm
Troubleshoot
ERROR Cannot create user runtime directory '/run/user/0/libvirt': Permission denied
# Test
virsh capabilities
# su (from the root account) doesn't set XDG_RUNTIME_DIR
virsh
virsh list
virsh shutdown bookworm
virsh destroy bookworm
virsh undefine bookworm
virsh vol-delete --pool vg0 bookworm.img
Config
vi /etc/libvirt/qemu.conf
Basic
qemu-img create -f qcow2 debian.qcow 2G
wget https://cdimage.debian.org/cdimage/daily-builds/daily/arch-latest/amd64/iso-cd/debian-testing-amd64-netinst.iso
qemu-system-x86_64 -hda debian.img -cdrom debian-testing-amd64-netinst.iso -boot d -m 512
Files
# Check file info
qemu-img info debian.qcow2
Resize
# Info
qemu-img info alp.qcow2
virt-df -a alp.qcow2 -h
# Image
qemu-img resize alp.qcow2 8G
# dummy file
dd if=/dev/urandom of=2Gdummyfile bs=1M count=2048
# Reclaim space
virt-sparsify --in-place alp.qcow2
# 1. Create the new disk
qemu-img create -f qcow2 alp.qcow2 70G
# Resize
virt-resize in.qcow2 out.qcow2
and
apk add e2fsprogs-extra
# Resize the partition
parted alp.qcow2 resizepart 1 100%
# Resize the filesystem
resize2fs /dev/vda1
Show info on vm
qm show 400
Run with qemu-system-x86_64
qemu-system-x86_64 \
-m 2048 \
-smp 2 \
-drive file=debian-11-nocloud-amd64-20240211-1654.qcow2,media=disk,if=virtio \
-nic user,model=virtio \
-nographic
List vms
qm list
qm list | awk '{print $1, $2}'
List running vms using watch
# Create a file
cat >./list_vms.sh<<EOF
#!/bin/bash
qm list | awk '$3 == "running" {print $1, $2}'
EOF
chmod +x ./list_vms.sh
# Time
watch -n 1 ./list_vms.sh 2>/dev/null
# No time
watch --no-title -n 1 ./list_vms.sh
Snapshot
# Snap
qm snapshot <vmid> <snap-name>
qm snapshot 401 ip -d "New iP: 10.10.9.41"
# Delete
qm delsnapshot <vmid> <snap-name>
# Rollback
qm snapshot <vmid> rollback <snapshot_name>
iso from vm
qm extractcd [VMID] [DEVICE] [ISO_FILENAME].iso
vm from iso
qemu-img convert -O raw /var/lib/vz/images/[VMID]/[DISKID].qcow2 [ISO_FILENAME].iso