This topic discusses common questions about Storage Spaces on Windows Server 2012 R2, Windows Server 2012, Windows 8.1, and Windows 8. For basic information about Storage Spaces, see
Storage Spaces Overview. For performance information, see
Storage Spaces - Designing for Performance.
There are three ways to manage Storage Spaces and associated storage pools and drives:
The following are the recommended configuration limits for Storage Spaces:
For clustered storage pools:
Storage Spaces offers simple spaces, mirror spaces, and parity spaces, each with unique characteristics.
You can use commodity drives attached via Serial-Attached SCSI (SAS), Serial ATA (SATA), or USB. Storage layers that abstract the physical disks are not compatible with Storage Spaces. This includes VHDs and pass-through disks in a virtual machine, and storage
subsystems that layer a RAID implementation on top of the physical disks. iSCSI and Fibre Channel controllers are not supported by Storage Spaces.
RAID adapters, if used, must be in non-RAID mode with all RAID functionality disabled. Such adapters must not abstract the physical disks, cache data, or obscure any attached devices including enclosure services provided by attached just-a-bunch-of-disks
(JBOD) devices. Storage Spaces is compatible only with RAID adapters that support completely disabling all RAID functionality.
Storage arrays that provide direct connectivity to the physical disks they house and do not layer RAID implementations or abstract the disks in any way are compatible with Storage Spaces. Such arrays are also known as Just a Bunch of Disks (JBOD).
For Storage Spaces to identify disks by slot and leverage the array’s failure and identify/locate lights, the array must support SCSI Enclosure Services (SES) version 3. For a list of compatible arrays, see the
Windows Server Hardware Catalog.
To support deployments that require an added level of fault tolerance, Storage Spaces supports associating each copy of data with a particular JBOD enclosure. This capability is known as enclosure awareness. With enclosure awareness, if one enclosure fails
or goes offline, the data remains available in one or more alternate enclosures.
To use enclosure awareness with Storage Spaces, your environment must meet the following requirements:
Storage Spaces on Windows Server 2012 R2 supports creating a clustered storage pool when using mirror spaces, parity spaces, and simple spaces. Windows Server 2012 doesn't support parity spaces on clustered storage pools. To cluster Storage
Spaces, your environment must meet the following requirements:
Note: The SAS JBOD must be physically connected to all cluster nodes which will use the storage pool. Direct attached storage that is not connected to all cluster nodes is not usable for clustered pools with Storage Spaces.
Upon creating a storage space, certain fundamental properties are locked in place. These fundamental properties include the provisioning type (thin or fixed), the resiliency type (simple, mirror, or parity), the number of columns the storage space striping
requires, and the striping interleave.
After creating a storage space, you can change properties that do not affect fundamental characteristics, such as the size of the storage space and its name.
When a disk failure occurs, Windows displays information on the disk failure in the following locations:
Physical disks often experience errors of varying severity, from errors that the disk can transparently recover from, without interruption or data loss; to errors that are catastrophic and can cause data loss. For more information, see
How Storage Spaces responds to errors on physical disks.
To help with administration, Storage Spaces will log certain events in the Event log. For more information on the events logged by Storage Spaces, see the following:
If you are using the Storage Spaces item in Control Panel, replacing a physical disk is as simple as clicking the command to remove the old disk. After that, you can immediately disconnect the disk. In the background, Storage Spaces leverages
resiliency to reconstruct your data. Disk removal has three prerequisites:
Get-PhysicalDisk -FriendlyName PhysicalDisk1 | Get-VirtualDisk
If you are using Windows PowerShell, you must perform following procedure to remove the old disk, assuming that you meet the prerequisites for removing a physical disk.
Open a Windows PowerShell session as an administrator.
Type the following command, replacing <diskname> with the friendly name of the disk:
Set-PhysicalDisk -FriendlyName <diskname> -Usage Retired
If the pool is clustered, you will need to run this command on the cluster node which has the cluster resource for the pool online.
Type the following command for each storage space that depended on the old disk, replacing <virtualdiskname> with the friendly name of the storage space:
Repair-VirtualDisk -FriendlyName <virtualdiskname>
If the pool is clustered, run this command on the cluster nodes that have the individual storage spaces’ cluster resource online and then run it again on the cluster node that has the pool’s cluster resource online.
Prior to performing step 5, you must wait for all active repair jobs to complete. To monitor the status of repair jobs, type the following command:
Type the following command:
Remove-PhysicalDisk -FriendlyName <diskname>
Physically disconnect the old disk.
Besides offering resiliency to drive failures, Storage Spaces also offers increased performance by striping data across multiple disks. Storage Spaces describes a
stripe via two parameters, NumberOfColumns and
The NumberOfColumns and Interleave parameters, which are accessible via Windows PowerShell or WMI, determine the width of the stripe (stripe_width = NumberOfColumns * Interleave). The stripe width determines how much data
and parity (in the case of parity spaces) Storage Spaces writes across multiple disks to increase performance available to apps.
A simple example is a two-column simple space, which offers striping with no resiliency.
For the first stripe of data in this example, Storage Spaces writes 256 KB (the default Interleave value) to the first disk (column) in the storage pool, then 256 KB of data to the second disk in the pool. This yields a stripe width of 512 KB (2 columns
* 256 KB interleave).
Another example is a three-column parity space (with a 256 KB stripe interleave), the simplest form of a parity space.
For the first stripe of data in this example, Storage Spaces writes 256 KB of data to the first disk (column), 256 KB of data to the second disk, and 256 KB of parity to the third disk. This yields a stripe size of 756 KB (3 columns * 256 KB of interleave).
As more data is written to the parity space, it rotates the column for the parity information among all three disks.
Another example is a two-column two-way mirror space. Mirror spaces add a layer of data copies below the stripe, which means that a two-way mirror space duplicates each individual column's data onto two disks.
For the first stripe of data in this example, Storage Spaces writes 256 KB of data to the first column, which is written in duplicate to the first two disks. For the second column of data, Storage Spaces writes 256 KB of data to the second column, which
is written in duplicate to the next two disks. The column-to-disk correlation of a two-way mirror is 1:2; for a three-way mirror, the correlation is 1:3.
You can control the number of columns and the stripe interleave when creating a new storage space by using the Windows PowerShell cmdlet
New-VirtualDisk with the NumberOfColumns and
Each type of storage space has a minimum number of stripe columns which translates to a minimum number of physical disks, given their column-to-disk correlation (below).
Minimum number of columns
Minimum number of disks
Simple (no resiliency)
Due to striping, a storage space simultaneously allocates capacity from as many disks as its stripe requires. Therefore, when increasing pool capacity, you can usually achieve optimal pool capacity utilization when you add disks in multiples of the number
of disks the storage space needs. For example, adding disks in multiples of four might provide optimal capacity utilization for a pool comprised of two-column, two-way mirror spaces (2 columns + 2 data copies = 4 disks per stripe).
Storage Spaces provides advance notification of thinly provisioned storage spaces when the storage pool does not have enough capacity spread among a sufficient number of disks to continue to write new data. The default warning point is 70% capacity utilization.
To learn when Storage Spaces will generate a warning, consider the following example.
Two of the disks have 1TB capacity and two have 2TB capacity. Because a two column, two-way mirror space needs four disks (number_of_disks = NumberOfColumns * NumberOfDataCopies), it will evenly consume all four disks as it writes new data. When capacity
utilization of the two 1TB disks reaches 70%, Storage Spaces will warn of a low capacity condition. Even though the entire pool has 3.2TB free capacity, the thinly provisioned space will soon not be able to write any more data because the 1TB disks are nearly
You can easily keep individual storage spaces’ low capacity warning synchronized with each other and with the pool by following the guidance in the next section, “How do I increase pool capacity?” from the moment of creating the pool and through all subsequent
expansions of the pool.
Storage Spaces can usually use the additional capacity from even a single additional drive. However, for optimal capacity utilization, consider the number of columns your storage spaces have and add disks in multiples of that number.
For example, consider a pool which has a four-column simple space, a one-column, two-way mirror space, and an eight-column parity space. The four-column simple space suggests you expand pool capacity in sets of four disks. The one-column, two-way mirror
space suggests you expand pool capacity in sets of two disks (for mirror spaces, you have to multiple the number of columns by the number of copies). The eight-column parity space suggests you expand pool capacity in sets of eight disks. In this example, you
would want to expand pool capacity in sets of eight disks as eight is a common multiple of the number of columns of each of the storage spaces in the pool.
Storage Spaces records information about pools and storage spaces on the physical disks that compose the storage pool. Therefore, your pool and storage spaces are preserved when you move an entire storage pool and its physical disks from one computer to
Windows Server 2012 starts storage that could potentially be shared with a cluster in a safe state. For Storage Spaces, that means the first time Windows connects to a storage pool, the pool starts as read-only and the storage spaces will start in a detached
state. To access your data, you must set the storage pool to read-write and then attach the storage spaces.
These steps do not apply to Windows 8 – storage pools start as read-write and storage spaces start as attached.
Simple and mirror spaces and the data they contain automatically migrate from the Windows 8 Consumer Preview to the Windows 8. However, for parity spaces you must backup your data and delete the parity spaces. At this point, you may upgrade or perform a
clean install of Windows 8. After the upgrade or clean installation is complete, you may recreate parity spaces and restore your data.
The health of each storage space is available only from the cluster node that has the cluster resource for the storage space in the online state. Use Failover Cluster Management to discover which node has the cluster resource for a storage space in the online
state. Then use the Storage Pools section of the File and Storage Services role in Server Manager to view the health of the appropriate storage space.
You can also use the Get-VirtualDisk cmdlet on the node that has the cluster resource online to retrieve the storage space’s properties. The resiliency health of the storage space is noted in the storage space’s properties. To view the health status of a
storage pool, use the Get-StoragePool cmdlet on the cluster node that has the cluster resource for the pool in the online state.
For the repair operation to complete successfully, the pool must have at least as much unused capacity as data to be repaired. If the storage space has a list of disks to use, then the unused capacity must reside on those disks. Unused capacity must reside
on disks which do not already host an extent of the stripe to be repaired. Because repair happens over time, this requirement must be continuously fulfilled for a successful repair completion.
For a quick check on whether repair is successfully progressing, use the Get-VirtualDisk cmdlet to look at the storage space’s
OperationalStatus. While repair is successfully progressing, OperationalStatus will be
In Service. When repair successfully completes, OperationalStatus is
OK. If repair is unable to continue, OperationalStatus returns to
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
Finally, if you do not add more drives to the storage pool (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. 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.
How are columns defined? It seems to be the number of stripes. Can you manually control this when creating the virtual disk, or is it chosen automatically?
Also some more testing results and questions at social.technet.microsoft.com/.../c35ff156-01a8-456a-9190-04c7bcfc048e
So, um, why does a three-way "mirror" require five drives?
"Disk 7 has reached a logical block provisioning permanent resource exhaustion condition."
This happens with fixed (*not* thin provisioned) volumes. I don't understand why. Here's a thread about it: social.technet.microsoft.com/.../517d1f02-b619-4a3a-928f-1bd5e8fef5fe
What if I remove a single drive from the pool, take that drive and plug it into a different non-windows8 based machine; will that data be accessible? Or must I plug it back into the pool for it to the data to be accessible?
Hi gtfourdreams - if you remove a single drive from the pool and plug it into another computer that is not running Windows 8 the data won't be accessible.
(More updates coming soon - we'll try to answer the other questions then...)
For what reason that is won't be acessible?
Storage Spaces allows you to create a pool backed by VHD images, at least in the build 8400.
Hi Elena - it's true that you can use VHDs for testing Storage Spaces, but we don't recommend or support this configuration in a production environment.
Someone has really dropped the ball on this one, and I'm afraid its somewhat indicative of the lack of engagement with those who may try these technologies in the real world. Although I'm trying this on Windows Server 2012, the same functionality exists on Windows 8. Essentially the default to create even a simple space is to use 2 coulums. If you create this with uneven disk sizes you will hit "logical block provisioning permanent resource exhaustion" as soon as the smaller drive size is reached x 2. That is to say if you have a Simple Virtual Disk made up of a 2 physical disk space of 500Gb and 2TB in size, as soon as you put 1TB within that Space you hit this error message.... on a Simple volume (by default) and not being able to change the default column size is frankly - madness. Furthermore, you shouldn't be able to copy data to a space if the OS should be able to detect in actual fact it doesn't have enough space to store the data - it should be able to know that upfront. For how many years have we copied data of a size too big to be told by Windows "there isn't enough space to fulfil your request".
As it stands Storage Spaces, although it offers a great deal of promise is thoroughly unusable "in the real world" disks going 'offline', with a UI that isn't able to efficiently guide you in resolution of these conditions is not consumer, and neither administrator friendly. I awaiting some major functionality improvements in a hotfix rollup or SP1...