Storage spaces on Windows 10 and tiering

I have a number of disks on my Windows 10 (pro if it maters) desktop and have been toying with storage spaces. I'd like some advice on how to configure storage volumes for my use cases. I know the Windows 10 UI is limited, but it appears that you can get at the tiering features from Powershell. I'm happy to read the docs for storage spaces and try and unravel the feature, but would like some input if my strategy is sound.

Here's what I currently have:

  • 2x256GB SSD - unallocated, was my old RAID0 boot+apps volume
  • 1x5TB HDD - media+games+apps (I want to retire this drive)
  • 1x8TB HDD - media+documents+photos
  • 2x8TB HDD - new unused disks
  • CPU: i7 4790k on Z97 chipset mobo, probably upgrade to Ryzen3 when the time comes
  • My boot drive is a 512GB NVMe disk

I would like to construct two volumes out of the drives above. Ideally this is what I'd want:

  • games+scratch volume: 256GB striped SSD tier + 3TB striped HDD Tier
  • media+documents+photos volume: 256GB mirrored SSD tier + 14TB 'parity' HDD Tier

Everything in the games+scratch volume I can stand to lose as I can just redownload the data. I would for example put my VM 'memory' files, plex database etc. on the scratch disk. Anything sensitive I would backup to the other volume.

I want at least one drive redundancy on the media+documents+photos volume. I have my documents+photos backed up offsite. so this is just saving me some headache if I were to lose a drive.

Does this setup seem reasonable and is it something that I can achieve on a Windows 10 pro machine?

I've also read that storage spaces has really poor 'parity' pool performance in past versions of Windows. Is this still true? I haven't been able to perform a real test of a parity configuration because 2 of my 4 HDDs are used. I figured I would ask here in case someone has any experience doing this before.

What other solutions should I be looking into?


To create Windows 10 Tiered Storage Spaces, see these references:

  • Nils Schimmelmann's Blog : Intel Smart Response Technology vs Windows 10 Tiered Storage Spaces
  • How To Configure Tiered Storage Spaces on Windows 10
  • vWorkspace Hyper-v with tiered storage pools – Part1

I reproduce here Nils Schimmelmann's PowerShell script to create two tiers Storage Spaces, for SSD and HDD:

#Variables
$StoragePoolName = "My Storage Pool"
$TieredSpaceName = "My Tiered Space"
$ResiliencySetting = "Simple"
$SSDTierName = "SSDTier"
$HDDTierName = "HDDTier"

#List all disks that can be pooled and output in table format (format-table)
Get-PhysicalDisk -CanPool $True | ft FriendlyName,OperationalStatus,Size,MediaType

#Store all physical disks that can be pooled into a variable, $PhysicalDisks
$PhysicalDisks = (Get-PhysicalDisk -CanPool $True | Where MediaType -NE UnSpecified)       

#Create a new Storage Pool using the disks in variable $PhysicalDisks with a name of My Storage Pool
$SubSysName = (Get-StorageSubSystem).FriendlyName
New-StoragePool -PhysicalDisks $PhysicalDisks -StorageSubSystemFriendlyName $SubSysName -FriendlyName $StoragePoolName

#View the disks in the Storage Pool just created
Get-StoragePool -FriendlyName $StoragePoolName | Get-PhysicalDisk | Select FriendlyName, MediaType

#Create two tiers in the Storage Pool created. One for SSD disks and one for HDD disks
$SSDTier = New-StorageTier -StoragePoolFriendlyName $StoragePoolName -FriendlyName $SSDTierName -MediaType SSD
$HDDTier = New-StorageTier -StoragePoolFriendlyName $StoragePoolName -FriendlyName $HDDTierName -MediaType HDD

#Identify tier sizes within this storage pool
$SSDTierSizes = (Get-StorageTierSupportedSize -FriendlyName $SSDTierName -ResiliencySettingName $ResiliencySetting).TierSizeMax
$HDDTierSizes = (Get-StorageTierSupportedSize -FriendlyName $HDDTierName -ResiliencySettingName $ResiliencySetting).TierSizeMax 

#Create a new virtual disk in the pool with a name of TieredSpace using the SSD and HDD tiers
New-VirtualDisk -StoragePoolFriendlyName $StoragePoolName -FriendlyName $TieredSpaceName -StorageTiers $SSDTier, $HDDTier -StorageTierSizes $SSDTierSizes, $HDDTierSizes -ResiliencySettingName $ResiliencySetting  -AutoWriteCacheSize -AutoNumberOfColumns

#Alternatively try adjusting the sizes manually:
#New-VirtualDisk -StoragePoolFriendlyName $StoragePoolName -FriendlyName $TieredSpaceName -StorageTiers @($SSDTier,$HDDTier) -StorageTierSizes @(228GB,1.816TB) -ResiliencySettingName $ResiliencySetting -AutoWriteCacheSize -AutoNumberOfColumns

The following example shows how to create a Multi-Resilient volume where SSD tier is mirrored and HDD tier is configured in Parity.

New-StorageTier -StoragePoolFriendlyName Pool1 -FriendlyName SSD_Tier -MediaType SSD -ResiliencySettingName Mirror
New-StorageTier -StoragePoolFriendlyName Pool1 -FriendlyName HDD_Tier -MediaType HDD -ResiliencySettingName Parity
$ssd_tier = Get-StorageTier -FriendlyName SSD_Tier
$hdd_tier = Get-StorageTier -FriendlyName HDD_Tier
New-VirtualDisk -StoragePoolFriendlyName Pool1 -FriendlyName "VirtualDisk" -StorageTiers @($ssd_tier,$hdd_tier) -StorageTierSizes 100GB, 300GB

Source: https://www.starwindsoftware.com/blog/configure-a-resilient-volume-on-windows-server-2016-using-storage-spaces