2014-02-17 12:48 PM
I am writing a Powershell script to reclaim space on my Windows servers having iSCSI LUN.
My script calls the Powershell cmdlet "Invoke-NaHostVolumeSpaceReclaim".
The toolkit does not give many informations about this cmdlet and i am curious to understand how does it work.
Does this cmdlet execute "hole punching" on unused blocks?
Does it contact directly NetAPP array to release blocks?
Solved! SEE THE SOLUTION
2014-02-17 08:08 PM
Hello, Rfranfeul. If I understand your questions, the answer is yes to both.
This cmdlet uses Windows APIs to read the NTFS block table and uses in-band SCSI UNMAP commands to punch/release each free range. Care is taken to ensure NTFS does not allocate space in the empty ranges during the operation. I believe that WS2012 can do this natively, but earlier versions of Windows benefit from running this cmdlet regularly so that thin-provisioned LUNs remain space-efficient.
2014-02-17 11:43 PM
Thanks for your answer.
So, this cmdlet uses SCSI UNMAP commands to release unused blocks.
Is it the same mechanism for the Space Reclamer embedded in SnapDrive?
2014-02-18 07:50 AM
There are multiple ways to unmap blocks in ONTAP, including the standard UNMAP, an earlier vendor-specific SCSI CDB, and out-of-band ONTAP APIs. The cmdlet uses UNMAP but can fall back to the older CDB if necessary. I don't know which method SnapDrive uses. I do know that when I wrote the cmdlet, it was much faster than SDW, but that may have changed.