Usage and estimation of space occupied by ZFS mirrors

Fede_26

New Member
Mar 25, 2026
1
0
1
Hi everyone,

I created the Proxmox datastores using ZFS in mirror mode; the disk pairs have the same capacity, and almost all the virtual machines I have running on them were migrated from ESXi.
I have ZFS replication enabled between two nodes.
I was trying to figure out if it’s possible to estimate the available space for creating new disks before the datastore fills up.
While analyzing some pools, I noticed the following data:

Code:
zfs list -o name,used,refer,avail,volsize,usedbysnapshots,usedbydataset,usedbychildren,usedbyrefreservation -r tank_2
NAME                   USED  REFER  AVAIL  VOLSIZE  USEDSNAP  USEDDS  USEDCHILD  USEDREFRESERV
tank_2                 969G    96K  2.43T        -        0B     96K       969G             0B
tank_2/vm-100-disk-0   105G  43.7G  2.49T      60G     14.9M   43.7G         0B          60.9G
tank_2/vm-100-disk-1  74.8G  9.77G  2.49T      64G        0B   9.77G         0B          65.0G
tank_2/vm-102-disk-0  17.2G   934M  2.45T      16G        0B    934M         0B          16.3G
tank_2/vm-102-disk-1   116G  4.23G  2.54T     110G      636K   4.23G         0B           112G
tank_2/vm-103-disk-0   101G  39.7G  2.49T      60G     43.4M   39.7G         0B          60.9G
tank_2/vm-103-disk-1  96.1G  35.2G  2.49T      60G        0B   35.2G         0B          60.9G
tank_2/vm-104-disk-0   101G  40.4G  2.49T      60G     23.7M   40.4G         0B          60.9G
tank_2/vm-104-disk-1   358G   104G  2.68T     250G      153M    104G         0B           254G

and

Code:
zfs list -o name,used,refer,avail,volsize,usedbysnapshots,usedbydataset,usedbychildren,usedbyrefreservation -r rpool
NAME                       USED  REFER  AVAIL  VOLSIZE  USEDSNAP  USEDDS  USEDCHILD  USEDREFRESERV
rpool                      345G   104K  1.34T        -        0B    104K       345G             0B
rpool/ROOT                 209G    96K  1.34T        -        0B     96K       209G             0B
rpool/ROOT/pve-1           209G   209G  1.34T        -        0B    209G         0B             0B
rpool/data                 136G    96K  1.34T        -        0B     96K       136G             0B
rpool/data/vm-105-disk-0  18.1G  18.1G  1.34T     150G        0B   18.1G         0B             0B
rpool/data/vm-105-disk-1   102M   102M  1.34T     300G        0B    102M         0B             0B
rpool/data/vm-106-disk-0   118G   118G  1.34T     150G        0B    118G         0B             0B
rpool/data/vm-106-disk-1  3.90M  3.90M  1.34T     300G        0B   3.90M         0B             0B
rpool/var-lib-vz           305M   305M  1.34T        -        0B    305M         0B             0B

One thing that’s not clear to me is how it’s possible that, when using reservation, the space used by a disk seems to reach almost double the VOLSIZE. I would have expected it to reach at most the value of USEDREFRESERV (calculated as: VOLSIZE + a small reserved percentage), but it seems that the total is given by the sum of USEDDS + USEDREFRESERV.
For example, the disk tank_2/vm-104-disk-1 uses as much as 358 GB when the logical disk volume is 250 GB. If the disk were in the order of terabytes, there would be a significant amount of “unusable” disk space.

I’ve seen that the USEDREFRESERV value can be reset to zero by modifying the sparse parameter in the /etc/pve/storage.cfg file, but I’d prefer to avoid that for now.

Is this behavior normal? Can this significant growth in occupied space be limited? Is there a way to calculate the maximum space a disk will occupy over time until it fills up, and if so, what values should I take into account?

Thank you in advance for your help.