Stripe-sets via Storage Spaces

I had a bunch of spinning disks sitting around I wanted to stripe together as build output targets.   The RAID hardware in my desktop is known to be flaky, so I decided to try out Storage Spaces.  The default "simple" storage space doesn't actually span all disks in the pool - it attempts to keep copies of data together, and is optimized for making a volume that's larger than any individual disk.

Some bing-ing and stack-overflow later and I came up with the following powershell.

 # Remove all pool members
Get-StoragePool -FriendlyName MyPool | Get-VirtualDisk | Remove-VirtualDisk
 
"x","y","z" | %{
 $letter = $_
 New-VirtualDisk -StoragePoolFriendlyName MyPool -ResiliencySettingName Simple -FriendlyName output_disk -Size 500gb -ProvisioningType Fixed -NumberOfDataCopies 1 -NumberOfColumns 4 | Get-Disk | Initialize-Disk -Passthru | New-Partition -DriveLetter $letter -UseMaximumSize
 $driveletter = $letter+":"
 format $driveletter /fs:ntfs /q /x /a:64K
} 

Note that you'll need to have created the pool with the name "MyPool".  Replace the "-Size" parameter with your desired size, and set "-NumberOfColumns" to the number of physical disks in the pool.  (I'm sure I could determine that from the pool object in the future.

Et voila - a real actual stripeset!  I had three builds, so I used x/y/z as the outputs.

FWIW, this setup got me within ~10% of the build time using an SSD for the output, without the SSD cost.