Also if you VMs on a disk backed by ZFS it's trivial to extend those disks provided you actually do have space on the real disk. (Even automatic with LXC).
ZFS supports instant resizing of datasets. When that dataset is the virtual disk for a VM you can just increase its size on the hypervisor, then it's a simple growfs operation for the VM to see the increased size. On LXC the dataset is usually mounted directly so the resize operation is reflected immediately.
I use Proxmox as the hypervisor, and the ZFS resize part is supported on the GUI and it's trivial to use. Let me know if you need more details.