none
Current Storage Spaces method flawed and buggy

    General discussion

  • Okay, so I tried out Storage Spaces with the Windows 8 Enterprise Evaluation, which I understand to be a RTM version. Specifically, the Parity scheme.

    I had three empty discs which I used for it: 320 GB, 1 TB, 2 TB. The manager told me that the maximum capacity for this setup would be ~2 TB.

    I then proceeded to fill the space up, resulting in a horrible write speed of ~20 MB/sec. Okay, that can be accepted, it is a software solution, after all.

    Here's the kicker, though: Upon reaching ~0.9 TB, the storage space vanished! Yes, vanished.

    After invoking the Storage Space Manager, I discovered that the space was deemed "full" and that I was to add another disc. I also took a look at the volumes itself. Hmmh. The 320 GB disc was 100% filled, the 1 TB was at 32% and the 2 TB at 16%. And what are 32% of 1 TB and 16% of 2 TB? Why, 320 GB!

    So, instead of creating a Parity storage space, it simply downsized every hard disc to the lowest denominator, i.e. 320 GB.

    Which means that there are two massive problems here:

    1. It's lying about the remaining capacity (which is confusing in itself: The manager talks about the storage space having a 2 TB capacity, but directly above it talks about a 3.01 pool capacity?)
    2. It also gives no warning when the real capacity is reached and the pool is deemed "full". It simply takes the pool offline (instead of, say, reverting to a "read-only" mode with a warning) and you have to bring it online manually. Not fun.
    Saturday, August 18, 2012 5:19 PM

All replies

  • Hey, it gets better. So, I emptied the Storage Space and proceeded to delete it, when I saw this. I think there's some huge flaw in the software:

    Saturday, August 18, 2012 7:27 PM
  • I had the same frustrating experience - I had 2 old 320 Gb and 1 500 Gb drive which I wasn't using.  I figured since they're older that setting up an array with parity would protect me against drive failure and let me get some use from these drives.

    When the drive approached that hidden "full" mark it was taken offline, and I saw exactly what you did - the 500 Gb drive was only supplying 320 Gb to the array.

    I wasn't as concerned about the write speeds since the speed of the slowest drive wasn't that great to begin with - but I saw that others using much newer and faster drives had also complained about the same problem.

    Wednesday, August 22, 2012 9:30 PM
  • Today while I copied data over to it, it once again reached "full" status and turned itself "offline" - but this time it won't come back "online" - it changes right back to 
    "offline" as soon as I try to bring it online...  So essentially I cannot access any of the data on the drive anymore.

    I think this spells the end of my Windows 8 experiment.

    Friday, August 24, 2012 1:11 AM
  • Since the storage space is thinly provisioned, allocation of new capacity occurs as needed.  Once capacity is exhausted, there is no room to properly manage files on the storage space and there is a risk of data loss due to file corruption.  To protect against that, Windows takes the storage space offline – removing the storage space from the view of anything that was writing and thereby keeping your files safe.  Once the pool has more drives, you can bring the storage space back online and continue running.

    When additional drives are not immediately available, you can try to just bring the storage space back online and get to your files until additional drives are available.  However, sometimes applications, or the file system itself, may continue writing once the storage space is online.  If that happens, then Windows’ safety measures will again protect your files by taking the storage space offline.

    If additional drives are not immediately available and the storage space cannot remain online, then can still get to your files by using PowerShell to temporarily make your storage space read-only.

    Get-VirtualDisk –Friendlyname name_of_your_space | Get-Disk | Set-Disk –IsReadOnly $true

    Get-VirtualDisk –Friendlyname name_of_your_space | Get-Disk | Set-Disk –IsOffline $false

    If you do that, then you will want to switch your storage space back to read-write once your storage pool has additional drives.  You can use PowerShell to do that as well.

    Get-VirtualDisk –Friendlyname name_of_your_space | Get-Disk | Set-Disk –IsOffline $true

    Get-VirtualDisk –Friendlyname name_of_your_space | Get-Disk | Set-Disk –IsReadOnly $false

    Get-VirtualDisk –Friendlyname name_of_your_space | Get-Disk | Set-Disk –IsOffline $false

    An interesting question to ask at this point is why the parity space became full even though two drives in the storage pool still had unused capacity.  That happens because a parity space must be able to place at least two pieces of data and one piece of parity in order to protect your files from drive failure.  Parity spaces must have unused capacity on three drives.  When a storage pool has unused capacity on only two drives, the parity space cannot continue to write data.  That is what the message about parity spaces on the “Create a storage space” page is trying to communicate.

    In both your cases, the smallest drive was 320GB.  Given parity spaces needs at least three drives, as it wrote more data, it allocated capacity from all three drives at the same time.  Once the smallest drive became full, the parity space is not able to write any more data.  This is also why you will see the parity space, so far, has only used 320GB from the other two drives in the storage pool.  Once you are able to add another drive, then your parity space can continue to allocate capacity from three drives at the same time and, therefore, can continue to write more data.

    The next question to consider is how a parity space is able to be much larger than the smallest drive in the storage pool.  That is possible due to a technology called thin provisioning.  Thin provisioning means you can simply state the size you think your storage space might eventually grow to be without actually having enough capacity on enough drives in the moment of creating the storage space.  This lets you wait to purchase drives until you actually need them.

    Thin provisioning does even more for you.  For example, I have family photos and videos.  I do not know how many photos and videos I will eventually have, I do not really know how many I will take in a year’s time.  What I do know is I will take more photos and videos each year.  I also know I treat my photos differently from my videos.  I tend to crop, splice, and otherwise edit my photos quite a bit.  I like to keep my photos on a mirror space, given mirror spaces provide the best performance.  However, I tend to only watch my videos (I once would trim my videos, but do not even do that anymore).  So, for my videos, a parity spaces makes a lot of sense, given parity spaces provide the best capacity utilization.

    Thin provisioning means I do not have to predict the ratio of photos to videos.  I can simply pick a large number for both, say 16TB, and let my storage spaces allocate capacity from the pool drives on demand, as I add more photos and videos.  Despite being 16TB each, my storage spaces will only use the capacity they need.  Thin provisioning means I can start with just three 1TB drives in my pool, despite my storage spaces being much larger.  I will not have to add more drives until I have enough photos and videos and actually need more capacity.

    The “Building Windows 8” blog has A more detailed example (http://blogs.msdn.com/b/b8/archive/2012/01/05/virtualizing-storage-for-scale-resiliency-and-efficiency.aspx).

    So, how will you know when you are ready to add more drives to your pool?  Windows helps you here as well.  You will get an early warning from Action Center.

    As a storage space comes closer to running out of capacity, Action Center’s notifications increase.

    Finally, if you do not add more drives to the storage pool (and as your screenshots display, the control panel will tell you the minimum number of drives to add), then Windows will protect the files which are already on the storage space by taking the storage space offline.  So, when you do not see your storage space in Explorer, you can check the Storage Spaces control panel and see your storage space is offline and your pool needs more drives.

    Adding new drives to the storage pool provides the additional capacity the storage space needs.  You will be able to bring your storage space back online and continue to copy new files into it.

    -Darren

    Thursday, August 30, 2012 7:57 AM
  • So... I read the very long technical description...

    And in summary it means??? For the end user.....

    Don't mix smaller hard drives with larger ones because Spaces is designed badly and runs out of room for parity before it runs out of actual space? So you will never be able to use all of the space without adding yet more hard drives, making "using all the space" an ever retreating goal?

    Ie, if I mix 3 1TB drives and 1 2TB drive, I may never get to use 5TB of space (minus parity) because it would only be able to store enough for 1TB of parity per drive?

    Sunday, October 28, 2012 6:41 AM
  • Alvin,

    It's entirely possible to mix smaller drives with larger drives. Let's take the initial example. Say you have a 1TB drive, a 2TB drive, and a 320GB drive. For convenience, let's refer to them as disks 1, 2, and 3.

    If you set up a parity storage space of say, 8TB (irrelevant to the example), all three physical hard drives would be written to as data accumulated. Once disk 3 is full, it would not be possible to add more data *because parity requires at least three disks* and all the data so far was being written to disks 1, 2, and 3. If you add a fourth disk, lets say 500GB (disk 4), to the storage pool and the storage space, data can continue to be written because new data would be written to disks 1, 2, and 4.

    However, that is because the space was created originally with three disks, and the column settings and parity distribution cannot be altered once created (as far as I know). I admit I am not totally familiar with spaces that *begin* with four or more drives. In my example, creating a space with four disks available... I believe the parity would be a smaller percentage, but I'm unsure at that point what would happen once the smallest disk filled. Would the overhead become higher again and only be written to three disks, or would the array be "full" at that point again? I don't know, but I'm sure someone else does.

    Sunday, October 28, 2012 3:31 PM