Virtual Machines with ZFS Volumes

My main workstation runs FreeBSD; my work on Calamares is all Linux, so I use a lot of virtual machines and do a lot of disk-swapping. My tool of choice is VirtualBox, which is really darn useful for running complete desktop environments.

But I’ve just added a new¬†item to my toolbox. It’s called vzvol.

A very recent addition to the official ports collection, vzvol is a script that helps with, and automates, creating ZFS volumes. I saw the commit adding vzvol to the ports tree, and immediately thought “hey, that’s really nifty.” And it ticks an awful lot of boxes for me in my regular workflow.

A ZFS volume is just a reservation in a zpool (which is a storage pool, composed of one or more disks; zpools have their own administration layer) which is treated as a block device by the host OS. It’s like an image file — except it’s not a file, and the blocks in the reserved space are addressable just like any other block device. For a volume called¬†kde-neon-dev in the pool zdata, the corresponding block device is /dev/zvol/zdata/kde-neon, and you can treat it like any other disk. For instance, you can dd(1) zeroes into it, and then run fdisk(8), or gpart(8), and experiment with disk utilities.

That’s quite different from disk images as files, where you need to loopback-mount or memory-disk-wrangle them; worse still are disk images created by VirtualBox, which are hard to manipulate from the host side with regular tools.

VirtualBox can use “write-through” devices, though — it’s a bit fiddly, but you can create a VMDK that points to a block device. Any block device, including ZFS volumes! All of a sudden, the disk blocks used by my VM are also easily manipulable from the host OS. For my day-to-day disk-wrangling, this makes a huge difference.

vzvol makes manipulating and maintaining these ZFS volumes a snap, and it’s saved me tons of time in just the past two weeks. Hey, let’s try the latest Manjaro:

vzvol -s 20G -t virtualbox -p zdata -v manjaro-test

after the test, vzvol --delete cleans it up. (And vzvol runs on Linux, too, if you have ZFS there).

Comments are closed.