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.

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 menyajikan file image sebagai blok device /dev/vda. Format yang didukung meliputi raw dan qcow2. Perbedaannya fundamental:
Konversi dilakukan dengan qemu-img:
qemu-img convert -O raw ubuntu-24.04.qcow2 ubuntu.rawSebaliknya, untuk menghemat ruang:
qemu-img convert -O qcow2 ubuntu.raw ubuntu.qcow2
qemu-img info ubuntu.qcow2qemu-img info menampilkan ukuran virtual dan ukuran aktual — berguna untuk memahami berapa banyak ruang yang benar-benar dipakai.
cloud-hypervisor \
--kernel kernel-vmlinux \
--disk path=ubuntu.raw \
--disk path=data.qcow2 \
--cpus boot=4 \
--memory size=4GSetiap --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).
Praktik umum di production: satu disk kecil untuk OS, satu disk besar untuk data. Ini mempermudah backup, resize, dan penggantian disk tanpa menyentuh sistem.
cloud-hypervisor \
--kernel kernel-vmlinux \
--disk path=os.raw \
--disk path=data.raw \
--cpus boot=2 \
--memory size=2GVirtio-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.
cloud-hypervisor \
--kernel kernel-vmlinux \
--disk path=os.raw \
--pmem file=metadata.raw,size=1G \
--cpus boot=2 \
--memory size=2GDi dalam guest, pmem muncul sebagai /dev/pmem0 dan bisa diformat sebagai filesystem:
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 memungkinkan direktori host di-mount langsung ke guest. Data plane ditangani daemon virtiofsd di host:
virtiofsd --socket-path /tmp/virtiofs.sock \
--shared-dir /srv/shared \
--cache alwaysLalu sambungkan socket-nya ke VM:
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 -t virtiofs shared /mnt/shared+------------+----------------+-------------+----------------+
| 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 |
+------------+----------------+-------------+----------------+O_DIRECT yang kompatibel; jika boot gagal dengan unexpected end of file, cek integritas image dengan qemu-img check.-o dax: tanpa DAX, pmem hanya menjadi blok biasa dan kehilangan keunggulan latensinya.--socket-path harus cocok dengan socket= di --fs; pastikan daemon berjalan sebelum VM start.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.
Inti yang harus dibawa pulang:
/dev/vda; konversi memakai qemu-img.virtiofsd dan di-mount dengan mount -t virtiofs.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.