KVM (Kernel-based Virtual Machine)

KVM adalah solusi virtualisasi berbasis kernel Linux yang memungkinkan menjalankan virtual machine (VM) dengan performa mendekati native. KVM bekerja dengan mengubah Linux menjadi hypervisor tipe-1.

Persyaratan

Pastikan prosesor mendukung virtualisasi hardware:

# Intel
grep -c vmx /proc/cpuinfo

# AMD
grep -c svm /proc/cpuinfo

Jika output bernilai lebih dari 0, prosesor mendukung virtualisasi. Pastikan fitur ini juga sudah diaktifkan di BIOS/UEFI.

Cek apakah modul KVM sudah dimuat:

lsmod | grep kvm

Instalasi

Paket Utama

sudo xbps-install -S qemu

QEMU adalah emulator dan virtualizer yang bekerja bersama KVM untuk menjalankan VM dengan akselerasi hardware.

Paket Tambahan (Opsional)

PaketFungsi
libvirtAPI dan daemon untuk mengelola VM
virt-managerGUI untuk mengelola VM via libvirt
virt-viewerTampilan konsol VM (VNC/SPICE)
edk2-ovmfFirmware UEFI untuk VM
spice-vdagentIntegrasi clipboard dan resolusi layar untuk SPICE
sudo xbps-install -S libvirt virt-manager virt-viewer edk2-ovmf

Konfigurasi

Tambahkan Pengguna ke Grup yang Diperlukan

sudo usermod -aG kvm <nama_user>
sudo usermod -aG libvirt <nama_user>   # Jika menggunakan libvirt

Login ulang agar perubahan grup diterapkan.

Aktifkan Layanan libvirt

ln -s /etc/sv/libvirtd /var/service/
ln -s /etc/sv/virtlogd /var/service/

Konfigurasi Jaringan (NAT)

libvirt secara default membuat jaringan NAT (virbr0) untuk VM. Aktifkan dan set agar otomatis start:

sudo virsh net-start default
sudo virsh net-autostart default

Konfigurasi Jaringan (Bridge)

Untuk VM yang bisa diakses di jaringan lokal seperti host, buat bridge interface. Tambahkan ke /etc/rc.local:

ip link add name br0 type bridge
ip link set eth0 master br0
ip link set eth0 up
ip link set br0 up

Membuat dan Menjalankan VM

Via QEMU Langsung (CLI)

Buat disk image untuk VM:

qemu-img create -f qcow2 vm-disk.qcow2 20G

Jalankan VM dengan akselerasi KVM:

qemu-system-x86_64 \
    -enable-kvm \
    -m 2G \
    -smp 2 \
    -drive file=vm-disk.qcow2,format=qcow2 \
    -cdrom /path/ke/installer.iso \
    -boot d \
    -net nic \
    -net user

Penjelasan opsi umum:

OpsiKeterangan
-enable-kvmAktifkan akselerasi KVM
-m 2GAlokasi RAM untuk VM
-smp 2Jumlah CPU virtual
-driveDisk image VM
-cdromFile ISO installer
-boot dBoot dari CD-ROM

Via virt-manager (GUI)

Jalankan virt-manager dan ikuti wizard untuk membuat VM baru. virt-manager menyediakan antarmuka grafis untuk seluruh siklus hidup VM.

Via virsh (CLI libvirt)

# Lihat daftar VM
virsh list --all

# Jalankan VM
virsh start <nama_vm>

# Hentikan VM
virsh shutdown <nama_vm>

# Matikan paksa
virsh destroy <nama_vm>

# Hapus VM
virsh undefine <nama_vm> --remove-all-storage

VM dengan UEFI

Untuk VM yang membutuhkan firmware UEFI (contoh: Windows 11, distro modern):

Salin file VARS terlebih dahulu agar bisa ditulis per-VM:

cp /usr/share/edk2-ovmf/x64/OVMF_VARS.fd ./OVMF_VARS.fd

Jalankan VM:

qemu-system-x86_64 \
    -enable-kvm \
    -m 4G \
    -smp 4 \
    -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=vm-disk.qcow2,format=qcow2

Berbagi File antara Host dan VM

Metode 9P (VirtFS)

Tambahkan opsi berikut ke perintah QEMU:

-fsdev local,security_model=passthrough,id=fsdev0,path=/path/di/host \
-device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare

Mount di dalam VM:

mount -t 9p -o trans=virtio hostshare /mnt/shared

Troubleshooting

KVM Permission Denied

ls -l /dev/kvm
# Output: crw-rw---- 1 root kvm ...

# Pastikan user sudah di grup kvm
groups <nama_user>

VM Lambat / Tidak Ada Akselerasi

Verifikasi KVM aktif di dalam VM:

cat /proc/cpuinfo | grep hypervisor

Pastikan perintah QEMU menggunakan -enable-kvm dan CPU virtual dengan model yang tepat:

-cpu host   # Gunakan CPU host secara langsung (performa terbaik)

libvirtd Gagal Start

Periksa log:

cat /var/log/libvirt/libvirtd.log

Pastikan modul kernel sudah dimuat:

sudo modprobe kvm
sudo modprobe kvm_intel   # Intel
# atau
sudo modprobe kvm_amd     # AMD

@T4n-Labs ยท @Gh0sT4n