I'm back, I needed to perform some manual operations.
Pool and zvols with no zvol's snapshots:
Code:
NAME USED AVAIL REFER MOUNTPOINT
...
pool 86.9T 19.6T 571M /mnt/pool
...
pool/zvol-iscsi-1-a 10.3T 23.1T 6.84T -
pool/zvol-iscsi-2-a 12.4T 22.9T 9.09T -
pool/zvol-iscsi-3 5.16T 23.2T 1.57T -
pool/zvol-iscsi-4 5.16T 21.2T 3.57T -
...
pool/ozvol-iscsi 1.03T 20.1T 561G -
...
pool/zvol-iscsi 217G 19.7T 155G -
pool/zvol-iscsi-model 224G 19.8T 17.4G -
pool/zvol-iscsi-produkcja 2.30T 21.7T 243G -
...
As You can see all zvols have AVAIL > pool's AVAIL. The difference is - at least it's mathematically OK, approximately - (zvol's: VOLSIZE - REFERENCED). I find it somehow logical.
Let's take a look at one of zvols:
Code:
NAME PROPERTY VALUE SOURCE
pool/zvol-iscsi-1-a type volume -
pool/zvol-iscsi-1-a creation Mon Sep 26 9:54 2016 -
pool/zvol-iscsi-1-a used 10.3T -
pool/zvol-iscsi-1-a available 23.1T -
pool/zvol-iscsi-1-a referenced 6.83T -
pool/zvol-iscsi-1-a compressratio 1.09x -
pool/zvol-iscsi-1-a reservation none default
pool/zvol-iscsi-1-a volsize 10T local
pool/zvol-iscsi-1-a volblocksize 128K -
pool/zvol-iscsi-1-a checksum fletcher2 inherited from pool
pool/zvol-iscsi-1-a compression lz4 local
pool/zvol-iscsi-1-a readonly off default
pool/zvol-iscsi-1-a copies 1 default
pool/zvol-iscsi-1-a refreservation 10.3T local
pool/zvol-iscsi-1-a primarycache all inherited from pool
pool/zvol-iscsi-1-a secondarycache all default
pool/zvol-iscsi-1-a usedbysnapshots 0 -
pool/zvol-iscsi-1-a usedbydataset 6.83T -
pool/zvol-iscsi-1-a usedbychildren 0 -
pool/zvol-iscsi-1-a usedbyrefreservation 3.48T -
pool/zvol-iscsi-1-a logbias latency default
pool/zvol-iscsi-1-a dedup off default
pool/zvol-iscsi-1-a mlslabel -
pool/zvol-iscsi-1-a sync standard default
pool/zvol-iscsi-1-a refcompressratio 1.09x -
pool/zvol-iscsi-1-a written 6.83T -
pool/zvol-iscsi-1-a logicalused 7.39T -
pool/zvol-iscsi-1-a logicalreferenced 7.39T -
pool/zvol-iscsi-1-a volmode default default
pool/zvol-iscsi-1-a snapshot_limit none default
pool/zvol-iscsi-1-a snapshot_count none default
pool/zvol-iscsi-1-a redundant_metadata all default
USED = VOLSIZE = 10 TiB.
Now let's take a snapshot:
Code:
NAME USED AVAIL REFER MOUNTPOINT
pool/zvol-iscsi-1-a@auto-20170216.1205-1h 0 - 6.83T -
What changed on pool on zvols:
Code:
NAME USED AVAIL REFER MOUNTPOINT
...
pool 93.7T 12.8T 571M /mnt/pool
...
pool/zvol-iscsi-1-a 17.1T 23.1T 6.83T -
pool/zvol-iscsi-2-a 12.4T 16.1T 9.10T -
pool/zvol-iscsi-3 5.16T 16.4T 1.57T -
pool/zvol-iscsi-4 5.16T 14.4T 3.58T -
...
pool/ozvol-iscsi 1.03T 13.3T 561G -
...
pool/zvol-iscsi 217G 12.9T 155G -
pool/zvol-iscsi-model 224G 13.0T 17.4G -
pool/zvol-iscsi-produkcja 2.30T 14.9T 243G -
...
Nothing changed for zvol with snapshot, but pool and all other zvols AVAIL decreased, approximately by amount equal to REFERENCED space of zvol with snapshot.
Finally, zvol with snapshot:
Code:
NAME PROPERTY VALUE SOURCE
pool/zvol-iscsi-1-a type volume -
pool/zvol-iscsi-1-a creation Mon Sep 26 9:54 2016 -
pool/zvol-iscsi-1-a used 17.1T -
pool/zvol-iscsi-1-a available 23.1T -
pool/zvol-iscsi-1-a referenced 6.83T -
pool/zvol-iscsi-1-a compressratio 1.09x -
pool/zvol-iscsi-1-a reservation none default
pool/zvol-iscsi-1-a volsize 10T local
pool/zvol-iscsi-1-a volblocksize 128K -
pool/zvol-iscsi-1-a checksum fletcher2 inherited from pool
pool/zvol-iscsi-1-a compression lz4 local
pool/zvol-iscsi-1-a readonly off default
pool/zvol-iscsi-1-a copies 1 default
pool/zvol-iscsi-1-a refreservation 10.3T local
pool/zvol-iscsi-1-a primarycache all inherited from pool
pool/zvol-iscsi-1-a secondarycache all default
pool/zvol-iscsi-1-a usedbysnapshots 0 -
pool/zvol-iscsi-1-a usedbydataset 6.83T -
pool/zvol-iscsi-1-a usedbychildren 0 -
pool/zvol-iscsi-1-a usedbyrefreservation 10.3T -
pool/zvol-iscsi-1-a logbias latency default
pool/zvol-iscsi-1-a dedup off default
pool/zvol-iscsi-1-a mlslabel -
pool/zvol-iscsi-1-a sync standard default
pool/zvol-iscsi-1-a refcompressratio 1.09x -
pool/zvol-iscsi-1-a written 0 -
pool/zvol-iscsi-1-a logicalused 7.39T -
pool/zvol-iscsi-1-a logicalreferenced 7.39T -
pool/zvol-iscsi-1-a volmode default default
pool/zvol-iscsi-1-a snapshot_limit none default
pool/zvol-iscsi-1-a snapshot_count none default
pool/zvol-iscsi-1-a redundant_metadata all default
USED is no more equal to VOLSIZE, it's bigger by, approximately, REFERENCED (or USEDBYDATASET) of this zvol.
That was to be proved. When You take a snapshot, ZFS reserves space which let's You completely rewrite data currently existing on zvol. I hope it's clearly visible above.
My question still remains: can I disable this behavior?