QEMU
QEMU (Quick Emulator) adalah emulator dan virtualizer open-source yang mampu menjalankan sistem operasi dan program untuk berbagai arsitektur. QEMU dapat berjalan dalam dua mode:
| Mode | Keterangan |
|---|---|
| Full system | Emulasi sistem penuh termasuk CPU, memori, dan perangkat keras |
| User mode | Menjalankan binary arsitektur lain langsung di atas kernel host |
Dikombinasikan dengan KVM, QEMU dapat menjalankan VM dengan performa mendekati native. Lihat dokumentasi KVM untuk penggunaan bersama KVM.
Instalasi
sudo xbps-install -S qemu
Paket qemu menyertakan emulator untuk semua arsitektur yang didukung:
| Binary | Arsitektur |
|---|---|
qemu-system-x86_64 | x86 64-bit |
qemu-system-i386 | x86 32-bit |
qemu-system-aarch64 | ARM 64-bit (aarch64) |
qemu-system-arm | ARM 32-bit |
qemu-system-riscv64 | RISC-V 64-bit |
qemu-system-ppc64 | PowerPC 64-bit |
qemu-system-mips | MIPS |
Manajemen Disk Image
Membuat Disk Image
# Format qcow2 (disarankan — mendukung snapshot dan kompresi)
qemu-img create -f qcow2 disk.qcow2 20G
# Format raw (performa lebih tinggi, ukuran tetap)
qemu-img create -f raw disk.raw 20G
Melihat Info Disk Image
qemu-img info disk.qcow2
Mengubah Ukuran Disk Image
qemu-img resize disk.qcow2 +10G # Tambah 10GB
qemu-img resize disk.qcow2 30G # Set ke ukuran tertentu
Konversi Format Disk
# raw → qcow2
qemu-img convert -f raw -O qcow2 disk.raw disk.qcow2
# vmdk → qcow2 (dari VMware)
qemu-img convert -f vmdk -O qcow2 disk.vmdk disk.qcow2
Membuat Snapshot
# Buat snapshot
qemu-img snapshot -c nama_snapshot disk.qcow2
# Lihat daftar snapshot
qemu-img snapshot -l disk.qcow2
# Restore snapshot
qemu-img snapshot -a nama_snapshot disk.qcow2
# Hapus snapshot
qemu-img snapshot -d nama_snapshot disk.qcow2
Menjalankan VM
Perintah Dasar
qemu-system-x86_64 \
-enable-kvm \
-m 2G \
-smp 2 \
-drive file=disk.qcow2,format=qcow2 \
-cdrom installer.iso \
-boot d
Opsi Umum
| Opsi | Keterangan |
|---|---|
-enable-kvm | Aktifkan akselerasi KVM |
-m <size> | RAM yang dialokasikan (contoh: 2G, 512M) |
-smp <n> | Jumlah CPU virtual |
-cpu host | Gunakan CPU host langsung (performa terbaik) |
-drive file=<path> | Disk image VM |
-cdrom <path> | File ISO |
-boot <target> | Urutan boot: c = disk, d = CD, n = network |
-name <nama> | Nama VM (tampil di title bar) |
-snapshot | Jalankan tanpa menyimpan perubahan ke disk |
-nographic | Mode tanpa tampilan grafis (serial console) |
-daemonize | Jalankan QEMU di background |
Konfigurasi Display
SDL (Default)
-display sdl
GTK
-display gtk
VNC
-display vnc=:0 # Akses via VNC di port 5900
-display vnc=:1 # Port 5901
Koneksi dari host lain:
vncviewer localhost:5900
SPICE (Disarankan untuk Desktop VM)
-spice port=5930,disable-ticketing=on \
-device virtio-serial \
-chardev spicevmc,id=vdagent,debug=0,name=vdagent \
-device virtserialport,chardev=vdagent,name=com.redhat.spice.0
Koneksi:
remote-viewer spice://localhost:5930
Headless
-nographic
-serial mon:stdio
Konfigurasi Jaringan
User Networking (NAT) — Default
Paling mudah, tidak perlu konfigurasi tambahan. VM bisa akses internet tapi tidak bisa diakses dari luar:
-net nic -net user
Port forwarding dari host ke VM:
-net nic -net user,hostfwd=tcp::2222-:22 # SSH ke VM via port 2222
-net nic -net user,hostfwd=tcp::8080-:80 # HTTP ke VM via port 8080
TAP Networking (Bridge)
VM dapat diakses di jaringan lokal seperti perangkat fisik. Buat bridge terlebih dahulu (lihat dokumentasi KVM):
-netdev tap,id=net0,ifname=tap0,script=no,downscript=no \
-device virtio-net-pci,netdev=net0
Virtio (Performa Terbaik)
-device virtio-net-pci,netdev=net0 \
-netdev user,id=net0
Akselerasi dan Performa
CPU
-cpu host # Gunakan CPU host secara langsung
-cpu host,+vmx # Tambahkan fitur nested virtualization
-smp 4,sockets=1,cores=4 # 4 core dalam 1 socket
Memori
-m 4G # RAM statis 4GB
-m 2G,slots=2,maxmem=8G # RAM awal 2GB, bisa di-hotplug hingga 8GB
Disk (VirtIO — Performa Terbaik)
-drive file=disk.qcow2,format=qcow2,if=virtio
Disk (Cache)
-drive file=disk.qcow2,format=qcow2,cache=writeback # Performa baik
-drive file=disk.qcow2,format=qcow2,cache=none # Aman untuk data kritis
Emulasi Arsitektur Lain
Jalankan Binary ARM di x86_64 (User Mode)
sudo xbps-install -S qemu-user-aarch64 qemu-user-arm
qemu-aarch64 /path/ke/binary-arm64
qemu-arm /path/ke/binary-arm32
VM ARM64 di x86_64 (Full System)
qemu-system-aarch64 \
-machine virt \
-cpu cortex-a57 \
-m 2G \
-drive file=disk.qcow2,format=qcow2 \
-drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2-ovmf/aarch64/QEMU_EFI.fd
UEFI untuk VM
# Salin VARS per VM
cp /usr/share/edk2-ovmf/x64/OVMF_VARS.fd ./OVMF_VARS.fd
# Jalankan dengan UEFI
qemu-system-x86_64 \
-enable-kvm \
-m 4G \
-drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2-ovmf/x64/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=./OVMF_VARS.fd \
-drive file=disk.qcow2,format=qcow2
Monitor QEMU
Saat VM berjalan, akses QEMU monitor dengan Ctrl+Alt+2, kembali ke VM dengan Ctrl+Alt+1.
Perintah umum di monitor:
info status # Status VM
info block # Info disk
savevm <nama> # Simpan state VM (live snapshot)
loadvm <nama> # Load state VM
system_powerdown # Kirim sinyal shutdown ke VM
quit # Matikan QEMU
Monitor juga bisa diakses via socket:
-monitor unix:/tmp/qemu-monitor.sock,server,nowait
# Koneksi ke monitor
socat - unix-connect:/tmp/qemu-monitor.sock
Contoh Lengkap
VM Desktop Linux
qemu-system-x86_64 \
-enable-kvm \
-name "T4n-VM" \
-m 4G \
-smp 4 \
-cpu host \
-drive file=disk.qcow2,format=qcow2,if=virtio,cache=writeback \
-cdrom installer.iso \
-boot order=dc \
-display gtk \
-device virtio-net-pci,netdev=net0 \
-netdev user,id=net0,hostfwd=tcp::2222-:22 \
-device virtio-balloon \
-usb -device usb-tablet
VM Server Headless
qemu-system-x86_64 \
-enable-kvm \
-name "server-vm" \
-m 2G \
-smp 2 \
-cpu host \
-drive file=server.qcow2,format=qcow2,if=virtio \
-nographic \
-serial mon:stdio \
-device virtio-net-pci,netdev=net0 \
-netdev user,id=net0,hostfwd=tcp::2222-:22 \
-daemonize
Troubleshooting
Layar Hitam saat Boot
Tambahkan -vga virtio atau -vga std dan pastikan driver guest sudah terinstal.
Keyboard/Mouse Tidak Responsif
Gunakan tablet USB untuk menghindari masalah mouse capture:
-usb -device usb-tablet
Performa Lambat
- Pastikan
-enable-kvmdigunakan. - Gunakan
-cpu hostbukan-cpu qemu64. - Gunakan driver
virtiountuk disk dan jaringan. - Pastikan user tergabung di grup
kvm.
Jaringan VM Tidak Bisa Akses Internet
Cek apakah IP forwarding aktif di host:
cat /proc/sys/net/ipv4/ip_forward
# Harus bernilai 1
# Aktifkan jika belum
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward