Matthew Stevenson wrote:
Ha ha, I know! Like I say, I do get COW principles!

I guess what I'm after is for someone to look at my specific example (in txt 
file attached to first post) and tell me specifically how to find out where the 
13.8GB number is coming from.

I feel like a total numpty for going on about this, I really do, but despite 
all the input I still don't see an answer to this basic question.

I promise this will be my last post querying the subject!

The problem is how do you account for data which is referenced by more than one snapshot? Which snapshot would you "charge" then? The used property only tells you how much *unique* data is being held by snapshot (so the data is not referenced by any other snapshot or filesystem). If some data is referenced by more than one snapshot it is accounted as used for a file system for lack of better way of presenting it to user. The usedbysnap property represents the amount of storage to be regained if all snapshots were removed.

Lets say you created 1GB file: /pool/file1.
Now you created snapshot: zfs snapshot p...@snap1

so far the snapshot does not consume any data.

now create another 1GB file: /pool/file2
and create another snapshot: zfs snapshot p...@snap2

Notice that file1 is referenced by both snapshots while file2 is referenced only by snap2.

Now remove file1 from the filesystem. Because both snapshots reference it against which one should you report 1GB of usage? In such a case the 1GB will be charged against main filesystem only. If you remove file2 used space will be charged against filesystem and snap2 as it is only snap2 which references to it so there is no confusion as what it should be charged against.

Example:


mi...@r600:~# zfs create rpool/test
mi...@r600:~# mkfile 10m /rpool/test/file1
mi...@r600:~# zfs snapshot rpool/t...@snap1
mi...@r600:~# mkfile 10m /rpool/test/file2
mi...@r600:~# zfs snapshot rpool/t...@snap2

mi...@r600:~# zfs list -r -t all rpool/test
NAME               USED  AVAIL  REFER  MOUNTPOINT
rpool/test        20.0M  93.0G  20.0M  /rpool/test
rpool/t...@snap1    17K      -  10.0M  -
rpool/t...@snap2      0      -  20.0M  -

mi...@r600:~# rm /rpool/test/file1

mi...@r600:~# zfs list -r -t all rpool/test
NAME               USED  AVAIL  REFER  MOUNTPOINT
rpool/test        *20.1M * 93.0G  *10.0M * /rpool/test
rpool/t...@snap1    17K      -  10.0M  -
rpool/t...@snap2    17K      -  20.0M  -
mi...@r600:~#

mi...@r600:~# rm /rpool/test/file2

mi...@r600:~# zfs list -r -t all rpool/test
NAME               USED  AVAIL  REFER  MOUNTPOINT
rpool/test        20.1M  93.0G    19K  /rpool/test
rpool/t...@snap1    17K      -  10.0M  -
rpool/t...@snap2  10.0M      -  20.0M  -
mi...@r600:~#

Since file2 is referenced uniquely only by snap2 it is reported as used space of snap2. file1 is referenced by both snapshots so its 10MB is charged against filesystem only as it is not clear which snapshot should heave represent it.

Usedbysnashot should point to ~20MB:

mi...@r600:~# zfs get usedbysnapshots rpool/test
NAME        PROPERTY         VALUE     SOURCE
rpool/test  usedbysnapshots  20.0M     -
mi...@r600:~#




So going back to your case (I haven't read you attachment but I think I got it right): all your snapshots are using 13.8GB as that much data is being referenced by them but no longer by filesystem (so data was modified or deleted from the filesystem). Now some of that data is referenced by multiple snapshots so it is not clear against which one it should be reported. Some of data is being uniquely referenced by only a one snapshot so such data is easy to be represented as being used by that specific snapshot.


I hope it is clear now...

--
Robert Milkowski
http://milek.blogspot.com

_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss

Reply via email to