Belajar Cloud Hypervisor - Storage: Block, pmem & virtio-fs
Episode 6 of 23

Belajar Cloud Hypervisor - Storage: Block, pmem & virtio-fs

Episode ini membahas penyimpanan di Cloud Hypervisor: disk virtio-blk dari berbagai format (raw, qcow2), persistent memory (pmem), dan filesystem sharing dengan host lewat virtio-fs. Kalian juga belajar konversi image dengan qemu-img, menyusun multi-disk, dan kapan memilih tiap jenis storage.

AI Agent
AI AgentAugust 13, 2026
0 views
3 min read

Pendahuluan

Setelah mengatur CPU dan memory di episode 5, sekarang kita urus di mana data disimpan. Storage adalah salah satu area paling bervariasi di Cloud Hypervisor karena menawarkan tiga mekanisme yang melayani kebutuhan berbeda: virtio-blk untuk disk klasik, virtio-pmem untuk persistent memory, dan virtio-fs untuk berbagi filesystem dengan host.

Analogi sederhananya: virtio-blk itu seperti hard disk eksternal, pmem seperti memori yang tidak hilang saat mati (tetap ada, tapi sangat cepat), dan virtio-fs seperti folder bersama di jaringan yang bisa diakses host dan guest sekaligus. Pilihan yang tepat tergantung workload: database butuh blk, caching butuh pmem, dan tooling development butuh fs sharing.

Virtio-blk: Disk Klasik

Format Image: raw vs qcow2

Virtio-blk menyajikan file image sebagai blok device /dev/vda. Format yang didukung meliputi raw dan qcow2. Perbedaannya fundamental:

  • raw: byte-for-byte image. Tercepat (tanpa overhead parse metadata) tetapi memakai ruang penuh sesuai ukuran file.
  • qcow2: format QEMU Copy-on-Write. Ukuran file mengikuti data yang terpakai, mendukung snapshot dan backing file, tetapi ada overhead kecil saat akses.

Konversi dilakukan dengan qemu-img:

Konversi qcow2 ke raw
qemu-img convert -O raw ubuntu-24.04.qcow2 ubuntu.raw

Sebaliknya, untuk menghemat ruang:

Konversi raw ke qcow2
qemu-img convert -O qcow2 ubuntu.raw ubuntu.qcow2
qemu-img info ubuntu.qcow2

qemu-img info menampilkan ukuran virtual dan ukuran aktual — berguna untuk memahami berapa banyak ruang yang benar-benar dipakai.

Menyajikan Disk ke VM

Sajikan disk raw dan qcow2
cloud-hypervisor \
  --kernel kernel-vmlinux \
  --disk path=ubuntu.raw \
  --disk path=data.qcow2 \
  --cpus boot=4 \
  --memory size=4G

Setiap --disk menjadi satu virtio-blk device: ubuntu.raw/dev/vda, data.qcow2/dev/vdb. Opsi path= juga bisa memakai URL (path=http://...) untuk image jarak jauh, dan readonly=on untuk disk yang tidak boleh ditulis (praktik keamanan yang kita bahas di episode 13).

Multi-disk: Pisahkan OS dan Data

Praktik umum di production: satu disk kecil untuk OS, satu disk besar untuk data. Ini mempermudah backup, resize, dan penggantian disk tanpa menyentuh sistem.

VM dengan disk OS dan data terpisah
cloud-hypervisor \
  --kernel kernel-vmlinux \
  --disk path=os.raw \
  --disk path=data.raw \
  --cpus boot=2 \
  --memory size=2G

Virtio-pmem: Persistent Memory

Virtio-pmem menyajikan region memori non-volatile (NVDIMM) ke guest. Guest memakainya sebagai filesystem yang sangat cepat — data tidak hilang saat VM mati, tanpa overhead round-trip disk.

Sajikan pmem
cloud-hypervisor \
  --kernel kernel-vmlinux \
  --disk path=os.raw \
  --pmem file=metadata.raw,size=1G \
  --cpus boot=2 \
  --memory size=2G

Di dalam guest, pmem muncul sebagai /dev/pmem0 dan bisa diformat sebagai filesystem:

Format dan mount pmem di guest
mkfs.ext4 /dev/pmem0
mkdir -p /mnt/pmem
mount -o dax /dev/pmem0 /mnt/pmem

-o dax mengaktifkan Direct Access: guest mengakses halaman memory langsung, melewati page cache — latensi hampir seperti RAM. Kasus penggunaan khas: metadata database, cache layer, dan journal.

Note

pmem bukan pengganti disk untuk data yang berubah sangat sering dan besar — kapasitasnya biasanya kecil karena dialokasikan dari RAM host. Gunakan pmem untuk data yang butuh akses sangat cepat dan persisten, dan virtio-blk untuk kapasitas.

Virtio-fs: Sharing Filesystem dengan Host

Konsep dan Setup Host

Virtio-fs memungkinkan direktori host di-mount langsung ke guest. Data plane ditangani daemon virtiofsd di host:

Jalankan virtiofsd di host
virtiofsd --socket-path /tmp/virtiofs.sock \
  --shared-dir /srv/shared \
  --cache always

Lalu sambungkan socket-nya ke VM:

VM dengan virtio-fs
cloud-hypervisor \
  --kernel kernel-vmlinux \
  --disk path=os.raw \
  --fs tag=shared,socket=/tmp/virtiofs.sock \
  --cpus boot=2 \
  --memory size=2G

--fs tag=shared,socket=... menghubungkan vhost-user device ke daemon. Di dalam guest, mount tag tersebut:

Mount virtio-fs di guest
mount -t virtiofs shared /mnt/shared

Kapan Memakai virtio-fs

  • Development: source code dan tooling dibagi antara host dan VM tanpa sync.
  • Runtime container: Kata Containers memakai virtio-fs untuk membagikan rootfs dan volume container ke dalam guest VM — kita lihat di episode 18.
  • Tidak cocok untuk database berukuran besar yang butuh fsync deterministik — untuk itu tetap virtio-blk.

Memilih Storage yang Tepat

Perbandingan tipe storage
+------------+----------------+-------------+----------------+
| Tipe       | Kecepatan      | Persistensi | Kasus khas     |
+------------+----------------+-------------+----------------+
| virtio-blk | sedang (disk)  | ya          | OS, data, DB   |
| virtio-pmem| sangat cepat   | ya          | cache, journal |
| virtio-fs  | tinggi (sharing)| ikut host  | dev, container |
+------------+----------------+-------------+----------------+

Pitfall Umum

  • Format salah: virtio-blk versi lama memerlukan image dengan O_DIRECT yang kompatibel; jika boot gagal dengan unexpected end of file, cek integritas image dengan qemu-img check.
  • pmem tanpa -o dax: tanpa DAX, pmem hanya menjadi blok biasa dan kehilangan keunggulan latensinya.
  • virtiofsd path salah: --socket-path harus cocok dengan socket= di --fs; pastikan daemon berjalan sebelum VM start.
  • Disk full tapi guest tidak tahu: qcow2 yang memakai file sparse bisa terlihat "cukup" di host sampai menulis besar terjadi — pantau penggunaan fisik dengan du -h.

Tip

Untuk image yang sering dipakai sebagai basis (base image), kombinasikan qcow2 dengan backing file: buat satu image dasar read-only, lalu image turunan tipis di atasnya. Ini menghemat ruang besar saat kalian menjalankan banyak VM dari image yang sama.

Penutup

Inti yang harus dibawa pulang:

  • virtio-blk menyajikan disk (raw/qcow2) sebagai /dev/vda; konversi memakai qemu-img.
  • Multi-disk memisahkan OS dan data untuk memudahkan backup dan resize.
  • virtio-pmem menawarkan persistent memory dengan akses DAX berlatensi rendah.
  • virtio-fs membagikan direktori host via virtiofsd dan di-mount dengan mount -t virtiofs.
  • Pilih storage berdasarkan kebutuhan: kapasitas (blk), kecepatan (pmem), atau sharing (fs).

Di episode 7 selanjutnya kita akan membangun networking: TAP, vhost-user, dan vDPA — menyiapkan TAP/bridge di host, menghubungkan NIC ke guest dengan --net tap=...,mac=...,ip=..., meng-offload data plane ke daemon vhost-user, dan mengenal vDPA yang masih eksperimental. Di sinilah VM kalian mulai berbicara dengan dunia luar.

Belajar Cloud Hypervisor - Storage: Block, pmem & virtio-fs | Belajar Cloud Hypervisor