QEMU – jak działa emulator i hypervisor maszyn wirtualnych
QEMU (Quick Emulator) to jeden z najważniejszych projektów w świecie wirtualizacji Linux. Potrafi emulować sprzęt, ale w połączeniu z KVM może również uruchamiać maszyny wirtualne z wykorzystaniem sprzętowej wirtualizacji CPU.
Najważniejsze rozróżnienie:
QEMU
→ emulacja urządzeń + model całej maszyny
KVM
→ sprzętowa akceleracja CPU
Dlatego często spotykamy:
QEMU + KVM
Czym jest QEMU?
QEMU może działać na dwa podstawowe sposoby.
Emulacja
Guest CPU
|
v
QEMU
|
v
Physical CPU
QEMU tłumaczy instrukcje jednego procesora na instrukcje procesora hosta.
To pozwala uruchomić np. system ARM na komputerze x86.
Wirtualizacja
Guest OS
|
v
QEMU
|
v
KVM
|
v
Physical CPU
Tutaj większość kodu CPU gościa wykonywana jest bezpośrednio przez fizyczny procesor.
QEMU vs KVM
To często powoduje zamieszanie.
| Element | QEMU | KVM |
|---|---|---|
| Emulacja urządzeń | ✅ | ❌ |
| Emulacja CPU | ✅ | ❌ |
| Sprzętowa wirtualizacja CPU | współpracuje | ✅ |
| Wirtualne dyski | ✅ | ❌ |
| vNIC | ✅ | ❌ |
| VM management | częściowo | ❌ |
| Linux kernel | niezbędny | część rozwiązania |
Najprościej:
QEMU = wirtualny komputer
KVM = akcelerator CPU
Architektura QEMU + KVM
Physical Server
|
v
Linux Kernel
|
+--------+--------+
| |
KVM QEMU
| |
| +--------+--------+
| | | |
| Disk NIC BIOS
| | | |
+--------+--------+--------+
|
v
Virtual Machine
Uruchomienie pierwszej VM
Przykładowo:
qemu-system-x86_64 \
-enable-kvm \
-m 4096 \
-smp 2 \
-drive file=ubuntu.qcow2,format=qcow2
Najważniejsze parametry:
-enable-kvm
→ użyj KVM
-m 4096
→ 4 GB RAM
-smp 2
→ 2 vCPU
-drive
→ wirtualny dysk
Co QEMU emuluje?
QEMU może stworzyć praktycznie kompletny komputer:
Virtual Machine
|
+-- CPU
|
+-- RAM
|
+-- BIOS/UEFI
|
+-- Disk
|
+-- Network Card
|
+-- USB
|
+-- PCI
|
+-- Serial
|
+-- GPU
|
+-- RNG
Guest OS widzi to jak prawdziwy sprzęt.
BIOS i UEFI
QEMU może uruchamiać VM z:
BIOS
lub:
UEFI
W nowoczesnych systemach często wykorzystywany jest:
OVMF
czyli firmware UEFI dla maszyn wirtualnych.
Schemat:
VM
|
v
UEFI
|
v
Bootloader
|
v
Operating System
Wirtualny dysk
QEMU obsługuje wiele formatów.
Najpopularniejsze:
qcow2
raw
vmdk
vdi
Przykład:
qemu-img create \
-f qcow2 \
ubuntu.qcow2 \
40G
Powstanie wirtualny dysk o deklarowanym rozmiarze 40 GB.
qemu-img
To bardzo ważne narzędzie QEMU.
Możemy:
qemu-img info ubuntu.qcow2
sprawdzić informacje o obrazie.
Konwersja:
qemu-img convert \
-f qcow2 \
-O raw \
ubuntu.qcow2 \
ubuntu.raw
QCOW2
qcow2 oznacza:
QEMU Copy-On-Write version 2
Jego zalety obejmują m.in.:
- snapshoty,
- thin provisioning,
- copy-on-write,
- kompresję,
- szyfrowanie obrazu w określonych zastosowaniach.
Schemat:
Base Image
|
+---- Changes
|
+---- Changes
Snapshoty
Można stworzyć punkt kontrolny:
VM
|
v
Snapshot
|
+-- Current State
Potem można wrócić do wcześniejszego stanu.
Trzeba jednak uważać: snapshot nie jest zamiennikiem backupu.
Wirtualna karta sieciowa
QEMU może stworzyć:
Guest
|
v
virtio-net
|
v
QEMU
|
v
Linux Network
Najczęściej w nowoczesnych VM warto korzystać z:
virtio-net
zamiast cięższej emulacji starego sprzętu.
QEMU networking
Możliwe są różne modele:
User Networking
|
v
NAT
albo:
VM
|
v
tap
|
v
Linux Bridge
|
v
Physical NIC
Przykład:
VM1 ----+
|
VM2 ----+---- br0 ---- Physical NIC
|
VM3 ----+
Virtio
Virtio jest jednym z kluczowych elementów wydajnej wirtualizacji.
Zamiast emulować starą kartę:
VM
|
v
Emulated Intel NIC
|
v
QEMU
możemy:
VM
|
v
virtio-net
|
v
Host
Podobnie działa:
virtio-blk
virtio-scsi
virtio-fs
virtio-rng
QEMU i GPU
QEMU może emulować wirtualną kartę graficzną.
Ale przy wymagających zastosowaniach można użyć:
PCI Passthrough
Schemat:
Physical GPU
|
v
IOMMU
|
v
VFIO
|
v
QEMU
|
v
VM
Dzięki temu VM może korzystać z fizycznego GPU.

VFIO
VFIO pozwala bezpiecznie przekazywać urządzenia PCI do VM.
Przykład:
GPU
|
v
VFIO
|
v
QEMU
|
v
Windows VM
To popularne rozwiązanie przy:
- GPU passthrough,
- AI,
- machine learning,
- workstation VM,
- wymagających aplikacjach graficznych.
QEMU i CPU
Bez KVM:
Guest Instructions
|
v
QEMU Translation
|
v
Host CPU
Z KVM:
Guest Instructions
|
v
KVM
|
v
Physical CPU
Dlatego:
QEMU emulation
może być znacznie wolniejsza niż:
QEMU + KVM
TCG – Tiny Code Generator
Gdy KVM nie jest dostępne, QEMU może wykorzystać TCG.
TCG
Guest CPU
|
v
Translation
|
v
Host CPU
Pozwala to emulować inną architekturę.
Przykład:
x86 Host
|
v
QEMU TCG
|
v
ARM Guest
To ogromna zaleta QEMU.
Emulacja różnych architektur
QEMU potrafi uruchamiać między innymi:
x86
x86-64
ARM
AArch64
RISC-V
PowerPC
MIPS
SPARC
Przykład:
Intel x86-64
|
v
QEMU
|
v
ARM64 Linux
Nie wymaga to fizycznego procesora ARM, choć wydajność będzie niższa niż natywna.
QEMU i kontenery
QEMU może być również wykorzystywane do uruchamiania systemów o innych architekturach w środowiskach developerskich.
Przykład:
x86 Developer PC
|
v
QEMU
|
v
ARM64 Environment
|
v
Container
To przydatne podczas budowania obrazów dla:
linux/amd64
linux/arm64
QEMU i Docker Buildx
Przykładowy workflow:
Developer
|
v
Docker Buildx
|
+---- amd64
|
+---- arm64
|
v
QEMU
Dzięki emulacji można budować obrazy dla innej architektury niż ta, na której działa host.
QEMU Machine Types
QEMU pozwala określić model maszyny.
Przykładowo:
qemu-system-x86_64 \
-machine q35 \
...
q35 emuluje nowocześniejszą platformę chipsetu niż starsze modele i jest często używany w nowych VM.
QEMU i libvirt
Ręczne uruchamianie QEMU jest bardzo elastyczne, ale konfiguracja dużej liczby VM może być niewygodna.
Dlatego często używa się:
libvirt
Schemat:
Administrator
|
v
libvirt
|
v
QEMU
|
v
KVM
|
v
Hardware
Narzędzia:
virsh
virt-install
virt-manager
QEMU i Proxmox
Proxmox wykorzystuje QEMU/KVM do obsługi maszyn wirtualnych.
Schemat:
Proxmox VE
|
v
QEMU
|
v
KVM
|
v
Hardware
Administrator nie musi więc ręcznie tworzyć skomplikowanych poleceń QEMU.
QEMU a bezpieczeństwo
QEMU jest bardzo ważną granicą bezpieczeństwa.
Guest
|
v
QEMU
|
v
Host
Jeżeli pojawi się błąd w emulowanym urządzeniu:
Guest
|
v
QEMU Vulnerability
|
v
Potential VM Escape
|
v
Host
Dlatego należy regularnie aktualizować:
QEMU
Linux Kernel
libvirt
Firmware
Guest OS
QEMU Sandbox
W środowiskach o podwyższonych wymaganiach bezpieczeństwa można dodatkowo ograniczać możliwości procesu QEMU.
Przydatne mechanizmy hosta obejmują:
SELinux
AppArmor
seccomp
cgroups
namespaces
Schemat:
VM
|
v
QEMU
|
+-- seccomp
+-- AppArmor / SELinux
+-- cgroups
|
v
Host
QEMU a KVM – pełny obraz
PHYSICAL HARDWARE
|
v
Linux Kernel
|
+--------+--------+
| |
KVM QEMU
| |
| +---------+---------+
| | | |
| Disk NIC Firmware
| | | |
+-------+---------+---------+
|
v
Virtual Machine
|
+-----+-----+
| |
vCPU vRAM
|
v
Guest OS
QEMU vs KVM – najprościej
Zapamiętaj:
QEMU
→ tworzy wirtualny komputer
KVM
→ pozwala temu komputerowi korzystać
ze sprzętowej wirtualizacji CPU
Dlatego typowy Linux hypervisor wygląda tak:
Linux
|
+-- KVM
|
+-- QEMU
|
+-- libvirt
A kompletna infrastruktura może wyglądać:
Proxmox / OpenStack
|
libvirt
|
QEMU
|
KVM
|
Hardware
QEMU jest więc czymś więcej niż „emulatorem”. W połączeniu z KVM tworzy pełną platformę wirtualizacji, w której QEMU dostarcza model sprzętu i obsługę urządzeń, a KVM zapewnia wydajne wykonywanie kodu CPU gościa na fizycznym procesorze.






