| Title: OpenBSD vmm and qcow2 derived disks | |
| Author: Solène | |
| Date: 27 August 2023 | |
| Tags: openbsd | |
| Description: In this article, you will learn how to leverage a qcow2 | |
| feature enabling you many virtualization use case | |
| # Introduction | |
| Let me show you a very practical feature of qcow2 virtual disk format, | |
| that is available in OpenBSD vmm, allowing you to easily create derived | |
| disks from an original image (also called delta disks). | |
| A derived disk image is a new storage file that will inherit all the | |
| data from the original file, without modifying the original ever, it's | |
| like stacking a new fresh disk on top of the previous one, but all the | |
| changes are now written on the new one. | |
| This allows interesting use cases such as using a golden image to | |
| provide a base template, like a fresh OpenBSD install, or create a | |
| temporary disks to try changes without harming to original file (and | |
| without having to backup a potentially huge file). | |
| This is NOT OpenBSD specific, it's a feature of the qcow2 format, so | |
| while this guide is using OpenBSD as an example, this will work | |
| wherever qcow2 can be used. | |
| OpenBSD vmctl man page: -b flag | |
| # Setup | |
| First, you need to have a qcow2 file with something installed in it, | |
| let's say you already have a virtual machine with its storage file | |
| `/var/lib/vmm/alpine.qcow2`. | |
| We will create a derived file `/var/lib/vmm/derived.qcow2` using the | |
| `vmctl` command: | |
| ```console | |
| # vmctl create -b /var/lib/vmm/alpine.qcow2 /var/lib/vmm/derived.qcow2 | |
| ``` | |
| That's it! Now you have the new disk that already inherits all the | |
| other file data without modifying it ever. | |
| # Limitations | |
| The derived disk will stop working if the original file is modified, so | |
| once you make derived disks from a base image, you shouldn't modify the | |
| base image. | |
| However, it's possible to merge changes from a derived disk to the base | |
| image using the `qemu-img` command: | |
| Red Hat documentation: Rebasing a Backing File of an Image | |
| # Conclusion | |
| The derived images can be useful in some scenarios, if you have an | |
| image and want to make some experimentation without making a full | |
| backup, just use a derived disk. If you want to provide a golden image | |
| as a start like an installed OS, this will work too. | |
| One use case I had was with OpenKuBSD, I had a single OpenBSD install | |
| as a base image, each VM had a derived disk as their root but removed | |
| and recreated at every boot, but they also had a dedicated disk for | |
| /home, this allows me to keep all the VMs clean, and I just have a | |
| single system to manage. |