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:

ModeKeterangan
Full systemEmulasi sistem penuh termasuk CPU, memori, dan perangkat keras
User modeMenjalankan 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:

BinaryArsitektur
qemu-system-x86_64x86 64-bit
qemu-system-i386x86 32-bit
qemu-system-aarch64ARM 64-bit (aarch64)
qemu-system-armARM 32-bit
qemu-system-riscv64RISC-V 64-bit
qemu-system-ppc64PowerPC 64-bit
qemu-system-mipsMIPS

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

OpsiKeterangan
-enable-kvmAktifkan akselerasi KVM
-m <size>RAM yang dialokasikan (contoh: 2G, 512M)
-smp <n>Jumlah CPU virtual
-cpu hostGunakan 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)
-snapshotJalankan tanpa menyimpan perubahan ke disk
-nographicMode tanpa tampilan grafis (serial console)
-daemonizeJalankan 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-kvm digunakan.
  • Gunakan -cpu host bukan -cpu qemu64.
  • Gunakan driver virtio untuk 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

@T4n-Labs · @Gh0sT4n