Hướng dẫn cấu hình KVM/QEMU trên Fedora Workstation với Virt-manager: Tạo, quản lý và tối ưu máy ảo Linux và Windows

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

Chạy máy ảo trên Linux mà vẫn dùng VirtualBox hay VMware thì hơi lãng phí. Fedora Workstation có KVM tích hợp sẵn trong kernel — hiệu năng gần như native, shared clipboard và file transfer qua SPICE protocol, không cần license. Vấn đề là setup lần đầu dễ rối nếu không biết các thành phần liên quan với nhau như thế nào.

Mình dùng Fedora làm máy development chính đã 2 năm. Fedora 40 ship QEMU 8.2 ngay từ ngày đầu release — các distro conservative hơn thường đi sau vài tháng. Bài này ghi lại cách mình setup và tối ưu VM, bao gồm cả máy ảo Linux lẫn Windows 11.

KVM, QEMU, libvirt và Virt-manager — Hiểu đúng trước khi làm

Nhiều người nhầm lẫn các khái niệm này. Thực ra chúng là 4 lớp riêng biệt:

  • KVM (Kernel-based Virtual Machine): Module kernel Linux, biến CPU thành hypervisor type-1. Yêu cầu CPU hỗ trợ virtualization (Intel VT-x hoặc AMD-V).
  • QEMU: Emulator phần cứng — giả lập CPU, RAM, disk, NIC, USB… KVM tăng tốc QEMU bằng hardware acceleration.
  • libvirt: Daemon quản lý VM, expose API thống nhất. Virt-manager và virsh đều nói chuyện với libvirt.
  • Virt-manager: GUI frontend cho libvirt — dễ dùng, đủ tính năng cho daily use.

Stack hoàn chỉnh: Virt-manager → libvirt (libvirtd) → QEMU → KVM → CPU hardware

Kiểm tra và cài đặt

Bước 1: Kiểm tra CPU có hỗ trợ virtualization không

egrep -c '(vmx|svm)' /proc/cpuinfo

Kết quả > 0 là OK. vmx là Intel VT-x, svm là AMD-V. Ra 0 thì vào BIOS bật virtualization trước.

Kiểm tra kỹ hơn với:

virt-host-validate

Lệnh này check KVM, IOMMU, và các điều kiện cần thiết khác. Cài gói virt-manager trước nếu chưa có lệnh này.

Bước 2: Cài đặt các gói cần thiết

sudo dnf install -y @virtualization

Group package @virtualization kéo về đủ thứ: virt-manager, libvirt, qemu-kvm, bridge-utils, và các công cụ liên quan. Tiết kiệm hơn nhiều so với cài từng gói một.

Muốn thêm công cụ CLI để tạo và kết nối VM từ terminal:

sudo dnf install -y virt-install virt-viewer

Bước 3: Khởi động và enable libvirtd

sudo systemctl enable --now libvirtd
sudo systemctl status libvirtd

Bước 4: Thêm user vào group libvirt

Hay bị bỏ qua nhất — và cũng gây lỗi permission khó chịu nhất khi mở Virt-manager:

sudo usermod -aG libvirt,kvm $(whoami)

Sau đó logout và login lại để group có hiệu lực. Kiểm tra:

groups | grep libvirt

Tạo máy ảo Linux với Virt-manager

Tạo VM qua GUI

Mở Virt-manager, click File → New Virtual Machine. Chọn Local install media (ISO image or CDROM).

  1. Browse đến file ISO (ví dụ Ubuntu 24.04 hay Debian 12)
  2. Virt-manager tự detect OS — nếu không detect được, chọn thủ công từ dropdown
  3. Cấp RAM và CPU — 4GB RAM + 2 vCPU là tối thiểu, 8GB sẽ thoải mái hơn cho development
  4. Tạo disk image — chọn Create a disk image for the virtual machine, size 30–50GB
  5. Review network — mặc định NAT (default) là ổn cho VM cần internet

Tick Customize configuration before install để điều chỉnh thêm trước khi boot.

Tạo VM nhanh hơn bằng CLI

virt-install \
  --name ubuntu24 \
  --memory 4096 \
  --vcpus 2 \
  --disk size=40 \
  --cdrom /path/to/ubuntu-24.04.iso \
  --os-variant ubuntu24.04 \
  --network default \
  --graphics spice \
  --video qxl

Liệt kê các os-variant có sẵn để điền đúng:

osinfo-query os | grep ubuntu

Cài đặt máy ảo Windows 11

Windows cần thêm một bước so với Linux: cài VirtIO drivers để nhận diện được disk và NIC ảo của QEMU. Không cài drivers này, Windows installer sẽ không thấy ổ đĩa — cài xong mới phát hiện thì đã mất công rồi.

Tải VirtIO drivers ISO

wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso

Tạo Windows VM với cấu hình đúng

virt-install \
  --name windows11 \
  --memory 8192 \
  --vcpus 4 \
  --disk size=80,bus=virtio \
  --cdrom /path/to/Win11.iso \
  --disk /path/to/virtio-win.iso,device=cdrom \
  --os-variant win11 \
  --network default,model=virtio \
  --graphics spice \
  --video qxl \
  --tpm emulator,model=tpm-crb,version=2.0

Option --tpm quan trọng với Windows 11 — yêu cầu TPM 2.0. QEMU emulate TPM qua swtpm:

sudo dnf install -y swtpm swtpm-tools

Trong quá trình cài Windows, khi installer hỏi ổ đĩa mà không thấy gì: click Load driver → Browse đến CDROM virtio-win → chọn thư mục viostor/w11/amd64 → OK. Sau đó disk sẽ hiện ra.

Tối ưu hiệu năng VM

Dùng virtio cho disk và network

Mặc định Virt-manager đôi khi dùng emulation cũ (IDE, e1000). Kiểm tra và đổi sang virtio trong phần VM Details:

  • Disk: Đảm bảo bus là virtio, không phải IDE hay SATA
  • NIC: Đổi model từ e1000e sang virtio

Chênh lệch khá rõ: sequential read với virtio đạt ~1.2 GB/s bên trong VM, IDE emulation chỉ khoảng 300–400 MB/s. Đủ để cảm nhận được khi compile project lớn hay chạy database.

Với Linux VM, virtio drivers có sẵn trong kernel — không cần cài thêm. Với Windows, cài từ ISO virtio-win đã tải ở trên.

CPU pinning cho workload nặng

Chạy VM để compile code hay render thì CPU pinning đáng thử — host OS và VM tranh nhau cùng core sẽ sinh latency spike không đều, pinning giải quyết chuyện đó:

# Xem topology CPU của host
lscpu -e

# Pin VM vào core 2-5 (tránh core 0-1 cho host OS)
virsh vcpupin windows11 0 2
virsh vcpupin windows11 1 3
virsh vcpupin windows11 2 4
virsh vcpupin windows11 3 5

Snapshot nhanh với virsh

# Tạo snapshot trước khi thử nghiệm
virsh snapshot-create-as ubuntu24 snap-before-upgrade "Before kernel upgrade"

# Liệt kê snapshots
virsh snapshot-list ubuntu24

# Rollback về snapshot
virsh snapshot-revert ubuntu24 snap-before-upgrade

Tạo snapshot xong trong 2–3 giây, rollback cũng vậy. Mình tạo một cái trước mỗi lần thử nghiệm nguy hiểm trên VM — cài lại từ đầu mất cả tiếng, không đáng.

Quản lý VM qua CLI khi không có GUI

# Liệt kê tất cả VM
virsh list --all

# Bật/tắt VM
virsh start ubuntu24
virsh shutdown ubuntu24
virsh destroy ubuntu24  # Force off như rút nguồn

# Kết nối console (cho server VM không có GUI)
virsh console ubuntu24

Xử lý lỗi thường gặp

Lỗi “cannot access storage file” khi mở VM

Nguyên nhân hay gặp nhất là permission trên thư mục chứa disk image. libvirt chạy với user qemu, nên thư mục phải accessible:

sudo chown -R qemu:qemu /var/lib/libvirt/images/
sudo chmod 755 /var/lib/libvirt/images/

Disk image để ở thư mục custom như /home/user/vms/? Phải thêm SELinux context — đây là lỗi phổ biến trên Fedora vì SELinux bật mặc định:

sudo semanage fcontext -a -t virt_image_t "/home/user/vms(/.*)?" 
sudo restorecon -Rv /home/user/vms/

Network VM không lên internet

# Kiểm tra network default đang chạy chưa
virsh net-list --all

# Nếu "default" network inactive
virsh net-start default
virsh net-autostart default

Kết luận

Sau 2 năm dùng hàng ngày, KVM/QEMU trên Fedora chưa bao giờ làm mình thất vọng. VM Linux test script chạy mượt, VM Windows dùng phần mềm đặc thù cũng ổn — disk I/O với virtio nhanh hơn VirtualBox rõ rệt, CPU overhead gần như không cảm nhận được với workload thông thường.

Ba thứ dễ bỏ sót nhất: quên thêm user vào group libvirt, không cài VirtIO drivers trước khi cài Windows, và quên start libvirtd. Vấp phải một trong ba là mất thêm 30 phút debug không cần thiết. Còn lại Virt-manager xử lý khá trực quan — workload nặng hơn như CI/CD hay lab network thì tìm hiểu thêm network bridge và storage pool.

Share: