Overview

Storage Spaces is a disk virtualization technology that first introduced in Microsoft Windows Server 2012. This is a further development of Windows Dynamic Disk Management. The basis is the concept of disk pools widely used in solutions of various manufacturers: individual server physical disks are combined into one or several pools. Volumes with different levels of performance and resiliency are created based on these pools. The technology supports connection via any interface (ATA, SATA, SAS or USB) and allows us to combine drives with different sizes.

Using Storage Spaces instead of a hardware RAID controller has several advantages and disadvantages which will be discussed in detail below.

Legend

  • Storage pool is a set of physical disks. One pool can contain disks that differ in volume, performance and connection interface.

  • Virtual disk is a term for defining a logical volume in Storage Spaces. To create a virtual disk the capacity of the selected disk pool is used. At the same time several resilient options are available (they can be combined within one pool) most of which are counterparts of traditional RAID arrays of various levels.

    • Simple - counterpart of RAID-0. The data stream is divided into strips (the default size is 256Kb as a default Interleave value) which are distributed across the disks in the pool. The simple virtual disk provides optimal use of disk capacity and is the most productive. But does not imply any resiliency.

    • Mirror - for each stripe in the mirror virtual disk there is additional one (double mirror, 2-way mirror) or two (triple mirror, 3-way mirror) copies. The equivalent in terms of using the disk capacity for a double mirror is RAID-10 (or 1E for an odd number of disks). Mirrored virtual disk is protected from the loss of one or two disks accordingly.

    • Parity - recording stripes on disks alternates with writing a checksum. Disks with dual parity was introduced in Windows Server 2012 R2. It additionally writes a second checksum. Like similar RAID-5 and RAID-6 virtual disks with parity they allow the loss of 1 or 2 disks. And ensure minimal loss of disk space (-1 or -2 disks accordingly). A traditional disadvantage of any checksum volume implementations is the low write performance due to the need to modify the entire full stripe along with the checksums. The lack of fixed allocation of strips in the Storage Spaces and RAM cache on the controller (using regular HBAs) makes it even worse.

  • Enclosure awareness. Windows Server 2012 R2 introduces the functionality of enclosure awareness: when placing strips the placement of disks on different disk racks (SAS JBOD) is taken into account to obtain resiliency at the level of racks. For example, a virtual disk with double mirroring (2-way mirror) located on three disk racks allows the loss of one disk rack as a whole.

  • Columns. The parallel distribution of stripes in a virtual disk is determined by the number of so-called columns. For maximum performance the number of columns for virtual disks with a simple and parity resiliency level should correspond to the number of physical disks. But in the default settings the maximum number of columns is 8 (for simple). This is due to the peculiarities of the pool's expanding capacity mechanism: for optimal use of capacity the number of added disks should correspond to the maximum number of columns used by virtual disks. And for mirrored disks the number of columns * number of copies stripe (2 for 2-way mirror, 3 for 3-way mirror).

  • Storage tiers. Windows Server 2012 R2 introduces 2-tier support (SSD and HDD) for storing data on Storage Spaces virtual disks. Prioritization of access to the fast tier from the SSD is possible by controlling the capacity (when creating a virtual disk a combination of the volumes of SSD and HDD tiers is indicated) or at the file level: the necessary file can be linked to the SSD-tier in order to get a guaranteed performance.

  • Write-back cache. To compensate a poor performance with random recordings a small portion of the SSD (in the pool) is used to cache the records. In this case the remaining part of the SSD can be used for tiered storage.