none
Question about amount of parity in storage pool RRS feed

  • Question

  • I was setting up a test storage pool consisting of five 2TB drives. I set it to parity and was surprised to see how small my storage pool was. I'm not sure how the inner working go but I thought I would suffer one drive worth of space to parity but it is much more than that. Five 2TB drives totals to a little over 9TB total (stupid measurements) but when I set it to parity I only get about 6TB when I was expecting closer to 7.25. Why so little? How does Windows calculate parity for a storage pool?
    Wednesday, August 22, 2012 1:14 AM

All replies

  • The total available space is not as simple as one plus another. You may see the following article.

    http://blogs.msdn.com/b/b8/archive/2012/01/05/virtualizing-storage-for-scale-resiliency-and-efficiency.aspx


    Please remember to click “Mark as Answer” on the post that helps you, and to click “Unmark as Answer” if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread. ”

    Thursday, August 23, 2012 8:44 AM
    Moderator
  • The total available space is not as simple as one plus another. You may see the following article.

    http://blogs.msdn.com/b/b8/archive/2012/01/05/virtualizing-storage-for-scale-resiliency-and-efficiency.aspx


    Please remember to click “Mark as Answer” on the post that helps you, and to click “Unmark as Answer” if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread. ”

    Right, I read that article before and again after this happened, but it didn't really answer anything.  And I know available space is not as simple as one plus another. I read that the parity feature of Storage Spaces is similar to RAID 5. If that is the case, why is the efficiency so poor? Why is the parity so large? A RAID 5 type system should have 1/n for parity, in this case 20%. Yet it is closer to 33%. How does storage spaces determine the amount of space needed for parity?
    Thursday, August 23, 2012 6:54 PM
  • I have the same issue - my 5x2TB disks (which result in a pool capacity of 9.09 "real" TB) only gives me a maximum of 6.06TB in a parity configuration. It seems as though the algorithm has not updated, from the minimum of 3, based on the number of disks or columns that Storage Spaces will use for parity striping. The article quoted above indicates that 8 disks would equal about 12.5% overhead, as expected, which means that with 5 disks I should expect to see n-1 capacity, or (9.09/5)*4, or 7.27TB.

    In its current state, I cannot use this as the disk overhead is too great. 6TB from 9.09TB? No thanks. Very frustrating.

    Monday, September 24, 2012 8:33 PM
  • I raised this nearly a week ago with MS Support and they yesterday they confirmed it as a bug.

    Well as I needed to progress this issue I had to devote some more of my own time to it. I created a new build in my lab with 8 physical disks available to pool and spent some time testing various configurations and commands. What I have found is that it is isolated to a bug in the Storage Spaces GUI; i.e. the underlying PowerShell Storage cmdlets are working as expected.

    Here are the steps I took to achieve my desired result:
    1) Create a Storage Pool of all required disks (in this case 8x68GB, named "JStore") - this can be done via GUI or Shell
    2) From an administrative PowerShell session run this command:

    New-VirtualDisk -FriendlyName "Parity_Max_Auto" -StoragePoolFriendlyName JStore -UseMaximumSize -ResiliencySettingName Parity -AutoNumberOfColumns

    3) Run Get-VirtualDisk to confirm success:

    FriendlyName        ResiliencySettingNa OperationalStatus   HealthStatus        IsManualAttach                     Size
                        me
    ------------        ------------------- -----------------   ------------        --------------                     ----
    Parity_Max_Auto     Parity              OK                  Healthy             False                            469 GB

    4) Run Get-VirtualDisk | Get-Disk | Initialize-Disk
    5) Run Get-VirtualDisk | Get-Disk to get the disk number (in this case 10)
    6) Run New-Partition -DiskNumber 10 -UseMaximumSize -AssignDriveLetter to create a new partition
    7) Run Format-Volume -DriveLetter F -FileSystem NTFS to format the volume

    This series of commands creates a parity space with a 1/n parity allocation as expected giving 469GB usable in this instance, which equates to 1/8. I'm going to try and apply it to my 9TB build tonight and see what happens there. It worries me that Win8 can get to RTM with this bug still apparent, but I hope this at least helps someone else to utilise Storage Spaces properly.


    Cheers

    • Proposed as answer by stlc8tr Thursday, October 22, 2015 9:17 PM
    Tuesday, October 2, 2012 4:13 PM
  • I've had confirmation from MS that this is a bug in the GUI element of Storage Spaces on Win8. The underlying PowerShell Storage cmdlets function as expected, and you should be able to create your Storage Space using PowerShell. Once created, management can be done via the shell or the GUI, as it seems to be only the creation wizard that is affected by the bug.
    Friday, October 12, 2012 9:28 AM
  • Thanks for the steps and commands!

    I had tried to create a new parity array with 4x4.54TiB drives (18.1 TiB total)  on my Windows 8.1 system and couldn't figure out why the GUI was telling me that only 12 TiB was available instead of the expected 13.6 TiB. Following your steps, I was able to use PowerShell instead to create the 13.6 TiB array. It's amazing that this bug still exists in 2015!

    Thursday, October 22, 2015 9:22 PM
  • I found out what's going on.  The number of columns can be thought of as the number of drives.  If there are 3 drives, data is written into columns 1 and 2 and then parity in column 3.  The GUI uses "AutoNumberOfColumns" and the example above uses "AutoNumberOfColumns" which automatically forces the number of columns to 3 regardless of how many drives you have.  So in an 8 drive array/pool, the first stripe has parity written to the 3rd and 6th drive, then the second stripe has parity written to the 1st, 4th and 7th drive, and so on.

    So, if you have more than 3 drives and only want parity written once per stripe, you should follow the instructions above, but change the New-VirtualDisk command so that the number of columns equals the number of drives in your array.

    For my 8 drive array:

    New-VirtualDisk -FriendlyName "Parity_Max_Auto" -StoragePoolFriendlyName "Storage pool" -UseMaximumSize -ResiliencySettingName Parity -NumberOfColumns 8

    Now my 8 5.45TB drives shows 38.19TB.  (5.45*(8-1)=38.15)

    Wednesday, February 1, 2017 10:38 PM