Microsoft Virtualization Discussions

SnapShot Space consumption differences between Get-NcEfficiency and Get-NcSnap




We are attempting to use the Windows PowerShell manageability tools and seem to have encountered a discrepancy when comparing the results of SnapshotUsed from Get-NcEfficiency and Get-NcSnapshot commands.


Can anyone please explain what the 'SnapshotUsed' value is from the Get-NcEfficiency commandlet from the Powershell Toolkit? It seems this number is different from the summation of the actual snapshot sizes, as returned by the Total value from the Get-NcSnapshot data for volumes.


The documentation makes no distinction of the two, and in fact shows the usage of SnapshotUsed value in reporting. We are seeing a very high discrepancy for some volumes in comparing the two numbers. As tested with toolkit versions 3.1 and most recent, 3.2.1




From ShowHelp, I see:


The Get-NcSnapshot cmdlet is designed to "get a list of snapshot objects".


The Get-NcEfficiency cmdlet is designed to "get efficiency information for volumes." The cmdlet returns a VolEfficiencyInfo object for each volume it investigates. The VolEfficiency object returned contains the SnapshotCount - the number of snapshots of the volume.


So, the Get-NcSnapshot cmdlet should return a list of snapshots. The Get-NcEfficiency cmdlet should return a count of snapshots (as a small part of its output.) Presumably, the count of snapshots from Get-NcEfficiency should equal the number of snapshots returned by Get-NcSnapshot?


The problem is that there is "a discrepancy when comparing the results of SnapshotUsed from Get-NcEfficiency and Get-NcSnapshot commands." Snapshotused is the amount of space used by snapshots. The Get-NcSnapshot doesn't appear to return space used. Perhaps we need to use advanced queries? Can anyone confirm that this would be productive if we tried it?


This is important to us to reconcile since we use the information returned to create billing statements that we believe may be inaccurate.

We'd like to find a way to make sure we are billing properly for space consumed within snapshots.



Thanks for any help that anyone can provide.




Hello Eric,


Suppose vs1:vol1 is the volume where you are seeing the reported discrepancy. Please run


   Get-NcEfficiency -Vserver vs1 -Volume vol1

   Get-NcSnapshot -Vserver vs1 -Volume vol1 | Sort Cumulative -Descending | select -First 1

and verify whether there is any discrepancy between the 'Cumulative' column reported by Get-NcSnapshot and the 'SnapshotUsed' column reported by Get-NcEfficiency. There really shouldn't be.


I suspect the discrepancy you are observing is because of formatting. The toolkit formats output of the 'Total' column of Get-NcSnapshot by rounding to the nearest x.y KB/MB/GB/TB (meaning it converts the bytes in to a 'reasonable unit' say MB, and rounds the MB value to one place after decimal; like 13.23 MB becomes 13.2MB and 13.26MB becomes 13.3MB).

   Suppose you have a 10 snapshots of size 1.35MB. The output would show 1.4MB for each of them. So if you are manually adding this value, you get total size as 14MB, whereas cumulative (and Get-NcEfficiency) would have actually performed the addition in bytes and rounded only the sum and will show 13.5MB.


Hope this helps,



This isn't a byte size conversion issue.  We are pulling the byte number itself.  Here is the output for just one volume with the difference.


Note the SnapshotUsed value (in bytes)




PS> Get-NcEfficiency -Volume vol1 | fl *

SnapshotCount           : 142
SnapshotReserve         : 0
SnapshotUsed            : 4305979133952
SnapshotOverflow        : 4305979133952
Reserve                 : 0
ReserveUsed             : 0
SpaceReserve            : none
QuotaCommitted          : 0
QuotaUsed               : 38139489857536
QuotaOverCommit         : 0
TotalLunSize            : 0
LunOverprovisionPercent : 0
EffectiveUsed           : 116773961909522
EfficiencyPercent       : 160.91712069961211069091928728
Qtrees                  : {[, DataONTAP.C.Types.Efficiency.QtreeEfficiency], [RECFILEVAULT, DataONTAP.C.Types.Efficienc
                          y.QtreeEfficiency], [RECFILEVAULT1, DataONTAP.C.Types.Efficiency.QtreeEfficiency], [RECFILEVA
                          ULT2, DataONTAP.C.Types.Efficiency.QtreeEfficiency]...}
NcController            :
Vserver                 : vs1
Name                    : vol1
Capacity                : 72567767433216
Used                    : 53395415322624
Free                    : 19172352110592
Returns                 : 63378546586898



And the summation of the actual 142 snapshots:



PS> Get-NcSnapshot -Volume vol1 | Measure-Object Total -Sum

Count : 142
Average :
Sum : 31604404408320
Maximum :
Minimum :
Property : Total

These are orders of magnitued in difference (Efficiency.SnapshotUsed value reports ~4 TB while the actualy snapshot sizes, Total, summed are ~28 TB).  


Running your statement (pulling just the "most recent" snapshot size via the Cummulative value), returns the same number as errounusly being reported by the Efficiency.SnapshotUsed value:


PS> Get-NcSnapshot -Volume vol1 | Sort Cumulative -Descending | Select-Object -First 1 | fl *

Cumulative                                 : 4305979133952
Created                                    : 12/9/2014 12:10:00 AM
NcController                               :
Vserver                                    : vs1
AccessTime                                 : 1418101800
AccessTimeDT                               : 12/9/2014 12:10:00 AM
Busy                                       : False
ContainsLunClones                          :
CumulativePercentageOfTotalBlocks          : 12
CumulativePercentageOfUsedBlocks           : 26
CumulativeTotal                            : 4305979133952
CumulativeTotalBlocks                      : 4205057748
Dependency                                 :
Is7ModeSnapshot                            : False
IsConstituentSnapshot                      : False
Name                                       : daily.2014-12-09_0010
PercentageOfTotalBlocks                    : 0
PercentageOfUsedBlocks                     : 1
SnapmirrorLabel                            :
SnapshotInstanceUuid                       : 7566a76f-b342-47bc-95bf-0a7a51532f4e
SnapshotOwnersList                         :
SnapshotVersionUuid                        : 7566a76f-b342-47bc-95bf-0a7a51532f4e
State                                      : valid
Total                                      : 172813733888
TotalBlocks                                : 168763412
Volume                                     : vol1
VolumeProvenanceUuid                       : a964388d-dbda-45bd-80b1-94e59ceb5440
AccessTimeSpecified                        : True
BusySpecified                              : True
ContainsLunClonesSpecified                 : False
CumulativePercentageOfTotalBlocksSpecified : True
CumulativePercentageOfUsedBlocksSpecified  : True
CumulativeTotalSpecified                   : True
Is7ModeSnapshotSpecified                   : True
IsConstituentSnapshotSpecified             : True
PercentageOfTotalBlocksSpecified           : True
PercentageOfUsedBlocksSpecified            : True
TotalSpecified                             : True


If you run the equlvilent 7mode commandlets, the Efficiency.SnapshotUsed number returned from Get-NaEfficiency "correctly" reports the summation of all snapshots, Get-NaSnapshots.  This has to be a bug with the cmode efficiency command.