Growing Home Assistant Disk Image
Since changing my HomeAssistant installation from the RaspberryPi to a bhyve vm running on FreeBSD things have been going well. The vm works well and everything just works. Over time I've added more sensors and automations which has increased it's usefulness.
Of course with more sensors you get more data. Add in the system snapshots for the regular updates and the original 32G disk image starts to fill.
I started seeing warnings from the system a few weeks ago. Removing some very old snapshots resolved things temporarily but a longer term solution was needed.
Disk Image
bhyve uses a simple disk image to contain it's entire vm. You need to know the name of the vm before you can get more information.
$ sudo vm list
NAME DATASTORE LOADER CPU MEMORY VNC AUTOSTART STATE
home_assistant default uefi 4 4G - Yes [1] Running
To get more detailed information about the vm, use the info command.
$ sudo vm info home_assistant
------------------------
Virtual Machine: home_assistant
------------------------
state: running (87241)
...
virtual-disk
number: 0
device-type: file
emulation: ahci-hd
options: -
system-path: <vm disk>/home_assistant/disk0.img
bytes-size: 34359738368 (32.000G)
bytes-used: 68764566528 (64.041G)
Before doing anything else, we need to stop the vm.
$ sudo vm stop home_assistant
Growing The Image
The biggest question was how to grow the image. I couldn't find anything that addressed this specifically online but it turned out to be simpler than I thought it would.
The first step was to create a larger , empty disk image. As this will eventually be used for the vm it's easiest to create it in the same place as the current image.
$ cd <vm disk>/home_assistant
$ sudo truncate -s 100G newha.img
Next, copy the current image into the newly created file.
$ sudo dd if=disk0.img of=newha.img conv=notrunc
After waiting for the copy to complete, we simply swap the files.
$ sudo mv disk0.img original.img
$ sudo mv newha.img disk0.img
As the disk image is fully self contained I wasn't sure if it would be happy having been copied, but as it turns out bhyve is smart enough to figure this out and expand to use the available space.
$ sudo vm start home_assistant
Starting home_assistant
* found guest in /eric/vm/home_assistant
* booting...
After taking a few moments to start and settle the system was fully available and showing disk usage around the 30% mark.