Belajar KVM & QEMU - XML Domain Configuration
Episode 10 of 23

Belajar KVM & QEMU - XML Domain Configuration

Membedah struktur XML domain libvirt: elemen domain vcpu memory devices dan interface, praktik virsh edit untuk mengubah konfigurasi, serta virsh attach-device dan template XML untuk reproduktifitas infrastruktur

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

Setelah episode 9 memperkenalkan virsh dumpxml, sekarang kita bedah isinya. XML domain adalah bahasa definisi VM di dunia libvirt — setiap VM persisten punya satu dokumen XML yang menjadi source of truth. Menguasai format ini berarti kalian bisa mendefinisikan VM tanpa wizard, membuat template, dan memodifikasi resource VM secara presisi.

Di episode ini kita membaca struktur <domain>, memodifikasi dengan virsh edit, dan menambah device dengan virsh attach-device. Ini keterampilan yang langsung menular ke Ansible/Terraform (episode 21) dan Proxmox.

Struktur Domain XML

Ambil definisi VM yang sudah ada:

Dump XML domain
virsh dumpxml web1

Struktur dasarnya seperti ini (dipotong untuk fokus):

web1.xml
<domain type='kvm'>
  <name>web1</name>
  <memory unit='KiB'>2097152</memory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-q35-11.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <devices>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/web1.qcow2'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <interface type='network'>
      <source network='default'/>
      <model type='virtio'/>
    </interface>
  </devices>
</domain>

Elemen kunci:

ElemenFungsi
&lt;name&gt;Nama VM (unik per host)
&lt;memory&gt;Alokasi RAM dalam KiB
&lt;vcpu&gt;Jumlah vCPU + placement
&lt;os&gt;Arsitektur, machine type, urutan boot
&lt;devices&gt;Disk, network, display, dan device lain

Perhatikan satuan: <memory> dalam KiB, jadi 2 GiB = 2097152. Machine type pc-q35-11.0 menunjukkan QEMU 11.x dengan chipset q35 — konsisten dengan pilihan kita di episode 4.

Memodifikasi dengan virsh edit

virsh edit membuka XML di editor default, memvalidasi saat disimpan, dan menerapkan perubahan:

Edit definisi VM
virsh edit web1

Ubah misalnya <memory> menjadi 4 GiB, lalu simpan. Jika VM sedang jalan, perubahan baru diterapkan saat restart (untuk resource yang butuh reboot). Validasi otomatis menolak XML yang tidak valid — error langsung terlihat, bukan diam-diam.

Warning

virsh edit hanya mengubah definisi, bukan keadaan runtime. Menambah RAM lewat XML sementara VM hidup tidak berpengaruh sampai virsh reboot. Untuk perubahan runtime, cari flag --live — tapi tidak semua resource mendukungnya.

Menambah Device dengan attach-device

Untuk menambah device (misal disk kedua atau network kedua), tulis XML device terpisah lalu attach:

Buat definisi disk kedua
cat > disk2.xml <<EOF
<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2'/>
  <source file='/var/lib/libvirt/images/web1-data.qcow2'/>
  <target dev='vdb' bus='virtio'/>
</disk>
EOF
Attach disk ke VM berjalan
virsh attach-device web1 disk2.xml

Dengan flag tambahan:

  • --live — terapkan saat VM jalan.
  • --config — simpan ke definisi agar persisten.
  • --persistent — alias --config.

Kebalikannya virsh detach-device. Catatan: device SCSI/PCI bisa hotplug; beberapa device lain mungkin butuh konfigurasi ulang di guest setelahnya.

Template XML untuk Reproduktifitas

Kombinasi terbaik: simpan XML sebagai template di git, lalu terapkan untuk membuat VM baru:

Salin VM dari template XML
virsh define web1.xml
virsh start web1

Untuk membuat banyak VM dari satu template dengan parameter berbeda, gunakan variable substitution sederhana — misal dengan sed atau lebih baik lagi lewat virt-clone (episode 11) dan Terraform (episode 21):

Generate VM dari template
sed "s/web1/web2/g" web1.xml > web2.xml
virsh define web2.xml

Tip

Jangan pernah mengedit file XML di /etc/libvirt/qemu/ secara manual sambil daemon hidup — perubahan bisa ditimpa saat libvirtd menyimpan ulang. Selalu pakai virsh edit atau virsh define dari file kalian sendiri.

Common Pitfalls

  • Satuan salah: memory dalam KiB — menulis 2048 berarti 2 MiB, bukan 2 GiB. Gunakan virsh edit yang menampilkan satuan eksplisit.
  • XML tidak valid diam-diam: selalu virsh edit (memvalidasi) daripada editor manual.
  • Attach tanpa --config: device hilang setelah reboot host — selalu sertakan --config untuk perubahan persisten.

Penutup

Pada episode 10 ini, kalian telah menguasai format XML domain libvirt.

Inti yang harus dibawa pulang:

  • XML <domain> adalah source of truth VM: <name>, <memory>, <vcpu>, <os>, <devices>.
  • <memory> dalam KiB; machine type mengikuti versi QEMU (pc-q35-11.0).
  • virsh edit untuk modifikasi tervalidasi; virsh attach-device/detach-device untuk device hotplug.
  • Template XML + sed/virsh define memberi reproduktifitas dasar sebelum IaC penuh.
  • Jangan edit file di /etc/libvirt/qemu/ langsung.

Di episode 11 selanjutnya, kita akan mempercepat workflow dengan virt-install & virt-manager — membuat VM non-interaktif dengan virt-install, cloning dengan virt-clone, dan mengelola VM secara visual lewat GUI virt-manager. Sampai jumpa di episode 11!

Belajar KVM & QEMU - XML Domain Configuration | Belajar KVM & QEMU