How To Reclaim Unused Space In Dynamic VHDX In Windows Server 2012 R2 & Hyper-V? #HyperV #WS2012R2 #WS2012

The other day I had a request to send a Virtual Machine over continent.

Well this is very easy, but what if the size of the VM is large and you have limited Internet bandwidth!

So without further ado, let’s jump into the scenario:

The guest OS is Windows Server 2012 R2 with 50GB dynamic VHDX. This VM is used by the Dev department for Webserver testing purposes. They do copy large files, delete, etc…

The VM is Generation 1 and has an IDE attached VHDX.

If we look inside the VM we can see that ~15GB of space is being used which is basically the OS bits, updates and small web application:

Optimize-Volume01

However if we look on the host, we can see that this VM is occupying 45GB disk space, this is odd Disappointed smile

Optimize-Volume02

In Windows Server 2012 and above, Microsoft introduced TRIM/UNAMP feature. When a large file is deleted from the file system of a VM guest operating system, the guest operating system sends a file delete request to the virtual machine’s virtual hard disk file. The VM’s VHD or VHDX file tunnels the UNMAP request to the class driver stack of the Windows Hyper-V host. So in the scenario above, the disk would initially expand from 15GB to 45GB but when the large files are deleted inside the guest, this would theoretically (automatically) be able to drop back down the VHDX file to ~15GB size.

Why I said theoretically, because the hardware needs to specifically support this. So you’ll need to check with the storage vendor to know if this will work or not.

In my scenario, I am running the Virtual Machine locally on DAS storage, therefore the TRIMP/UNMAP feature won’t work automatically Sad smile

So how can we reclaim back the unused space?

With PowerShell, of courseWinking smile

Let’s fire up PowerShell within the guest OS and force UNMAP using the following cmdlet:

PS C:/>Optimize-Volume –DriveLetter C –ReTrim –VerboseOptimize-Volume03

Shut down the VM and look again at the size of the dynamic VHDX file. It shrinks back to the original file size ~15GB Smile.

Optimize-Volume04

If you like to see TRIM/UNMAP on a Dell Compellent SAN in action, my fellow MVP Didier Van Hoye has recorded a screencast demo.

In conclusion, Trim requires trim-compatible hardware and is also requires Windows Sever 2012 or above on Hyper-V hosts and guests.

Update: Storage Spaces supports UNMAP/Thin provisioning, so if your Virtual Machines are stored on Storage Spaces volumes, you will get the benefit of UNMAP automatically without any trim-compatible hardware.

In the upcoming post, we will see how can we reclaim unused space in dynamic VHDX in older guest OS.

Hope this helps.

Until then… N’joy your day!

Cheers,
/Charbel

About Charbel Nemnom 310 Articles
Charbel Nemnom is a Microsoft Cloud Consultant and Technical Evangelist, totally fan of the latest's IT platform solutions, accomplished hands-on technical professional with over 15 years of broad IT Infrastructure experience serving on and guiding technical teams to optimize performance of mission-critical enterprise systems. Excellent communicator adept at identifying business needs and bridging the gap between functional groups and technology to foster targeted and innovative IT project development. Well respected by peers through demonstrating passion for technology and performance improvement. Extensive practical knowledge of complex systems builds, network design and virtualization.

Be the first to comment

Leave a Reply