First, some background.
A Packstack answer file contains a parameter CONFIG_CINDER_VOLUMES_SIZE. My Rocky Packstack deployment uses the default size, which is 20GB.
Here is my cinder-volumes file:
$ ls -lsh /var/lib/cinder/cinder-volumes
256K -rw-r-----. 1 root root 21G May 14 19:33 /var/lib/cinder/cinder-volumes
The 256K figure is the actual space this file currently uses in the filesystem. It's a sparse file that fills up as you allocate Cinder volumes. I don't think that Linux has a mechanism to release space in a file.
The fix is to provide enough space in /var/lib/cinder so that the file can grow up to its 20GB. Or you set a smaller CONFIG_CINDER_VOLUMES_SIZE when deploying Packstack, knowing that this will limit the amount of volume data that you can create.
More background information: Packstack deploys LVM as the Cinder backend and enables thin provisioning by default. The cinder-volumes file is used as the LVM physical volume:
# pvs
PV VG Fmt Attr PSize PFree
/dev/loop1 cinder-volumes lvm2 a-- <20.60g 1012.00m
# lvs
LV VG Attr LSize Pool Origin Data% Meta% (...)
cinder-volumes-pool cinder-volumes twi-a-tz-- 19.57g 0.00 10.55
cinder-volumes-pool is the LVM pool from which thin logical volumes are allocated, each representing a Cinder volume.