Windows OS Hub
  • Windows
    • Windows 11
    • Windows 10
    • Windows Server 2025
    • Windows Server 2022
    • Windows Server 2019
    • Windows Server 2016
  • Microsoft
    • Active Directory (AD DS)
    • Group Policies (GPOs)
    • Exchange Server
    • Azure and Microsoft 365
    • Microsoft Office
  • Virtualization
    • VMware
    • Hyper-V
    • Proxmox
  • PowerShell
  • Linux
  • Home
  • About

Windows OS Hub

  • Windows
    • Windows 11
    • Windows 10
    • Windows Server 2025
    • Windows Server 2022
    • Windows Server 2019
    • Windows Server 2016
  • Microsoft
    • Active Directory (AD DS)
    • Group Policies (GPOs)
    • Exchange Server
    • Azure and Microsoft 365
    • Microsoft Office
  • Virtualization
    • VMware
    • Hyper-V
    • Proxmox
  • PowerShell
  • Linux

 Windows OS Hub / Windows Server 2025 / Deploying Storage Spaces Direct (S2D) Cluster on Windows Server

October 18, 2026

Deploying Storage Spaces Direct (S2D) Cluster on Windows Server

Storage Spaces Direct (S2D) is Microsoft’s software-defined storage (SDS) technology, first introduced in Windows Server 2016. S2D allows you to join locally attached physical disks from multiple servers into a single, resilient, and scalable storage pool that can tolerate the failure of individual disks and entire servers. The cost of a software-defined storage solution can be significantly lower than that of a traditional hardware disk array (SAN or NAS). In addition, its straightforward scalability, allowing you to join up to 16 servers and more than 400 local disks, and support for different storage media, including HDDs, SSDs, and NVMe drives, make it possible to achieve significant performance.

In this guide, we will walk through the deployment of a 3-node S2D cluster on Windows Server 2025.

Contents:
  • What Is Storage Spaces Direct (S2D) in Windows Server?
  • Storage Spaces Direct Requirements
  • Preparing the Hosts for a Storage Spaces Direct Cluster
  • Deploy a Windows Server Failover Cluster for Storage Spaces Direct
  • How to Enable Storage Spaces Direct (S2D) on Windows Failover Cluster
  • Monitoring Storage Spaces Direct Cluster Health
  • How to Replace a Failed Physical Disk in Storage Spaces Direct

What Is Storage Spaces Direct (S2D) in Windows Server?

S2D is a further development of Storage Spaces technology and allows combining local disks from multiple nodes (servers) into storage pools. You can create virtual volumes on these storage pools and use them as Cluster Shared Volumes (CSVs) to store Hyper-V virtual machine files, or as Scale-Out File Shares (SOFSs).  To increase the S2D cluster’s storage capacity, you can either add a server or install a physical drive in an existing node. In general, Storage Spaces Direct is Microsoft’s answer to VMware vSAN.

S2D supports several storage resiliency configurations:

  • Mirror (3-way or 2-way) – data is synchronously replicated across three+ nodes (or two nodes in a minimal configuration). A high read speed is achieved by distributing the read operation across all servers.
  • Parity (2) – the data with parity information is distributed among different disks (a minimum of four nodes is required). This provides better storage efficiency than mirroring because it does not require multiple copies of the same data.
  • Tiered storage (Mirror-Accelerated Parity) – combines both of the above approaches. Initially, data is written to the mirror tier, and then copied to the parity tier in the background.

Storage Spaces Direct Requirements

S2D supports the following storage device types:

  • Common HDDs (SAS/SATA);
  • SATA / SAS SSDs
  • NVMe (Non-Volatile Memory Express) – ultra-fast SSDs connected via the high-speed PCI Express bus.

Different drive types can be combined into storage tiers optimized for performance or capacity. High-performance NVMe SSDs, for example, are ideal for caching and storing application transaction logs. In contrast, slower, less expensive HDD drives are better suited to storing archive files that do not require high-speed access.

The basic hardware requirements:

  • Memory: 4 GB of RAM per 1 TB of storage capacity.
  • Consistent server hardware: Using servers from the same manufacturer, preferably with identical models and configurations, is recommended.
  • Network adapters: At least two NICs per node.
  • High-speed networking: A high-bandwidth network connecting the S2D cluster nodes is required, with speeds of 10 GbE or higher.
  • RDMA support: NICs supporting Remote Direct Memory Access (RDMA) are recommended to reduce latency. Supported technologies include iWARP and RoCE.
  • Physical disks: In addition to the operating system disk, each node must have at least one physical drive available for the storage pool. All drives intended for use with Storage Spaces Direct must not contain existing partition tables.
  • Storage controllers: RAID controllers are not supported. Drives must be connected through a simple HBA adapter operating in pass-through mode.

To deploy S2D, you must first configure a failover cluster that meets the following requirements for its nodes.

  • Windows Server edition: Datacenter edition only.
  • Installation option: Server Core (recommended) or the full GUI installation.
  • Active Directory: All nodes must be joined to an Active Directory domain (starting with Windows Server 2016, some types of failover clusters can also be deployed in a workgroup without a domain).
  • Required roles and features: File Services and Failover Clustering roles on the nodes.
  • Cluster size: At least two servers are required. For higher resiliency, four or more nodes are preferable.

Preparing the Hosts for a Storage Spaces Direct Cluster

In our test lab, we will deploy a 3-node S2D cluster running Windows Server 2025.

I have three servers: Node01, Node02, and Node03. Each server has four SSD drives connected in addition to the system drive. Set a unique computer name (hostname) on each of the servers.

A three-node S2D cluster configuration supports only three-way mirroring (each data copy is stored on a separate physical server). This provides approximately 33.3% storage efficiency. The cluster can tolerate the loss of up to two physical drives on different nodes or the complete failure of one host. However, it cannot use the more storage-efficient Parity (RAID-5) or Mirror-Accelerated Parity resiliency options, both of which require at least four nodes.

Each host has two network adapters. If Switch Embedded Teaming (SET) is supported on these NICs, the recommended approach is to combine the physical network adapters into a Hyper-V virtual switch and create virtual network adapters for different types of traffic on it. The legacy NIC teaming mode (also known as LBFO) is not supported.

To keep things simple in this guide, we will use the physical NICs directly. The first adapter handles management and client access traffic, while the second is exclusively for storage traffic.

Let’s rename network adapters on each server and set the basic network settings using PowerShell:

# on Node01
Rename-NetAdapter -Name "Ethernet0" -NewName "Management"
Rename-NetAdapter -Name "Ethernet1" -NewName "S2DNetwork"
# Assign an IP address to the management network
New-NetIPAddress -InterfaceAlias "Management" -IPAddress 192.168.100.10 -PrefixLength 24 -DefaultGateway 192.168.100.1
# Your Domain Controllers IPs
Set-DnsClientServerAddress -InterfaceAlias "Management" -ServerAddresses 192.168.100.5,192.168.105.5
# Assigning an IP address to an isolated storage network (without a gateway or DNS)
New-NetIPAddress -InterfaceAlias "S2DNetwork" -IPAddress 10.10.0.10 -PrefixLength 24

Then join each server to the Active Directory domain.

Add the Windows Server roles:

Install-WindowsFeature -Name File-Services, Failover-Clustering, RSAT-Clustering-PowerShell, Storage-Replica -IncludeManagementTools -Restart

powershell: add failover cluster role

Deploy a Windows Server Failover Cluster for Storage Spaces Direct

The next step is to create a Windows Server Failover Cluster (WSFC) with the three nodes.

On each cluster host, verify that Windows Server detects the disks that are eligible for Storage Spaces Direct. These disks must be unpartitioned and have a status of CanPool = True.

# Check disks available for pooling (on each node)

Get-PhysicalDisk | Where-Object CanPool -eq $True|ft DeviceId, MediaType, canpool,OperationalStatus,HealthStatus,size

Get-PhysicalDisk on ready to add to s2d cluster

Run the cluster validation from any host. A set of tests is run to verify that everything is ready to join the nodes into an S2D cluster.

Test-Cluster -Node Node01, Node02, Node03 -Include "Storage Spaces Direct", "Inventory", "Network", "System Configuration"

If the validation is successful, create a cluster named S2D-Cl using the command:

New-Cluster -Name S2D-Cl -Node Node01, Node02, Node03 -NoStorage -StaticAddress 192.168.100.9

Note. If there is an even number of nodes in a cluster, you will have to configure a witness node. If there is an uneven number of nodes, you don’t need a witness.

Set-ClusterQuorum -FileShareWitness \\UNCpath\S2DwitnessShare

An odd-numbered cluster does not require a witness.

How to Enable Storage Spaces Direct (S2D) on Windows Failover Cluster

Check if the S2D cluster is enabled:

Get-ClusterS2D

Get-ClusterS2D

Use the following cmdlet to automatically enable and configure the S2D cluster:

Enable-ClusterStorageSpacesDirect

Enable-ClusterStorageSpacesDirect windows server 2016

This command:

  • Scans the available local disks on the cluster hosts.
  • Creates a single storage pool from all available disks.
  • If there are different types of disks present, some of the faster disks (NVMe or SSD) are automatically allocated for read and write caching.
  • Automatically creates two storage tiers, Performance and Capacity (if both SSDs and HDDs are available). These tiers use three-way mirroring for resiliency. In clusters with four or more nodes, parity and mirror tiers are created instead.
  • Enables the S2D system services.

To bypass the automatic creation of the storage pool and cache configuration, use this command to enable S2D.

Enable-ClusterStorageSpacesDirect -CacheState Disabled -AutoConfig:0 -SkipEligibilityChecks

Let’s check that a large storage pool named S2D on ClusterName has been created automatically.

Get-StoragePool | Where-Object { $_.FriendlyName -like "S2D*" }

Get-StoragePool

Check that the disks are marked for S2D:

Get-PhysicalDisk | Select-Object FriendlyName, MediaType, OperationalStatus, HealthStatus, Size

Note. If the error no disks with supported bus types found to be used for S2D appears when running the Enable-ClusterS2D command, it is likely that the BusType of your disks is RAID (it is an unsupported configuration for S2D). Check the bus type:
Get-Disk | select Number, FriendlyName, OperationalStatus, Size, PartitionStyle, BusType | sort Number | ft -AutoSize
Get-Disk - raid not supported S2D

If it is RAID, the solution is to update the drivers or firmware of the storage controllers (if you have HP servers, install the latest HPE Support Pack). Check the BusType again (now it’s changed to SAS).

BusType sas

There is a little trick that allows you to change the bus type to SATA for the specific type of controller:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\arcsas\Parameters
"BusType"=dword:0000000b (instead of 00000008)

Within the created storage pool of physical disks, you can create multiple volumes, each with a different resiliency and redundancy level.

In Windows Server 2025, the graphical Failover Cluster Manager console (cluadmin.exe) can be used to create new volumes in an S2D storage pool.

  1. Open the Failover Cluster Manager snap-in.
  2. Expand your cluster -> navigate to Storage -> select Pools
  3. Right-click your storage pool and select New Virtual Disk create new s2d volume storage pool
  4. Specify the volume name and its size
  5. A three-way mirror is the only resilient type that will be offered for a volume on a 3-node cluster.select volume size and mirror type
  6. After creating the volume, you will need to manually initialize it, create a partition, and format it in the ReFS file system.unallocated s2d volume
  7. The new volume will appear under Storage -> Disks with the Available Storage status.
  8. This volume can be used to host either Hyper-V virtual machines or Scale-Out File Server storage.
  9. To make the volume available for virtual machines, select the Add to Cluster Shared Volumes option.add volume to cluster shared volumes

However, it is more efficient and convenient to create and manage the S2D volumes using the Windows Admin Center (WAC) web interface or PowerShell.

For example, to create a new volume, format it in ReFS, and add it to CSV with just one command:

New-Volume -FriendlyName "Volume01" -StoragePoolFriendlyName S2D-Cl -FileSystem ReFS -Size 2TB

By default, new volumes use the resiliency type specified for the pool in the ResiliencySettingNameDefault parameter. In our case, this is Mirror.

Get-StoragePool s2d* | FL

Get-StoragePool default resiliency level

You can change the resiliency type when creating a volume. For example, to create a two-way mirror:

New-Volume -FriendlyName S2D-Vol2-Mirror2 -StoragePoolFriendlyName S2D-Cl -PhysicalDiskRedundancy 1 -ResiliencySettingName "Mirror" -FileSystem CSVFS_ReFS -Size 10GB

PowerShell: New-Volume on s2d storage pool

Create a Three-way mirror volume:

New-Volume -FriendlyName S2D-Vol2-Mirror3 -StoragePoolFriendlyName S2D-Cl -PhysicalDiskRedundancy 2 -ResiliencySettingName "Mirror" -FileSystem CSVFS_ReFS -Size 1GB

To create a volume with parity:

New-Volume -FriendlyName "S2D-Vol1-Parity" -StoragePoolFriendlyName S2D-Cl -FileSystem CSVFS_ReFS -Size 1GB -ResiliencySettingName Parity

By default, this command attempts to create a volume with Dual Parity resiliency (similar to RAID-6), which strictly requires a minimum of 4 nodes in S2D.

To create a Parity volume across three nodes, you must manually set the number of physical copies of the data to one (PhysicalDiskRedundancy = 1):

New-VirtualDisk -FriendlyName "S2D-Vol1-Parity" -StoragePoolFriendlyName S2D-Cl  -Size 1GB  -ResiliencySettingName Parity  -PhysicalDiskRedundancy 1  -ProvisioningType Fixed

Use the following command to list the S2D volumes with their resiliency type and physical disk redundancy level:

Get-VirtualDisk | ft FriendlyName, ResiliencySettingName, PhysicalDiskRedundancy

list storage spaces virtual volumes and resiliency

To view information about a storage volume, including storage efficiency and total space used:

Get-VirtualDisk "S2D-Vol1-Parity"

Add a new physical disk to the storage pool:

$HDDs = Get-PhysicalDisk | ? PhysicalLocation -like "*LUN 4"
Add-PhysicalDisk -PhysicalDisks $HDDs -StoragePoolFriendlyName S2D

Disks marked as S2D are not displayed in the Disk Management console anymore, and that is OK.

s2d pool not shows in computer managment

Monitoring Storage Spaces Direct Cluster Health

You can use the built-in PowerShell commands to check the health of your S2D cluster.

Overall storage pool status:

Get-StoragePool -FriendlyName S2D-Cl| Select-Object FriendlyName, HealthStatus, OperationalStatus, Size, AllocatedSize, IsReadOnly 

Get-StoragePool info - degraded

View the status of the S2D volumes:

Get-VirtualDisk | Select-Object FriendlyName, OperationalStatus, HealthStatus, ResiliencySettingName, OperationalDetails   

Get-VirtualDisk state in s2d

If everything is ok, HealthStatus will be equal to Healthy. If not (for example, one of the nodes or disks is unavailable, but without loss of data integrity), then the Operating Status: Degraded, Incomplete, and HealtStatus=Warning.

s2d-virtual-disk degraded

How to Replace a Failed Physical Disk in Storage Spaces Direct

View the failed physical disks:

Get-PhysicalDisk | Where-Object { $_.HealthStatus -ne "Healthy" } | Select-Object FriendlyName, HealthStatus, OperationalStatus, Model     

s2d find failed disks

Mark the disk as retired and prevent further write attempts to it:

Get-PhysicalDisk | Where-Object {$_.HealthStatus -ne "Healthy" -or $_.OperationalStatus -eq "Retired"}

The following commands will mark the disk as retired and start the background evacuation of problematic disk data to other drives:

$FailedDisk = Get-PhysicalDisk | Where-Object {$_.HealthStatus -ne "Healthy"}     

Set-PhysicalDisk -InputObject $FailedDisk -Usage Retired

To make it easier to identify a disk inside a multi-drive chassis or storage enclosure (JBOD), turn on the LED light on the disk:

$FailedDisk | Enable-PhysicalDiskIdentification

Remove the failed disk from the storage pool:

Remove-PhysicalDisk -StoragePoolFriendlyName S2D-Cl -PhysicalDisks $FailedDisk

Replace a failed disk with a new one. S2D will automatically detect and add a newly inserted disk to the existing storage pool. The data will then be redistributed automatically between the disks in the cluster.

If the AutoPool option has been disabled for a cluster, ensure that the operating system has detected the new disk.

$Disk = Get-PhysicalDisk | ? CanPool –eq True

Then add the new disk to the storage pool:

Get-StoragePool S2D-Cl | Add-PhysicalDisk –PhysicalDisks $Disk –Verbos

You can check the status of resiliency repair and pool rebalancing using the command:

Get-StorageJob

In summary, Storage Spaces Direct makes it easy to build software-defined shared storage using local disks across multiple physical servers. S2D protects against the simultaneous failure of any two disks or, in clusters with four or more nodes, two servers. If a disk or server failure is detected, the S2D cluster automatically starts redistributing data across the remaining devices to restore resiliency. In a test environment, you can verify that the storage remains accessible and the virtual machines running on it continue to operate normally even after any two disks are disconnected.

13 comments
8
Facebook Twitter Google + Pinterest
Windows Server 2016Windows Server 2019Windows Server 2022Windows Server 2025
previous post
Complete List of Windows Update Error Codes
next post
Auto-mount VHD/VHDX File at Startup in Windows

Related Reading

Configure Proxy Server Settings in Windows via Group...

August 24, 2026

Enable Remote Desktop Sessions Shadowing on Windows Server...

December 3, 2025

Disks and Partitions Management with PowerShell on Windows

July 11, 2025

Transfer/Seize FSMO Roles to Another Domain Controller in...

March 24, 2026

Mapped Network Drives are Not Available in Elevated...

July 20, 2026

How to Rebuild (Reset) Icon Cache in Windows...

February 10, 2026

Add or Remove Roles and Features on Windows...

August 21, 2026

How to Enable PowerShell Remoting (WinRM) in Windows

March 26, 2026

13 comments

Rahul January 11, 2019 - 1:39 am

Hi,

I am trying to setup S2D on Virtual environment. I am using 3 node cluster with node majority.
Each node have 4 disks. Every time I tried to enable S2D, it fails after 1 hour 1 min with error.

Enable-ClusterS2D : Operation did not complete in time while ‘Waiting until SBL disks are surfaced’. Run cluster
validation, including the Storage Spaces Direct tests, to verify the configuration
Enable-ClusterS2D : Failed to run CIM method EnableStorageSpacesDirect on the
root/MSCLUSTER/MSCluster_StorageSpacesDirect CIM object. The CIM method returned the following error code: 1460

Have a come across such situation? any fix available for this.

Reply
lajblt January 21, 2019 - 2:39 pm

Yes, we have the same problem on 2-node cluster with FileSharing Witness. Installed on 2x HPE DL360 Gen10, running Windows 2016 Datacenter with all Security Fixes. Cluster verification OK (no errors). But Enable-ClusterS2D script timeout after 1 hour, 1 minute with error id 1460. I could not find any fix too.

Reply
dart January 25, 2019 - 5:02 pm

Have you tried to update the firmware on the drives?
In my case, the s2d cluster is no initializated due to the fact that WindowsServer2016 was installed in the Legacy mode. After reinstalling the OS in the native UEFI mode, the problem disappeared.

Reply
LAJBLT January 27, 2019 - 9:11 pm

Hello,
OS was installed directly in the UEFI mode. Last Service Pack for Proliants was installed too (firmware, drivers etc.). Still no luck. Now I am waiting for the second HBA controller. Disk drives for S2D will be connected to H240 in HBA mode instead the SmartArray P816i-a. Then I’ll try a clean install on this hardware config as last chance. 🙂

Reply
lajblt February 1, 2019 - 2:24 pm

It seems that S2D isn’t available for us. 🙁 Even with disks connected to HBA240 in HBA mode we don’t succeed. We have to spend huge money to 2x HPE Nimble Storage (we need HA SAN storage).

Reply
Manivel RR September 13, 2019 - 7:44 am

Windows 2016/2019 S2D to ESXi 6.7.0

Assume I have 4 servers with Windows clusters(s2d enabled).

Can we present the storage from Windows s2d through ISCSI to ESXi 6.7.0 servers?

Is this possible and recommended one ?

Reply
Anders Jensen December 31, 2020 - 12:57 am

Yes, you can do that.

Reply
Miles June 29, 2023 - 2:52 pm

I had that error too when trying to enable S2D using HPE DL380’s, 2 x Gen8, 1 x Gen9 and 1 x Gen10. In the end, I had wipe them and use Server 2019 then I was able to enable it. Seems Server 2022 didn’t like the hardware.

Reply
Miles January 14, 2025 - 12:50 am

In the end I was able to get this working with Server 2022

Reply
Charlie Bucket January 13, 2025 - 10:48 pm

I’ve followed your guide to successfully setup many clusters with S2D, so THANK YOU! After all these years I finally have a failed disk, though. The disk was automatically set to “retired” by the cluster manager (apparently). The new disk I added to a spare slot was also /automatically/ picked up by S2D and added to the pool. I’m not confident in MS’s automation enough to trust that I can safely pull the failed disk. Are there any other commands or tools to verify the storage pool is safely rebuilt and using the new drive so I can eject the retired one?

Reply
Miles January 14, 2025 - 12:49 am

To replace a physical drive:
Get the serial number of the disk you want to remove by running Get-PhysicalDisk or looking in Windows Admin Centre.
Retire the disk.
$HDD = Get-PhysicalDisk |? SerialNumber -EQ serialnumber
Repair-VirtualDisk -FriendlyName “Mirror”
Get-StorageJob (Wait for it to finish)
Remove-PhysicalDisk -PhysicalDisks $HDD -StoragePoolFriendlyName S2D-Pool

Reply
admin January 15, 2025 - 8:33 am

Additionally, once you have done this, you can take the retired drive offline:
Get-Disk | ? { $_.UniqueId -in ($HDD).UniqueId } | Set-Disk -IsOffline $false;

Reply
yemz February 7, 2026 - 11:32 pm

can I replace three retired disks at once?

Reply

Leave a Comment Cancel Reply

join us telegram channel https://t.me/woshub
Join WindowsHub Telegram channel to get the latest updates!

Recent Posts

  • Backup/Sync to Cloud Storage with Rclone on Windows

    October 9, 2026
  • Fix Missing “Yes” Button in User Account Control Prompt on Windows

    October 7, 2026
  • Block Specific Keyboard Shortcuts with Keyboard Filter on Windows

    October 3, 2026
  • How to Set Task Priority in Windows Task Scheduler

    September 22, 2026
  • AutoStart Program at RDP Logon in Windows RDS

    September 8, 2026
  • How to Convert Windows Machine into a Proxmox VM

    August 30, 2026
  • Enable or Disable Fast User Switching in Windows 11

    August 18, 2026
  • How to Hide Wi-Fi Network in Windows with WLAN Filters (Blacklist and Whitelist)

    August 14, 2026
  • Invalid Signature Detected: Check Secure Boot Policy [Fix]

    August 5, 2026
  • Windows Installer Service Could Not Be Accessed? How to Fix It

    July 28, 2026

Follow us

  • Facebook
  • Twitter
  • Youtube
  • Telegram
Popular Posts
  • Using WMI Filters to Target Group Policies in Active Directory
  • The Disk is Offline Because of Policy Set by an Administrator
  • Fix RDP Connection Error ‘CredSSP Encryption Oracle Remediation’
  • How to Create and Use a RAM Drive on Windows
Footer Logo

@2014 - 2026 - Windows OS Hub. All about operating systems for sysadmins


Back To Top