This episode covers KVM virtualization on Rocky Linux: installing KVM/QEMU and libvirt, provisioning VMs with virt-install, managing with virsh and virt-manager, storage pools and volumes, default versus bridged networking, and snapshots.

In the previous episode 18, you learned to package an OS as an image. Now it's time for the capability that underpins the modern data center: virtualization — running many operating systems on a single physical machine with full isolation. Rocky Linux uses KVM (Kernel-based Virtual Machine) as its hypervisor, with QEMU as the emulator and libvirt as the management layer. KVM exploits CPU virtualization extensions, QEMU provides device emulation, and libvirt supplies the API and tools to manage it all.
dnf5 group install "Virtualization Host"grep -cE 'vmx|svm' /proc/cpuinfoAn output greater than zero means the CPU supports virtualization (Intel VT-x vmx or AMD-V svm). Without this, KVM cannot work.
systemctl enable --now libvirtdvirsh version
virsh list --allusermod -aG libvirt armanvirt-install \
--name rocky10-vm \
--memory 2048 \
--vcpus 2 \
--disk size=20 \
--os-variant rocky10.0 \
--network default \
--cdrom /iso/Rocky-10.2.iso \
--graphics none \
--console pty,target_type=serialvirsh list --allEvery option matters: --memory and --vcpus determine resources, --disk size=20 creates a 20 GB disk (from the storage pool we'll discuss shortly), and --network default connects the VM to libvirt's default network.
virt-install \
--name web01 \
--memory 2048 --vcpus 2 \
--disk size=20 \
--os-variant rocky10.0 \
--network default \
--extra-args "inst.ks=http://192.168.1.10/rocky.ks"virsh start rocky10-vm
virsh shutdown rocky10-vm
virsh destroy rocky10-vm
virsh reboot rocky10-vmvirsh dominfo rocky10-vm
virsh autostart rocky10-vmvirsh destroy force-kills (like pulling the power cord), while shutdown performs a clean shutdown. autostart makes a VM start automatically when the host boots.
dnf5 install virt-managervirt-managerA storage pool is the central location where VM disks (volumes) are stored. Libvirt provides a default pool at /var/lib/libvirt/images:
virsh pool-list
virsh vol-list defaultvirsh pool-define-as vmpool fs - - /data/vms /dev/vgdata
virsh pool-build vmpool
virsh pool-start vmpool
virsh pool-autostart vmpoolvirsh vol-create-as vmpool web02.qcow2 30G --format qcow2Libvirt provides a default network that gives VMs NAT access to the outside network. For direct access to the physical network — the pattern discussed in episode 9 — use bridged networking:
virsh net-list
virsh net-dumpxml defaultvirsh attach-interface --domain rocky10-vm \
--type bridge --source br0 --persistentcat > /tmp/net-isolated.xml <<'EOF'
<network>
<name>isolated</name>
<forward mode='isolated'/>
</network>
EOFvirsh net-define /tmp/net-isolated.xml
virsh net-start isolated
virsh net-autostart isolatedAn isolated network connects VMs to each other but gives no external access — ideal for internal security segments.
virsh snapshot-create-as rocky10-vm clean-installvirsh snapshot-list rocky10-vmvirsh snapshot-revert rocky10-vm clean-installvirsh snapshot-delete rocky10-vm clean-installSuccess
The combination of a managed storage pool, proper bridged networking, and routine snapshots before major changes is an operational pattern that keeps virtualization safe and recoverable.
In this episode 19, you mastered KVM virtualization on Rocky Linux: installing the Virtualization Host group and libvirtd, provisioning VMs with virt-install (including Kickstart integration), managing with virsh and virt-manager, storage pools and qcow2 volumes, default versus bridged and custom networking, and snapshots for quick rollback.
Key takeaways:
vmx/svm) before installing KVM.virt-install and Kickstart makes VM creation fully automated.virsh is the primary control; autostart starts VMs when the host boots.In the next episode 20, we will discuss containerization with Podman, Buildah, and Skopeo — the daemonless container engine, rootless containers, building images with Buildah, inspecting with Skopeo, and systemd integration through Quadlet. Virtualization is mastered; now it's time for the lighter, faster workload format!