Storage spaces taking much more space than expected

wakkawakka321

Junior Member
Jul 17, 2013
7
0
0
Hi,

So this is my first experience using storage spaces to make a bunch of disks for the purpose of a RAID (type) array.

I have 6 x 3TB western digital red drives added to the storage pool. I have selected parity as the resiliency type for the storage space but am presented with a default size value of 10.9TB which matches up with an "including resiliency" value of 16.3TB which is the same as the total pool capacity.

My assumption was that parity resiliency type operated the same or similar to RAID 5 functionality, allowing 1 drive to fail. After formatting, the drives have an available space of 2.72. 2.72 x 6 = 13.6, not 10.9. Does storage spaces handle HDD space differently to other solutions such as unRAID or standard RAID 5?

Thanks
 

code65536

Golden Member
Mar 7, 2006
1,006
0
76
It seems that Storage Spaces uses 50% parity. With a 3-disk array, when I create a space, the "with resiliency" space cost is 50% more, which is to be expected with 3-disk. But with 4-disk, it's still 50% more, when it should instead be 33% more. On the upside, having more resiliency than what's needed to guard against a single drive fail might, in theory, protect me from the fail+UER scenario...
 

code65536

Golden Member
Mar 7, 2006
1,006
0
76
Okay, I figured it out.

When you create a parity storage space, Microsoft defaults to 3 columns: 2 data, 1 parity, regardless of the number of disks in your pool. So if you have 3 drives, parity is effectively RAID5, and if you have 6 drives, parity is effectively RAID6. And with 4 or 5 drives, you have some weird thing in between.

You can control the number of columns (and a bunch of other useful settings), but not through the GUI. The GUI is hopelessly dumbed-down and useless. The vast majority of settings can be accessed only through PowerShell.

Anyway, for a 4-disk array where you want 1 disk worth of parity, you need to create your space using the following:
Code:
New-VirtualDisk -FriendlyName "NAME_OF_MY_SPACE" -Size 1.5TB -StoragePoolFriendlyName "Storage pool" -ProvisioningType Fixed -ResiliencySettingName Parity -NumberOfColumns 4 -Interleave 262144

"Storage pool" is the default name of the storage pool created by the GUI. If your pool's name is difference, change it accordingly.

ProvisioningType can be either Thin (that's the default) or Fixed. You can still enlarge a Fixed-provisioned space. Running out of space on a Fixed space is just like running out of space on any regular drive (except that you can enlarge the space if you have the pool capacity), but running out of pool capacity when you have a Thin-provision space causes various unpleasant problems that people have reported in the forums.

You can replace the -Size <nn> parameter with -UseMaximumSize if you want the space to occupy all the remaining pool capacity.

NumberOfColumns is the important bit here. Setting it to match my number of disks not only reduced the parity size to what I expected it to be, but it also improved my write speeds (from about 30MB/s to 40MB/s).

You can play with Interleave (the analog to stripe size) to see what works best. It can go as low as 16K and must be a power of 2. The default of 256KiB was actually the best for my setup. Write performance dropped when I went lower and when I went higher.


Finally, one last thing: if you have good battery power backup, you might consider running this:
Code:
Set-StoragePool -FriendlyName "Storage pool" -IsPowerProtected $true
That boosted my sustained sequential write speed from 40MB/s to 70MB/s.

So between fixing my column count so that it matched my disk count (which also led to better balancing) and toggling the power protection option, I boosted my write speeds from 30MB/s to 70MB/s.
 

ChronoReverse

Platinum Member
Mar 4, 2004
2,562
31
91
Finally, one last thing: if you have good battery power backup, you might consider running this:
Code:
Set-StoragePool -FriendlyName "Storage pool" -IsPowerProtected $true
That boosted my sustained sequential write speed from 40MB/s to 70MB/s.

So between fixing my column count so that it matched my disk count (which also led to better balancing) and toggling the power protection option, I boosted my write speeds from 30MB/s to 70MB/s.

This last part is important. Performance on my RAID1 using Storage Spaces was abysmal until I did that.

In the end I dropped Storage Spaces altogether because it was still underperforming significantly. Not sure why it would drop the write speed of my 3TB drives to 50% when it's not even calculating parity.