Episode ini membedah penyimpanan microVM: menempelkan rootfs dan disk tambahan lewat PUT /drives, perbedaan read-only dan read-write, berbagi direktori host ke guest dengan virtio-fs, serta MMDS untuk mendistribusikan metadata seperti IP dan credential ke guest.

Di episode 5 microVM kalian sudah punya jaringan. Episode 6 melengkapi fondasi I/O dengan dua hal: penyimpanan — bagaimana data hidup dan mengalir ke guest — dan metadata — bagaimana host berbicara ke guest tanpa jaringan yang rapuh.
Mengapa episode ini penting? Storage menentukan biaya dan kecepatan: pilihan read-only rootfs memungkinkan sharing page cache yang menghemat memori host secara masif, sementara virtio-fs memungkinkan berbagi direktori antara host dan guest tanpa menyalin file. Dan MMDS adalah jawaban Firecracker untuk pertanyaan klasik orchestration: bagaimana VM tahu konfigurasi dan rahasianya sendiri?
PUT /drives adalah pintu menuju semua block storage. Di episode 4 kita menempelkan rootfs; di sini kita menambah disk kedua — misalnya penyimpanan data aplikasi:
dd if=/dev/zero of=~/fc-demo/data.ext4 bs=1M count=1024
mkfs.ext4 ~/fc-demo/data.ext4curl --unix-socket /tmp/firecracker.sock -i \
-X PUT http://localhost/drives/data \
-H 'Accept: application/json' -H 'Content-Type: application/json' \
-d '{
"drive_id": "data",
"path_on_host": "/home/user/fc-demo/data.ext4",
"is_root_device": false,
"is_read_only": false
}'Setelah boot, guest akan melihat device block baru (biasanya /dev/vda untuk rootfs, /dev/vdb untuk disk kedua), yang bisa di-format dan di-mount dari dalam guest:
mkfs.ext4 /dev/vdb
mkdir -p /mnt/data
mount /dev/vdb /mnt/dataField is_read_only bukan sekadar bendera teknis — ia keputusan arsitektural dengan konsekuensi besar:
Read-only rootfs (is_read_only: true):
Read-write rootfs (is_read_only: false):
Pola produksi umum: rootfs read-only + data drive read-write. State yang harus bertahan disimpan terpisah dari sistem operasi.
Tip
Untuk drive yang sudah dipakai sebagai snapshot base, atau yang dipakai banyak VM sekaligus, biarkan read-only. Jika guest mencoba menulis ke drive read-only, kernel guest hanya akan melempar error I/O — tidak ada korupsi — karena ini dipaksakan di sisi host.
Kadang kalian tidak butuh disk baru — kalian butuh berbagi direktori dengan host secara langsung: source code untuk development, cache, atau socket. Virtio-fs adalah mekanisme Firecracker untuk ini, dengan overhead jauh lebih rendah daripada 9p atau NFS.
Virtio-fs di Firecracker memakai daemon virtiofsd di sisi host untuk melayani permintaan filesystem dari guest:
virtiofsd \
--socket-path /tmp/virtiofs.sock \
--shared-dir /home/user/shared \
--cache always &Kemudian daftarkan device virtio-fs ke microVM sebelum boot:
curl --unix-socket /tmp/firecracker.sock -i \
-X PUT http://localhost/fs/fs0 \
-H 'Accept: application/json' -H 'Content-Type: application/json' \
-d '{
"fs_id": "fs0",
"virtio_fs": {
"cache_type": "Always",
"source_dir": "/home/user/shared",
"tag": "shared"
}
}'Setelah boot, mount dari dalam guest:
mkdir -p /mnt/shared
mount -t virtiofs shared /mnt/shared
ls /mnt/sharedPerhatikan: source_dir tetap mengarah ke host, dan tag (shared) adalah nama yang dipakai guest saat mount. Dengan cache Always, guest membaca data langsung dari page cache host — kecepatan hampir setara filesystem lokal.
Warning
Virtio-fs bukan isolasi keamanan. File di direktori yang di-share bisa dibaca guest — jangan pernah share direktori sensitif, dan pastikan guest memang dipercaya membaca isinya. Untuk secret, gunakan MMDS yang dijelaskan di bawah, bukan filesystem share.
MicroVM sering butuh tahu siapa dirinya: alamat IP, hostname, kredensial, atau endpoint config server. Firecracker menyediakan MMDS (MicroVM Metadata Service) — server metadata yang diekspos ke guest di alamat 169.254.169.254, pola yang sama dengan metadata service EC2.
Host menulis metadata lewat API:
curl --unix-socket /tmp/firecracker.sock -i \
-X PUT http://localhost/mmds \
-H 'Accept: application/json' -H 'Content-Type: application/json' \
-d '{
"latest": {
"meta-data": {
"instance-id": "i-1234567890",
"local-ipv4": "172.16.0.2"
},
"credentials": {
"token": "supersecret"
}
}
}'Guest membacanya lewat HTTP ke 169.254.169.254:
curl http://169.254.169.254/latest/meta-data/instance-id
curl http://169.254.169.254/latest/meta-data/local-ipv4Keunggulan MMDS:
169.254.169.254 tidak di-routing dari jaringan lain, jadi metadata tidak bisa dibaca VM lain.Ini pola yang dipakai production serverless: aplikasi di dalam microVM membaca konfigurasinya sendiri dari MMDS, bukan dari file yang di-bake di image atau environment variable yang bocor.
MMDS bekerja lewat jalur terpisah dari data plane network — Firecracker meng-intercept request ke 169.254.169.254 di level device. Karena itu ia bisa dinonaktifkan atau diarahkan ke interface tertentu lewat network_interfaces di config MMDS. Untuk sebagian besar kasus, default sudah cukup: aktifkan MMDS dengan PUT /mmds, dan guest membaca lewat 169.254.169.254.
Pola best practice untuk secret: simpan hanya token atau referensi di MMDS, dan tarik nilai sebenarnya lewat TLS ke Vault atau Secrets Manager. MMDS adalah jalur pengantar yang cepat, bukan pengganti secret store — tapi tanpa MMDS, guest bahkan tidak tahu harus menghubungi secret store yang mana.
is_root_device double true: dua drive menandai dirinya root → boot gagal. Hanya satu yang boleh root.qemu-img convert -O raw untuk konversi). Menempelkan qcow2 langsung akan error.virtiofsd hidup sebelum InstanceStart.169.254.169.254 (bukan IP lain). Cek dengan curl -v untuk melihat apakah respons datang dari Firecracker.Inti yang harus dibawa pulang:
PUT /drives menempelkan block device; hanya satu yang boleh is_root_device./dev/vdb) dipakai untuk state persisten.Always berperforma tinggi.169.254.169.254) adalah jalur metadata host→guest yang aman dan offline dari jaringan.Di episode 7 selanjutnya kita akan mengunci microVM dari dunia luar: Jailer & Security Isolation — membungkus Firecracker dalam namespace, cgroup, seccomp, rootfs read-only, dan user non-root, lalu memahami flag --id, --chroot-base-dir, dan --exec-file yang menjadi garis pertahanan terakhir bila hypervisor ditembus.