Firecracker VMM with additional disks

Posted on
firecracker microvm

Before looking at the networking options, I have looked at adding extra drives to my Firecracker VMMs. Storing data on the root file system will not scale well long term. Additional disks will be a good solution to persist application specific data across reboots and upgrades.

Create the disk on the host

First, create an additional file system on the host:

dd if=/dev/zero of="/firecracker/filesystems/alpine-vol2.ext4" bs=1M count=500
mkfs.ext4 "/firecracker/filesystems/alpine-vol2.ext4"

Reconfigure the VMM

Change the VMM drives configuration:

  "drives": [
    {
      "drive_id": "rootfs",
      "path_on_host": "/firecracker/filesystems/alpine-base-root.ext4",
      "is_root_device": true,
      "is_read_only": false
    },
    {
      "drive_id": "vol2",
      "path_on_host": "/firecracker/filesystems/alpine-vol2.ext4",
      "is_root_device": false,
      "is_read_only": false
    }
  ],

and relaunch the VMM.

Verify the configuration

In another terminal:

172:~$ sudo fdisk -l
Disk /dev/vda: 500 MiB, 524288000 bytes, 1024000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/vdb: 500 MiB, 524288000 bytes, 1024000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

I can mount it:

172:/home/alpine# mkdir /mnt
172:/home/alpine# mount /dev/vdb /mnt

Firecracker shows me:

[ 1800.756913] EXT4-fs (vdb): mounted filesystem with ordered data mode. Opts: (null)
[ 1800.758116] ext4 filesystem being mounted at /mnt supports timestamps until 2038 (0x7fffffff)

I can also write to it:

172:/home/alpine# ls -la /mnt/
total 14
drwxr-xr-x    3 root     root          1024 Feb 14 15:07 .
drwxr-xr-x   16 root     root          1024 Feb 14 15:49 ..
drwx------    2 root     root         12288 Feb 14 15:07 lost+found
172:/home/alpine# echo 1 > /mnt/test
172:/home/alpine# ls -la /mnt/
total 15
drwxr-xr-x    3 root     root          1024 Feb 14 15:50 .
drwxr-xr-x   16 root     root          1024 Feb 14 15:49 ..
drwx------    2 root     root         12288 Feb 14 15:07 lost+found
-rw-r--r--    1 root     root             2 Feb 14 15:50 test

Live resize does not work

Not sure at this stage if this is because of how the system is built or if it’s a limitation of the VMM but I am not able to live resize the disk. Executing on the host:

dd if=/dev/zero bs=1M count=100 >> /firecracker/filesystems/alpine-vol2.ext4
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.0798364 s, 1.3 GB/s

and in the VMM:

172:/home/alpine# sudo blockdev --flushbufs /dev/vdb
172:/home/alpine# sudo blockdev --rereadpt /dev/vdb

does not reflect the change. The change only becomes visible after VMM restart.