How To Update Windows Server 2012 R2 Storage Spaces to Windows Server 2016? #WS2016 #StorageSpaces #HyperV

3 Min. Read


Recently I was upgrading some Windows Server 2012 R2 Hyper-V hosts to Windows Server 2016.

I have Storage Tiered Spaces with mirroring resiliency deployed on those Hyper-V 2012 R2 hosts.

For info about Storage Spaces in Windows Server 2012 R2, see – Storage Spaces overview.

For info about Storage Spaces Direct in Windows Server 2016, see – Storage Spaces Direct overview.

In this blog, I am going to focus on the end to end procedure for upgrading existing Windows Server 2012 R2 Storage Spaces to Windows Server 2016.

Upgrade your Nodes

First things first make sure you have backup for all your existing virtual machines.

Next, Install Windows Server 2016 including the latest cumulative updates, drivers and firmware. In this example, I used Server Core as clean install instead of in-place upgrade. This is my preferred way, your mileage may vary.

Install Hyper-V and reboot the system.

Upgrade Windows Server Storage Spaces

We will start first by querying our system and check the storage pool status.


As you can see, the Storage Pool named “TieredPool01” is not operational. This is expected after you install a new OS!

Let’s get more details about the Pool by running the following command:

Get-StoragePool -FriendlyName "Tiered*" | Select OperationalStatus, HealthStatus, ProvisioningTypeDefault, Version, ResiliencySettingNameDefault, @{ Expression = { $_.Size/1TB }; Label = "Size (TB)" }, FaultDomainAwarenessDefault, LogicalSectorSize, PhysicalSectorSize


As you can see, the Operational Status is set to “Read-only”, the Health Status is “Unknown”, the Version is “Windows Server 2012 R2”, the Resiliency Setting is “Mirror”, and the total capacity for the pool in our example is “10TB”.

Let’s check the health status of the physical disks:


This system has 4 X 2TB HDDs and 4 X 960GB SSDs. All disks are healthy, so far so good!

Before we go ahead and upgrade the pool, we need to bring the storage pool to a healthy state. To do so, you need to run the following command:

Get-StoragePool -FriendlyName "Tiered*" | Set-StoragePool -IsReadOnly $False –Verbose


The Operational Status is “Ok”, and the Health Status is “Healthy” as well.

We can proceed now and upgrade the pool by running the Update-StoragePool cmdlet as shown in the following screenshot.


Now behind the scene, Windows Server 2016 will update the metadata of the existing Windows Server 2012 R2 storage pool and bring it to 2016. This is one time operation and irreversible!

The storage pool is upgraded now to Version: “Windows Server 2016”.

Let’s check the virtual disk status by running the Get-VirtualDisk cmdlet.


The Virtual Disk is “Detached” from the Storage Pool.

To attach the virtual disk, I used Set-VirtualDisk to change “IsManualAttach” to false. This will make sure that when the system reboots, the virtual disk will be mounted automatically.


We have now the Storage Pool “Healthy” and the Virtual Disk “Healthy”.

Let’s check the status of the Volume.


As you can see, the disk named “MirroredTieredSpace01” is healthy but it is in “Offline” state.

To bring it online and make it accessible, you need to use Set-Disk to change “IsOffline” state to false and “IsReadOnly” to false as well.


You can check the health state for the volume by running the Get-Volume cmdlet.


We have now the Storage Pool “Healthy”, the Virtual Disk “Heathy”, and the Volume “Healthy”. We can go ahead and optimize the Storage pool by running Optimize-StoragePool cmdlet.  This will rebalance the Spaces allocations in a pool to disks with available capacity.


This is very useful If you are adding new disks, this operation helps move existing Spaces allocations to them, and optimization improves their performance. Please note that rebalancing is an I/O intensive operation and it is recommended to run it during your schedule maintenance window.

The final step is to import all virtual machines and upgrade their configuration version. Again this is one time operation and not reversible! so If you still have Windows Server 2012 R2 hosts in your environment, and you plan to move virtual machines around, then keep the configuration version at level 5.0 (for WS 2012 R2 support).


Hope that helps.

Happy upgrading!



Configuring Constrained Delegation with Kerberos in Windows Server Hyper-V With PowerShell #HyperV

Don’t miss MVP Led UK TechDays Online! #MVP #MVPBuzz #UKTechdays


Let me know what you think, or ask a question...

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Subscribe to Stay in Touch

Never miss out on your favorite posts and our latest announcements!

The content of this website is copyrighted from being plagiarized!

You can copy from the 'Code Blocks' in 'Black' by selecting the Code.

Please send your feedback to the author using this form for any 'Code' you like.

Thank you for visiting!