Windows Server 2012 introduces many, many, many new features. Just in the realm of storage it would be difficult to cover all storage features in appropriate detail within a single blog post. This post is just one installment about Windows Server 2012 storage features. Those of you with MSDN subscriptions may have noticed that the RTM ISO images for Windows Server recently landed in the download area. If you’re like me, this means it is time to update all the servers and virtual machines in the home lab to the latest Windows Server OS. Storage is such an important piece of any server deployment. Therefore, it is important to have a good understanding of the new features and capabilities for storage that Windows Server 2012 provides. This seems like a good opportunity to highlight one of the new Windows Server 2012 storage features known as Storage Spaces.
When I first loaded a beta build of Windows Server 2012, I noticed something new and thought, “What are Storage Spaces and when would I want to use them?” A seemingly valid question led to some research, experimentation, and delight. From a high level, Storage Spaces are all about provisioning storage based on a pooled model…while making management of some types of storage easier. By using Storage Spaces, you have the ability to organize storage in a different way.
Perhaps you have:
You may combine various types of storage for a single use. In fact, you may use individual disks (JBOD) for Storage Spaces...even if the disks are of different capacity. For instance, have you ever had a need for storage where you didn’t have a drive available that was large enough but you had a few others around of different sizes that when put together could address the need? Storage Spaces can help with these situations also.
When installing Windows Server 2012 on my home server, I found an immediate use for Storage Spaces that so far has relieved a constant headache. The server contains a SATA based RAID controller with 9 1TB drives. (Doesn’t everyone need that many terabytes on their home server?) That controller periodically will kick a drive out of the array regardless of how I’ve configured it and sometimes does not allow regeneration. There’s nothing wrong with the drives. I very simply put all drives into a storage pool using Storage Spaces with two of them as spares. In 4 months of constant operation no drives have experienced issues and the spares have remained available as spares. Previously, when using the RAID controller with the vendor supplied software the server was lucky to make it a couple of weeks without incident or data loss. Being a location for storing backups and iSCSI targets from my home and lab network, this system doesn’t require enterprise level I/O performance. Storage Spaces provided much more flexibility for my storage needs. In fact, performance was better than when using the vendor's software-based raid driver. This is likely a unique situation but illustrates one possilble use.
When advising my customers or teaching past Windows Server curriculum, my position has been that software fault tolerance was more of a medium to low-end solution and to always go with hardware fault tolerance (RAID) when available – especially for enterprise class situations. Software FT has not typically been something to rely on as an enterprise class solution when there is a real SAN available...although there are likely exceptions. Storage Spaces has something for many different situations and is available to the enterprise customer as well. My standard disclaimer regarding storage is that testing is a wonderful way to scope out how technology fits different situations and it is always wise to prove out how particular storage or storage configuration does or does not address the needs of applications.
If you’ve used Windows Home Server before, you may find that Storage Spaces seems somewhat familiar but is not exactly the same and should not be assumed to be the same thing. Storage Spaces brings some features formerly only available in enterprise class storage to the scene that may fit a number of situations well.
Some of the goals of Storage Spaces include the ability to:
It is also possible to utilize Storage Spaces with Failover Clusters. However, with clusters you are limited to Serial Attached SCSI (SAS) as a storage medium. Failover clustering does not support Storage Spaces using other storage technologies. Just because the list above mentions USB as a capability doesn't mean use of USB storage on a server with other faster storage in the same pool is a good idea. Use of USB in a pool may be more practical on a Windows 8 client or while developing a proof of concept. Performance of this technology depends also on the performance capabilities of the storage you choose to pool together.
With goals in mind, below are some additional limitations:
Creation of Storage Spaces is easy via the UI in File and Storage Services. Very simply choose to create the storage pool, select the disks and you’re done. After that, you may create volumes based on that pool. The UI can show you for each selected storage pool what virtual drives it provides and what physical drives provide the storage of the selected pool.
The volumes you create within a storage pool are basically virtual disks located on the storage pool that you may then partition, format, and assign drive letters as applicable. Storage Spaces maintains the health of these drives and any redundancy selected. Storage Spaces stores metadata on every volume within the storage pool that defines how data will be stored within the pool.
If you’re really technical and look at the device stack for a disk on occasion within a debugger, you would notice that access to a virtual disk that is part of a storage pool also utilizes the SpacePort.sys device driver. This is a necessary driver to provide the Storage Spaces functionality within Windows. You may also find this driver within Device Manager listed under Storage controllers as Microsoft Storage Spaces Controller. Further, when you look at an actual disk device with something like the System Information tool under System Tools, you will note the model as Microsoft Storage Space Device.
Typical provisioning for a volume that uses all available space is referred to as thick provisioning. It is possible to use thin provisioning with Storage Spaces which allows allocation of virtual drives larger than available space. With thin provisioning, blocks are only used from the pool as used by virtual disks. With thick provisioning, virtual disks will use and map all available space from the storage pool. However, be aware that when using thin provisioning, it is important to monitor disk usage closely to avoid the reality of an overcommitted pool. You may still add additional space to the pool as needed by adding additional drives. Also note that thin provisioning is not supported with failover clusters.
All storage that meets acceptable criteria for Storage Spaces will be placed in the Primordial Pool. This can be considered the default pool for devices from which any other pools will be created. Consider the following sample of a Primordial Pool:
Notice that there are no other virtual disks or pools at this point. The Primordial Pool will only consist of physical storage devices that do not belong to any other pools. What is nice is that when managing multiple servers within Server Manager, you can see available storage pools at a glance:
In a later post I plan to cover some of the PowerShell cmdlets that pertain to Storage Spaces. The Storage Spaces feature itself is definitely worth understanding as it provides some great features, capabilities, and flexibility within Windows Server 2012. Until then, I hope you will try out Storage Spaces.
When you say "this system doesn't require enterprise level I/O performance" and "performance was better than when using the vendor's software-based raid driver", could we see some numbers that put the quotes into context? I've not had a chance to test spaces with physical disks yet (only virtual ones), but going by the results at homeservershow.com/server-2012-storage-spaces-testing-the-rtm-version.html the write speeds leave a lot to be desired. Is this normal in your experience?
In your text is noted, that Storage Pools are not usable on CSVs: "Not supported on boot, system, or CSV volumes".
But in blogs.msdn.com/.../10314262.aspx is shown, how to configure Storage Spaces for CSVs.
Now my Question: Which configurations will work, which not?
Thanks for pointing that out. Our post should have indicated that Storages Spaces formatted with ReFS can't be used for a CSV. Storage Spaces are compatible with cluster shared volumes: technet.microsoft.com/.../hh831739.aspx
Here's some additional information on the requirements for CSVs: technet.microsoft.com/.../jj612868.aspx
What about Recovery of the Storage Pool Solution?
If my motherboard is dead, can I install a new copy of Windows Server 2012 and import my SP in a brand new system?
Because I am seeing in the homeservershow.com/server-2012-storage-spaces-testing-the-rtm-version.html that import between Server 2012 and Windows 8 is not working at all. What about totally identicall systems?
Yes, storage pools can be imported on another system of like OS version. I have a follow-up post that should be published soon that covers how to import on a different system, step by step. Trying to import to a different class OS (like you mentioned) is not an option.
Thanks for the feedback, James. I did not collect I/O performance on that system so I don't have any to publish. Also, I think write speeds may vary somewhat depending on how you configure the volumes on a storage space and the potential performance available from the hardware.
Great Post as this is all new technology. I have setup a 2012 hyper-v host, with 4 135GB drives to create a storage pool. I am testing this all out before i turn over server for a new PROD environment. My problem is, i can create a 2 disk storage pool. 266GB, i was able to add another 135GB disk to the pool, when i look at the storage pool it states 267GB used space and 135GB free space. I tried to extend Virtual Disk, but get an error "Unspecified error" How do you extend the virtual disk and then the volume? disk are san storage, in a corporate environment.
I was looking at the driver for the "windows storage controller" the date of the driver is 21-06-2006. Have they worked on this since 2006 ? :P ?
Ann you've created a striped volume of 2 disks hence to extend the disk further you will need 2 disks.
@ Ashish Bhambhwani - i have the 2 other disk but you get an error when you try to extend the storage pool.
Thanks for all the info, really useful! :)
I have one question though, regarding thin and thick provisioning; I have three 2TB drives wich I'd like to use in a storage pool with parity. Later, I might want to add another drive or two, do I have to use thin provisioning? Or can I use thick provisioning, and simply expand the storage pool later on?
Thanks in advance,
FYI: If you're reading this post on Windows Server 2012 Storage Spaces and storage pools, I posted a follow-up article about how to import a storage pool on another server that may be found at:
Just came across this whilst looking for some information on Storage Spaces for the 070-410 exam.
This is a great, great post. Just wanted to chime in and say cheers for posting it.
why are you saying you can't use iSCSI drives to create storage spaces? That's not true - iSCSI works fine to create storage spaces