Introduction to Storage Spaces Direct on Windows Server 2019
Storage Spaces Direct (S2D) is a feature in Windows Server 2019 that enables you to build highly available and scalable software-defined storage using local storage drives. It replaces the need for expensive shared SAN or NAS hardware by pooling internal drives across multiple servers into a single unified storage fabric. S2D is supported in Windows Server 2019 Datacenter edition and requires a minimum of two nodes, though Microsoft recommends at least four nodes for production deployments.
S2D leverages technologies such as Storage Spaces, Storage Bus Layer (SBL), Resilient File System (ReFS), Cluster Shared Volumes (CSV), and SMB Direct to deliver enterprise-grade performance and fault tolerance. Before you begin configuration, ensure all nodes meet the hardware requirements: each node should have at least 4 GB of RAM, a dual-port 10 GbE network adapter supporting RDMA, and a compatible set of storage drives — ideally a mix of NVMe, SSD, and HDD for storage tiering.
Prerequisites and Hardware Validation
Before enabling S2D, you must validate your cluster hardware. Microsoft requires that all S2D deployments pass the Cluster Validation Wizard checks. Begin by installing the Failover Clustering feature on all nodes:
Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools
After installation, run the cluster validation test. This checks storage, networking, and system configuration across all participating nodes:
Test-Cluster -Node "Node1","Node2","Node3","Node4" -Include "Storage Spaces Direct","Inventory","Network","System Configuration"
Review the HTML report generated by the validation. All critical tests must pass before proceeding. Pay particular attention to the storage bus and network adapter tests, which S2D depends on heavily.
Creating the Failover Cluster
Once validation passes, create the Windows Server Failover Cluster. Use the New-Cluster cmdlet and specify the cluster name and IP address:
New-Cluster -Name "S2DCluster" -Node "Node1","Node2","Node3","Node4" -StaticAddress 192.168.1.100 -NoStorage
The -NoStorage flag is important — it prevents Windows from automatically adding discovered storage to the cluster, which would interfere with the S2D configuration. After the cluster is created, configure the cluster quorum. For a four-node cluster, a cloud witness or file share witness is recommended:
Set-ClusterQuorum -Cluster "S2DCluster" -FileShareWitness "\fileserverwitness"
Enabling Storage Spaces Direct
With the cluster formed, enable Storage Spaces Direct using the Enable-ClusterStorageSpacesDirect cmdlet. This command discovers all eligible drives across all nodes and creates the storage pool automatically:
Enable-ClusterStorageSpacesDirect -CimSession "S2DCluster"
The process takes several minutes. You can verify the storage pool was created successfully:
Get-StoragePool -CimSession "S2DCluster" | Where-Object IsPrimordial -eq $false
You should see a pool named “S2D on S2DCluster” with all drives from all nodes aggregated into it. Check the physical disks assigned to the pool:
Get-PhysicalDisk -CimSession "S2DCluster" | Select FriendlyName, MediaType, Size, HealthStatus
Creating Virtual Disks and Volumes
With S2D enabled, create virtual disks (storage spaces) from the pool. S2D supports several resiliency types: two-way mirror, three-way mirror, and parity. For a four-node cluster with at least four drives per node, three-way mirror offers the best fault tolerance:
New-Volume -CimSession "S2DCluster" -StoragePoolFriendlyName "S2D on S2DCluster" -FriendlyName "Volume01" -FileSystem CSVFS_ReFS -ResiliencySettingName Mirror -NumberOfDataCopies 3 -Size 1TB
This creates a 1 TB ReFS-formatted Cluster Shared Volume with three-way mirroring. The volume will appear under C:ClusterStorageVolume01 on all cluster nodes. For workloads that require capacity efficiency over performance, use parity:
New-Volume -CimSession "S2DCluster" -StoragePoolFriendlyName "S2D on S2DCluster" -FriendlyName "ArchiveVol" -FileSystem CSVFS_ReFS -ResiliencySettingName Parity -Size 4TB
Configuring Storage Tiers
If your nodes have both SSDs and HDDs, S2D can automatically create storage tiers named “Performance” (SSD) and “Capacity” (HDD). You can create a tiered volume that uses the fast SSD tier for hot data and spills to HDD for cold data:
$pool = Get-StoragePool -CimSession "S2DCluster" -FriendlyName "S2D on S2DCluster"
$perfTier = Get-StorageTier -CimSession "S2DCluster" -FriendlyName "Performance"
$capTier = Get-StorageTier -CimSession "S2DCluster" -FriendlyName "Capacity"
New-VirtualDisk -CimSession "S2DCluster" -StoragePool $pool -FriendlyName "TieredVol" -StorageTiers @($perfTier, $capTier) -StorageTierSizes @(200GB, 800GB) -ResiliencySettingName Mirror -WriteCacheSize 32GB
Enabling SMB Direct and RDMA
For maximum performance, ensure SMB Direct (RDMA) is enabled. SMB Direct allows data transfers at low CPU usage and high throughput. Verify RDMA-capable adapters are recognised:
Get-NetAdapterRdma | Select Name, InterfaceDescription, Enabled
If RDMA is not enabled, enable it per adapter:
Enable-NetAdapterRdma -Name "Storage NIC 1"
Also configure the storage network adapters with dedicated VLANs and jumbo frames to optimise S2D traffic:
Set-NetAdapterAdvancedProperty -Name "Storage NIC 1" -RegistryKeyword "*JumboPacket" -RegistryValue 9014
Monitoring and Maintenance
Use the Get-StorageJob cmdlet to monitor ongoing storage operations such as regeneration or rebalancing:
Get-StorageJob -CimSession "S2DCluster"
Check health status of all cluster resources:
Get-ClusterResource -Cluster "S2DCluster" | Select Name, State, ResourceType
Windows Admin Center provides a graphical dashboard for S2D monitoring and is highly recommended for production management. It shows drive health, volume capacity, performance metrics, and alerts in real time. To check the overall S2D health from PowerShell:
Get-StorageSubSystem -CimSession "S2DCluster" | Get-StorageHealthReport
Storage Spaces Direct on Windows Server 2019 provides an enterprise-grade software-defined storage platform that scales from two to sixteen nodes, supports NVMe, SSD, and HDD drives, and integrates natively with Hyper-V and failover clustering. When properly planned and deployed, it delivers performance and availability comparable to dedicated SAN arrays at a fraction of the cost.