How to Configure Storage Spaces Direct (S2D) on Windows Server 2016

Storage Spaces Direct (S2D) is a software-defined storage technology introduced in Windows Server 2016 that enables you to build highly available and scalable storage systems using local storage on clustered servers. S2D eliminates the need for shared storage hardware such as SAN or NAS, instead pooling internal drives across multiple nodes into a single, unified storage pool. This guide walks you through deploying S2D in a production-grade configuration.

Prerequisites

Before you begin, ensure the following requirements are met. You need at minimum two Windows Server 2016 Datacenter Edition nodes — S2D is not supported on Standard Edition. Each node must have compatible hardware including NVMe, SSD, or HDD drives that are not already in use. All nodes must be joined to an Active Directory domain. The cluster nodes must be able to communicate over a reliable, low-latency network. Remote Management and Windows PowerShell Remoting must be enabled on all nodes.

It is strongly recommended to review the Windows Server Catalog for hardware that has been validated for S2D. Using validated hardware significantly reduces the chance of compatibility issues during deployment.

Step 1: Install Required Features on All Nodes

On each server that will participate in the S2D cluster, install the Failover Clustering feature and the Data-Center-Bridging feature. Open an elevated PowerShell session on each node and run the following command:

Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools
Install-WindowsFeature -Name Data-Center-Bridging

After installation completes, restart each node to apply the changes:

Restart-Computer -Force

Step 2: Validate the Cluster Configuration

Before creating the cluster, run the cluster validation wizard to check hardware and software compatibility. This step is mandatory for Microsoft support. From any node, run the following PowerShell command, replacing the server names with your actual node names:

Test-Cluster -Node "Node1","Node2","Node3","Node4" -Include "Storage Spaces Direct","Inventory","Network","System Configuration"

Review the HTML report generated by the validation. Address any warnings or failures before proceeding. The report is saved to the Documents folder of the user running the command.

Step 3: Create the Failover Cluster

Once validation passes, create the failover cluster. Use the -NoStorage parameter to prevent the cluster from automatically claiming any available disks — this is required when deploying S2D:

New-Cluster -Name "S2DCluster" -Node "Node1","Node2","Node3","Node4" -NoStorage -StaticAddress "192.168.1.100"

After the cluster is created, verify it is online and all nodes are participating:

Get-Cluster
Get-ClusterNode

Step 4: Enable Storage Spaces Direct

With the cluster running, enable Storage Spaces Direct. This command automatically discovers all eligible drives across the cluster nodes and adds them to a storage pool:

Enable-ClusterStorageSpacesDirect

This process may take several minutes. Once complete, verify that the storage pool was created and that drives were successfully added:

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

Step 5: Create a Storage Tier (Optional but Recommended)

If your nodes have a mix of fast SSDs and slower HDDs, you can create tiered storage to automatically place frequently accessed data on faster drives. First, identify the storage pool name:

Get-StoragePool | Where-Object {$_.IsPrimordial -eq $false}

Then create performance and capacity tiers:

New-StorageTier -StoragePoolFriendlyName "S2D on S2DCluster" -FriendlyName "Performance" -MediaType SSD
New-StorageTier -StoragePoolFriendlyName "S2D on S2DCluster" -FriendlyName "Capacity" -MediaType HDD

Step 6: Create a Virtual Disk and Volume

Now create a virtual disk (also called a Storage Space) from the pool. The mirror resiliency type is recommended for most workloads. For a three-way mirror suitable for a four-node cluster:

New-Volume -StoragePoolFriendlyName "S2D on S2DCluster" -FriendlyName "Volume01" -FileSystem CSVFS_ReFS -ResiliencySettingName Mirror -Size 1TB

This creates a Cluster Shared Volume (CSV) formatted with ReFS. You can verify it is available to the cluster:

Get-ClusterSharedVolume

Step 7: Monitor and Manage S2D

Windows Server 2016 provides built-in health monitoring for S2D. Use the following commands to review storage health and fault information:

Get-StorageSubSystem | Get-StorageHealthReport
Get-StorageFaultDomain -Type PhysicalDisk | Where-Object {$_.HealthStatus -ne "Healthy"}

You can also use the Failover Cluster Manager GUI to manage S2D volumes, monitor disk health, and review event logs related to storage activity.

Step 8: Add Additional Capacity

To expand storage capacity, add additional drives to existing nodes or add new nodes to the cluster. After physically installing new drives, run the following to update the storage pool:

Update-StorageProviderCache
Get-StoragePool | Add-PhysicalDisk -PhysicalDisks (Get-PhysicalDisk -CanPool $true)

Storage Spaces Direct is a powerful foundation for hyperconverged infrastructure on Windows Server 2016. With proper hardware selection, validation, and tiered storage configuration, it can deliver enterprise-grade performance and resilience using commodity server hardware without requiring dedicated shared storage appliances.