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