How to Configure Storage Spaces on Windows Server 2012 R2

Storage Spaces is a software-defined storage technology introduced with Windows Server 2012 and significantly enhanced in Windows Server 2012 R2. It allows administrators to group physical disk drives of varying types and sizes into a storage pool, then carve virtual disks — called storage spaces — from that pool. These virtual disks can be configured with resiliency options such as mirroring or parity to protect data from drive failures without requiring traditional RAID hardware controllers. Storage Spaces is a powerful, cost-effective solution for organizations looking to modernize their storage infrastructure using commodity hardware.

This guide walks through planning, creating, and managing a Storage Spaces deployment on Windows Server 2012 R2 using both Server Manager and PowerShell.

Prerequisites

Before configuring Storage Spaces, ensure the following requirements are met:

You need Windows Server 2012 R2 installed with the File and Storage Services role available. At least two physical disk drives — ideally three or more — should be available and not yet initialized or formatted. These disks must not contain any existing partitions or data you wish to keep. The disks can be SAS, SATA, or USB drives; SSDs and HDDs can be mixed within the same pool. Administrative privileges on the server are required, and if managing remotely, Server Manager with appropriate permissions must be configured.

Understanding Storage Spaces Concepts

Before diving into configuration, it helps to understand the key components of Storage Spaces:

A Storage Pool is the aggregated collection of physical disks. Disks are added to the pool and their total capacity becomes available for allocation. A Virtual Disk (also called a Storage Space) is created from the pool and exposed to the operating system as a standard disk. Virtual disks can be configured with different resiliency layouts: Simple (no resiliency, like RAID-0), Mirror (data duplicated across drives, like RAID-1 or RAID-10), or Parity (fault tolerance with parity data distributed across drives, like RAID-5). A Volume is a partition formatted with NTFS or ReFS created on top of a virtual disk.

Windows Server 2012 R2 also introduced tiered storage spaces, allowing a single virtual disk to span both SSDs and HDDs, automatically moving frequently accessed data to the faster SSD tier.

Step 1: Identify Available Disks

Open PowerShell as Administrator and list all available disks to identify which ones will be added to the storage pool:

Get-PhysicalDisk | Select-Object FriendlyName, Size, MediaType, CanPool, BusType

Disks showing CanPool : True are eligible for inclusion in a storage pool. If a disk shows CanPool : False, it may already belong to a pool, contain system volumes, or have an incompatible configuration.

Step 2: Create a Storage Pool

Using PowerShell, create a new storage pool from the available disks. First, retrieve the storage subsystem:

$subsystem = Get-StorageSubSystem -FriendlyName "Windows Storage*"

Next, gather the physical disks that can be pooled:

$poolDisks = Get-PhysicalDisk -CanPool $true

Create the storage pool:

New-StoragePool -FriendlyName "DataPool" `
    -StorageSubSystemFriendlyName "Windows Storage*" `
    -PhysicalDisks $poolDisks

Verify the pool was created:

Get-StoragePool -FriendlyName "DataPool" | Select-Object FriendlyName, Size, AllocatedSize, OperationalStatus

Step 3: Create a Virtual Disk (Storage Space)

With the pool created, create a virtual disk. For a mirrored (two-way) virtual disk providing fault tolerance across two drives:

New-VirtualDisk -StoragePoolFriendlyName "DataPool" `
    -FriendlyName "MirrorDisk" `
    -ResiliencySettingName "Mirror" `
    -Size 200GB `
    -ProvisioningType Fixed

For a parity-based virtual disk (requires at least three disks):

New-VirtualDisk -StoragePoolFriendlyName "DataPool" `
    -FriendlyName "ParityDisk" `
    -ResiliencySettingName "Parity" `
    -Size 400GB `
    -ProvisioningType Fixed

For a tiered storage space using both SSD and HDD tiers:

$ssdTier = New-StorageTier -StoragePoolFriendlyName "DataPool" `
    -FriendlyName "SSDTier" -MediaType SSD

$hddTier = New-StorageTier -StoragePoolFriendlyName "DataPool" `
    -FriendlyName "HDDTier" -MediaType HDD

New-VirtualDisk -StoragePoolFriendlyName "DataPool" `
    -FriendlyName "TieredDisk" `
    -StorageTiers $ssdTier, $hddTier `
    -StorageTierSizes 50GB, 450GB `
    -ResiliencySettingName "Mirror" `
    -WriteCacheSize 1GB

Step 4: Initialize and Format the Virtual Disk

Once the virtual disk is created, initialize it, create a partition, and format it:

$vDisk = Get-VirtualDisk -FriendlyName "MirrorDisk" | Get-Disk

Initialize-Disk -Number $vDisk.Number -PartitionStyle GPT

New-Partition -DiskNumber $vDisk.Number -UseMaximumSize -AssignDriveLetter

Format-Volume -DriveLetter E -FileSystem NTFS -NewFileSystemLabel "DataVolume" -Confirm:$false

Alternatively, you can perform all these steps through Server Manager → File and Storage Services → Storage Pools using the graphical wizards.

Step 5: Configure Storage Pool Reserves and Hot Spares

Best practice is to designate one disk as a hot spare (standby replacement). When a disk fails, Storage Spaces automatically begins rebuilding data onto the hot spare:

$spareDisk = Get-PhysicalDisk | Where-Object {$_.FriendlyName -eq "PhysicalDisk4"}

Add-PhysicalDisk -StoragePoolFriendlyName "DataPool" `
    -PhysicalDisks $spareDisk `
    -Usage HotSpare

Verify the hot spare assignment:

Get-PhysicalDisk | Where-Object {$_.StoragePoolFriendlyName -eq "DataPool"} | Select-Object FriendlyName, Usage, HealthStatus

Step 6: Enable Storage Tiers Optimization Schedule

For tiered storage spaces, enable the automatic optimization task that moves data between tiers based on access frequency:

Enable-ScheduledTask -TaskPath "MicrosoftWindowsStorage Tiers Management" `
    -TaskName "Storage Tiers Optimization"

To manually trigger optimization:

Optimize-StoragePool -FriendlyName "DataPool"

Step 7: Monitor Health and Repair

Regularly monitor the health of your storage pool, virtual disks, and physical disks:

Get-StoragePool -FriendlyName "DataPool" | Get-VirtualDisk | Select-Object FriendlyName, HealthStatus, OperationalStatus, ResiliencySettingName

Get-PhysicalDisk | Where-Object {$_.StoragePoolFriendlyName -eq "DataPool"} | Select-Object FriendlyName, HealthStatus, OperationalStatus, Usage

If a disk shows degraded health, you can replace it. First add the replacement disk to the pool, then retire the failing disk:

$failingDisk = Get-PhysicalDisk -FriendlyName "PhysicalDisk2"
$failingDisk | Set-PhysicalDisk -Usage Retired

Repair-VirtualDisk -FriendlyName "MirrorDisk"

Extending Storage Pool Capacity

When you need additional capacity, add new physical disks to an existing pool without interrupting workloads:

$newDisk = Get-PhysicalDisk | Where-Object {$_.CanPool -eq $true}

Add-PhysicalDisk -StoragePoolFriendlyName "DataPool" -PhysicalDisks $newDisk

Then extend the virtual disk to use the new space:

Resize-VirtualDisk -FriendlyName "MirrorDisk" -Size 350GB

And extend the partition and volume:

$partition = Get-Partition -DriveLetter E
Resize-Partition -DiskNumber $partition.DiskNumber -PartitionNumber $partition.PartitionNumber -Size (Get-PartitionSupportedSize -DriveLetter E).SizeMax

Verification Steps

Confirm the complete Storage Spaces configuration is functioning correctly:

Get-StoragePool | Format-Table FriendlyName, OperationalStatus, HealthStatus, Size, AllocatedSize

Get-VirtualDisk | Format-Table FriendlyName, ResiliencySettingName, OperationalStatus, HealthStatus, Size

Get-Volume | Where-Object {$_.DriveLetter -ne $null} | Format-Table DriveLetter, FileSystemLabel, Size, SizeRemaining, HealthStatus

Summary

Storage Spaces on Windows Server 2012 R2 provides a flexible, software-defined approach to storage management. By pooling commodity drives and creating resilient virtual disks, organizations can achieve enterprise-grade storage availability without expensive proprietary hardware. With features like tiered storage, hot spares, and online capacity expansion, Storage Spaces is a compelling solution for mid-size organizations running Windows Server 2012 R2 workloads.