Storage Spaces in Windows 8 is the next evolution of Windows Home Server Drive Extender. It is also available in Windows Server 2012 as an enterprise class solution. It adds another feature that Drive Extender did not have, and that is parity level redundancy. This is a more efficient in space, but also more computationally expensive than automatic duplication. Since my server will consist mostly of unchanging or infrequently changing data, and will be a dedicated machine with an AMD Phenom II X4 CPU, I’m really unconcerned with processing overhead.
Ease of Use
Storage Spaces is incredibly easy to use. Simply create a new storage space and add the physical drives you want to use. Since this operates in the OS level, any type of storage is available. SATA, USB, IDE, SAS, etc. are all available to be added to the pool.
I initially created a virtual machine with an 8GB, 16GB, and 24GB drives in a Storage Space pool with Parity level redundancy. At some point after passing 8GB of storage, I was notified with a warning that I was low on space and needed to add another drive. This appears to be somewhere around 75% of true capacity.
An interesting feature is the ability to add multiple storage spaces to the same storage pool. Since I had 3 mismatched drives of 8, 16, and 24GB, I was only able to actually utilize that storage pool to roughly (N-1)*(Min[Capacity]), or in this case 16GB. I actually showed 17GB stored, but removing a drive had no issues except to report that I had lost a drive. Now, my array is sitting there with ~24GB of unused disk space.
I can make use of this extra space simply by adding another Storage Space using Mirroring (2 way). I was able to store another ~7GB of data in this space. Now my array is still sitting with ~8GB unused on a single drive. Obviously, I can have no redundancy on this drive since there is no second drive to utilize. However, if I want to use the space just for temp files (maybe a local copy of DropBox, since that is already stored remotely), I can add one more Storage Space that was able to store another ~9GB of data with no level of redundancy. No space needs to be wasted! If you’ve been keeping up on the math, you may have figured out that the last space should have been ~8GB. This difference is due to the fact that I removed the 24GB drive to test recovery, and replaced it with a 25GB drive.
The Bad
Windows does not calculate your true capacity to any finer detail than adding the capacity of the drives in the pool and doing the basic division (capacity / N for parity or capacity / 2 for mirroring). This is not too big of a deal, it’s not hard to calculate yourself if you really want to set the capacity maximum. Storage Spaces does thin provisioning, which means it does not have to have the physical space to backup what is reported available, and that space can be added later. It will report when the actual capacity is being approached as a warning. Once the space is exceeded though, instead of simply reporting an out of disk space warning, the space will simply go offline. This has to be manually brought back online. I find this highly undesirable. Perhaps this is the only way to enable backwards compatibility for SMB sharing. However, I was doing all of my testing within Windows 8, so it should have the ability to understand its own file systems.
Rebuilding / Upgrading
Rebuilding the broken array does not begin until the missing drive is manually removed from the pool definition, even if a replacement drive has already been added to the array. There is also no way to force re-balancing of the array when adding another drive. Another piece that I dislike is that there is no graceful way to remove a physical disk from the pool once it has been used for underlying storage, even if there is plenty of capacity. For example, let’s assume I want to remove the 8GB drive and add another new 25GB drive. This is reasonable in the course of upgrading or replacing drives that have been reporting issues. It makes sense that I can’t remove the 8GB drive, since 3 drives are required for parity and I may not have enough capacity. Once the 25GB drive is added, I have the option to remove it, but not to remove any of the other drives that are equal or smaller in size. I would expect this process to take some time, but it should be possible. It is possible, but only by intentionally breaking the array. I can add the new drive and then remove the old drive as long as my spaces include some level of resiliency. Once the physical drive is removed, the option to remove the drive from the pool is available.
Verdict
Ease of Use: 4/5, Available space calculations should be more readily available, and drives should not go offline simply because they are filled.
Drive loss limit: 1 (or 2 if using Triplication)
Performance: N/A
Expansion / Upgrade options: Functional, no automatic rebalancing. Removing old drive requires breaking the array or alternative storage space / backups.
Efficiency: N-1 (or N/2, N/3)
Cost: Free with Windows 8 or Windows Server 2012.
Viable: Yes (pending performance tests).