Storage Spaces Direct on Windows Server 2025: 2-Node Cluster Step-by-Step Guide

📅 Published: October 28, 2026 ✍️ By Khurram Shahzad 🏷️ Windows Server 2025 · Storage Spaces Direct · Failover Clustering · Hyper-V ⏱️ 20 min read
Witness Node 1 Node 2 RDMA Nested resiliency: node + drive WINDOWS SERVER 2025 Storage Spaces Direct 2-Node Cluster Choose, build and validate it right RDMA Witness Nested resiliency ☁ VMoreCloud Learn | Build | Share
Verification note (October 28, 2026): the facts here follow Microsoft Learn documentation for Windows Server 2025 Storage Spaces Direct (S2D), nested resiliency, Network ATC and quorum. Items marked verify are points I could not confirm in Microsoft’s documentation, so test them in a lab before relying on them. This guide assumes physical, identical servers from the Windows Server Catalog, Datacenter licensing and an Active Directory domain.

A 2-node S2D cluster is the smallest supported Storage Spaces Direct design, and the one where early decisions are hardest to undo. This guide helps you make those decisions first, then builds the cluster.

You will decide between hyperconverged and disaggregated deployment, choose a network and RDMA approach, pick a volume resiliency and a witness, and then work through prerequisites, networking, validation, enabling S2D and creating volumes. Each step explains the reasoning so you can adapt it to your hardware, and each choice is marked as reversible or not.

⚡ Quick Summary

  • Deployment model: choose hyperconverged for a 2-node cluster. Disaggregated needs 2 storage nodes plus separate compute hosts, so 3 to 4 servers minimum.
  • Network: at least 10 GbE, with RDMA recommended. iWARP is easier than RoCE v2. Switchless direct links are supported for 2 nodes.
  • Resiliency: two-way mirror survives one failure. Nested resiliency survives a node plus a drive, at lower capacity efficiency, and works only at exactly two servers.
  • Witness: mandatory. Use a cloud witness or a file share witness on an independent machine, never on this cluster.
  • Windows Server 2025: adds Network ATC for Windows Server clusters, thin provisioning, ReFS deduplication and compression, and better repair and resync controls.

Decision 1: hyperconverged or disaggregated

In Windows Server, hyperconverged means Hyper-V VMs and S2D storage run on the same nodes. Disaggregated (Microsoft’s docs call it “converged”) means a storage cluster running S2D and a Scale-Out File Server (SOFS) serves SMB3 shares to a separate Hyper-V compute cluster.

⚠️ Terminology trap: Azure Local uses “disaggregated” to mean compute with an external SAN. That is a different design from the Windows Server S2D meaning, so do not mix the two sets of documentation.
FactorHyperconverged (2 nodes)Disaggregated (2 storage + 2 compute)
Servers and licensing2 Datacenter licenses4 servers. Storage nodes still need Datacenter
I/O pathVM I/O is largely local, with mirror writes over the storage networkAll VM I/O crosses SMB3 to the SOFS, so RDMA end to end is effectively mandatory
NetworkSwitchless is possibleA switched fabric is required
Failure behaviorLosing a node removes compute and one storage copy together, so the survivor must carry every VMCompute and storage fail independently
OperationsOne clusterTwo clusters, SOFS shares, share and NTFS permissions, Kerberos delegation
GrowthUp to 16 nodes, but nested resiliency works only at exactly 2Scale compute and storage independently

Recommendation: choose hyperconverged unless one of these is true: compute and storage must scale independently, several compute clusters share the storage, separate teams own each tier, or per-core licensing on compute-heavy hosts is a concern.

💡 Reversibility: moving from hyperconverged to disaggregated later is a rebuild and VM migration, not a conversion.

Decision 2: network and RDMA

S2D uses SMB3, including SMB Direct and SMB Multichannel, between nodes. Microsoft requires at least 10 GbE and recommends RDMA. You make two sub-decisions: the RDMA protocol, and switchless versus switched.

iWARPRoCE v2No RDMA
Microsoft’s stanceRecommended, easier to set upSupportedWorks at 10 GbE or faster, RDMA recommended
Switch and host configTCP-based, no mandatory DCBPFC, ETS and DCB must be correct on hosts and any switchStandard SMB Multichannel over TCP
ComplexityLowHigh. Mismatches cause intermittent stalls that are hard to diagnoseLowest
CPU and latencyLowLow, if configured correctlyHigher CPU cost and latency
CostRDMA NICsRDMA NICs, plus DCB-capable switches if switchedLowest

Microsoft’s campus cluster documentation cites up to 30% CPU savings from RDMA.

What each choice locks in

  • Both nodes must use the same RDMA protocol, and Network ATC requires identical adapter make, model and speed within an intent. Changing protocol or vendor later means new NICs.
  • Some adapters support both iWARP and RoCE (Marvell FastLinQ and Intel E810 families are commonly cited), and the mode is set per adapter. Verify your exact model and driver.
  • NICs must carry the Windows Server logo that matches your OS version.

Switchless versus switched

  • Switchless: each node connects directly to the other. For two nodes, use at least two links, each on its own subnet. You save the switches, and RoCE needs no switch-side DCB, although hosts still need it. Management and compute traffic need separate NICs. Adding a third node requires a redesign.
  • Switched: two top-of-rack switches for redundancy, and lossless DCB configuration for RoCE. It scales, and it lets you converge traffic on fewer ports.
✅ Default for a first build: 2×25 GbE iWARP, switchless for storage, with separate NICs for management and compute. Choose RoCE v2 only if you already run a DCB-configured fabric. No RDMA is acceptable for light 2-node workloads at 10 GbE if you accept the CPU cost.

Decision 3: resiliency and witness

Volume resiliency

TypeSurvivesCapacity efficiencyNotes
Two-way mirrorOne node or one drive failure, not both together50%The 2-node default
Nested two-way mirrorA node plus a drive in the survivor, or multiple drives25%Exactly two servers, at least 4 capacity drives each
Nested mirror-accelerated paritySame as nested mirrorAbout 35 to 40%Depends on mirror and parity mix

Resiliency is chosen per volume, and you can mix types in one cluster. Volumes cannot be converted between resiliency types. You create a new volume and migrate the data.

Witness

A 2-node cluster needs a witness. Two votes alone cannot form a majority, so losing either node would stop the cluster. The witness also acts as the tie-breaker for the storage pool.

WitnessNeedsChoose when
Cloud witnessAn Azure storage account and outbound HTTPS from both nodesInternet access is allowed, no third site available
File share witnessAn SMB share on a server outside the clusterNo internet, but an independent machine exists
USB file share witnessA USB drive on a supported router or switchSmall edge sites (verify support for your device)
  • A disk witness is not an option, because S2D has no shared disks.
  • Never host the witness on a VM that runs on this cluster. That creates a circular dependency.
  • With a witness you survive any single node or witness failure. Two simultaneous failures stop the cluster.
  • The witness type is reversible at any time with Set-ClusterQuorum.

What is hard to reverse

ChoiceWhy it sticks
Deployment modelRebuild and migrate
Volume resiliency typeNo in-place conversion
Nested resiliency and growthNested works only at exactly 2 nodes, so a third node means migrating those volumes
Enable-ClusterS2D (pool and cache binding)Undoing it means wiping drives
NIC vendor and RDMA protocolA hardware swap
Switchless to switchedRe-cabling and re-addressing
Pool and cluster functional-level upgradesOne-way operations
Cluster name and domainPainful to change later
💡 Easy to change: witness type and growing volumes. Do not assume shrinking a volume is safe.

Prerequisites and hardware

Servers

  • Windows Server Datacenter edition on both nodes (S2D requires it). Identical model, firmware, CPU and drive layout.
  • Memory for the OS and workloads, plus 4 GB of RAM per TB of cache-drive capacity for S2D metadata.
  • Drives behind an HBA in pass-through mode (no RAID, no multipath), with a separate boot device.

Drives per node

LayoutMinimum per node
All NVMe or all SSD (single type, no cache)4 capacity drives
NVMe or SSD cache with SSD or HDD capacity2 cache drives plus 4 capacity drives
  • Keep the number of capacity drives a whole multiple of the number of cache drives.
  • Choose cache drives with high write endurance (Microsoft suggests around 3 drive writes per day).
  • Nested resiliency needs the four-capacity-drive minimum per server.
  • Leave roughly one capacity drive per node unallocated as repair reserve.

Network, directory and Azure

  • At least 10 GbE, two or more storage ports per node, symmetric NICs on both nodes.
  • Domain-joined nodes, working DNS and time sync, static IPs, and an OU where the cluster can create its computer object.
  • A storage account if you plan a cloud witness.
  • OEM-supplied firmware and drivers for Windows Server 2025. Inbox NIC drivers are often wrong for RDMA.

Build steps

Examples use placeholder names S2D-N1, S2D-N2 and S2D-CL01.

Step 1: Prepare the operating system (both nodes)

# Same build and patch level on both nodes, then set a high-performance power plan
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c

Mismatched patch levels and power-saving profiles cause validation warnings and uneven performance.

Step 2: Install the required features

$Nodes = "S2D-N1","S2D-N2"
Invoke-Command $Nodes {
  Install-WindowsFeature -Name Hyper-V, Failover-Clustering, FS-FileServer, `
    Data-Center-Bridging, NetworkATC, NetworkHUD, RSAT-Clustering-PowerShell, `
    Hyper-V-PowerShell -IncludeManagementTools -Restart
}

Omit Hyper-V on disaggregated storage nodes. NetworkATC and NetworkHUD are the Windows Server 2025 Network ATC features.

Step 3: Clean the drives

⚠️ Destructive step. This wipes every non-boot disk on the target nodes. Confirm the node list before you run it.
Invoke-Command $Nodes {
  Update-StorageProviderCache
  Get-StoragePool | ? IsPrimordial -eq $false | Set-StoragePool -IsReadOnly:$false -ErrorAction SilentlyContinue
  Get-StoragePool | ? IsPrimordial -eq $false | Get-VirtualDisk | Remove-VirtualDisk -Confirm:$false -ErrorAction SilentlyContinue
  Get-StoragePool | ? IsPrimordial -eq $false | Remove-StoragePool -Confirm:$false -ErrorAction SilentlyContinue
  Get-PhysicalDisk | Reset-PhysicalDisk -ErrorAction SilentlyContinue
  Get-Disk | ? Number -ne $null | ? IsBoot -ne $true | ? IsSystem -ne $true | ? PartitionStyle -ne RAW | % {
    $_ | Set-Disk -IsOffline:$false; $_ | Set-Disk -IsReadOnly:$false
    $_ | Clear-Disk -RemoveData -RemoveOEM -Confirm:$false
    $_ | Set-Disk -IsReadOnly:$true;  $_ | Set-Disk -IsOffline:$true
  }
}
Get-PhysicalDisk | Group-Object MediaType, BusType, CanPool | ft Count, Name

Every data drive should report CanPool = True. Anything else means leftover metadata, a RAID or multipath path, or an unsupported controller.

Step 4: Pre-validate and create the cluster

Test-Cluster -Node $Nodes -Include "Storage Spaces Direct","Inventory","System Configuration" -Verbose
New-Cluster -Name S2D-CL01 -Node $Nodes -NoStorage -StaticAddress 10.0.0.50

-NoStorage stops the cluster from claiming disks, because S2D must claim them later.

Step 5: Configure host networking

Path A: Network ATC (recommended on Windows Server 2025). It requires Datacenter and an existing cluster, because the intent is stored cluster-wide. Adapters in one intent must match in make, model and speed on every node.

# Management and compute converged on two ports
Add-NetIntent -Name MgmtCompute -Management -Compute -AdapterName "NIC1","NIC2"

# Storage on the dedicated RDMA ports.
# Switchless: turn off automatic storage IPs and assign your own per direct link.
$so = New-NetIntentStorageOverrides
$so.EnableAutomaticIPGeneration = $false
Add-NetIntent -Name Storage -Storage -AdapterName "SMB1","SMB2" -StorageOverrides $so

Get-NetIntentStatus

For a switchless layout, each direct link needs its own subnet, for example 10.71.1.0/24 and 10.71.2.0/24. Verify the override object names and storage VLAN behavior with Get-Help Add-NetIntent on your build and with your OEM’s switchless guide. For a switched design, leave automatic IPs on.

Path B: manual configuration. Do this before Step 4, because without ATC there is no cluster dependency.

New-VMSwitch -Name SETswitch -NetAdapterName "NIC1","NIC2" -EnableEmbeddedTeaming $true -AllowManagementOS $true
Enable-NetAdapterRdma -Name "SMB1","SMB2"

# RoCE only: host-side DCB. The switch configuration must match.
New-NetQosPolicy "SMB" -NetDirectPortMatchCondition 445 -PriorityValue8021Action 3
New-NetQosPolicy "Cluster" -Cluster -PriorityValue8021Action 7
New-NetQosPolicy "Default" -Default -PriorityValue8021Action 0
Enable-NetQosFlowControl -Priority 3
Disable-NetQosFlowControl -Priority 0,1,2,4,5,6,7
New-NetQosTrafficClass "SMB" -Priority 3 -BandwidthPercentage 50 -Algorithm ETS
New-NetQosTrafficClass "Cluster" -Priority 7 -BandwidthPercentage 1 -Algorithm ETS
Set-NetQosDcbxSetting -Willing $false -Confirm:$false
Enable-NetAdapterQos -Name "SMB1","SMB2"

For iWARP you can skip the DCB block. If your NIC supports both modes, set the RDMA mode explicitly. The property name varies by vendor.

Step 6: Run full validation

Test-Cluster -Node $Nodes -Include "Storage Spaces Direct","Inventory","Network","System Configuration" -Verbose
Get-NetAdapterRdma
Get-SmbClientNetworkInterface
Get-SmbMultichannelConnection      # run while copying a large file over the storage network

Read the report instead of only checking for green: every drive should be listed and symmetric across nodes, RDMA should be enabled on the storage NICs, and MTU should be consistent. A failure in the S2D or network sections must be fixed first. Enabling S2D on top of a bad network is the most common source of poor performance later.

Step 7: Configure the witness

# Cloud witness
Set-ClusterQuorum -CloudWitness -AccountName "<storageaccount>" -AccessKey "<key>"

# Or a file share witness (the cluster computer account needs Full Control on the share)
Set-ClusterQuorum -FileShareWitness "\\FS01\S2DWitness"

Get-ClusterQuorum

Do this before enabling S2D, so the storage pool has its tie-breaker from the start.

Step 8: Enable Storage Spaces Direct

Enable-ClusterStorageSpacesDirect -PoolFriendlyName "S2D Pool" -Confirm:$false -Verbose

Get-StoragePool S2D* | ft FriendlyName, HealthStatus, OperationalStatus
Get-PhysicalDisk | Group-Object MediaType, Usage, BusType | ft Count, Name
Get-StorageTier | ft FriendlyName, ResiliencySettingName, MediaType, NumberOfDataCopies

This one command creates the pool, claims the drives and binds the cache, so it is the point of no return. With a single media type and no cache wanted, add -CacheState Disabled. Check that cache devices appear as cache and capacity devices as capacity.

Step 9: Create volumes

Plan two volumes, one per node, so Cluster Shared Volume ownership is balanced.

# A) Two-way mirror (the 2-node default), 50% efficiency
New-Volume -FriendlyName "CSV01" -FileSystem CSVFS_ReFS -StoragePoolFriendlyName S2D* -Size 4TB -ResiliencySettingName Mirror

# B) Nested two-way mirror (all-flash), 25% efficiency
New-Volume -FriendlyName "CSV01" -FileSystem CSVFS_ReFS -StoragePoolFriendlyName S2D* `
  -StorageTierFriendlyNames NestedMirrorOnSSD -StorageTierSizes 2TB

# C) Nested mirror-accelerated parity (mirror size first, parity size second)
New-Volume -FriendlyName "CSV02" -FileSystem CSVFS_ReFS -StoragePoolFriendlyName S2D* `
  -StorageTierFriendlyNames NestedMirrorOnSSD,NestedParityOnSSD -StorageTierSizes 200GB,1.8TB
  • Tier names: nested tier templates are created automatically on Windows Server 2022 and later, and only 2019 needed manual creation. Confirm names with Get-StorageTier, and use the OnHDD variants for HDD capacity.
  • Capacity example: with 4 × 3.84 TB SSD per node, raw capacity is about 30.7 TB. After one drive per node of reserve, roughly 23 TB is allocatable. That gives about 11.5 TB usable with two-way mirror, about 5.8 TB with nested mirror, and about 8 to 9 TB with nested parity, depending on the mix.
  • Thin provisioning: Windows Server 2025 adds thin volumes (-ProvisioningType Thin on mirror volumes). Older cmdlet documentation says tiered volumes must use fixed provisioning, and nested volumes use tiers, so verify and treat thin and nested as mutually exclusive until you confirm otherwise in a lab.

Step 10: Verify before production

Get-VirtualDisk | ft FriendlyName, ResiliencySettingName, HealthStatus
Get-ClusterSharedVolume
Get-StorageJob

Benchmark with DISKSPD or VMFleet, then run a controlled node-failure test while the cluster is still empty. Confirm VMs fail over, the witness behaves as expected and resync completes.

If you choose disaggregated

  • Storage cluster: run the same steps 1 to 8, without the Hyper-V role.
  • Scale-Out File Server: Add-ClusterScaleOutFileServerRole -Name SOFS01, then create volumes and SMB shares.
  • Share permissions: grant the Hyper-V compute hosts’ computer accounts and your admin group full control on the shares and folders.
  • Compute cluster: a separate Hyper-V failover cluster whose VM paths point at \\SOFS01\<share>.
  • Network: a switched RDMA fabric between compute and storage nodes. Nested resiliency still works on a 2-node storage cluster.

Operations: patching a 2-node cluster

In a 2-node cluster, the surviving node holds the only copy of the data while its partner is down. Rebooting the second node while resync is still running can take volumes offline, so patch one node at a time and wait for storage jobs to finish.

Suspend-ClusterNode -Name S2D-N1 -Drain -Wait
Get-StorageFaultDomain -Type StorageScaleUnit | ? FriendlyName -eq "S2D-N1" | Enable-StorageMaintenanceMode
# patch and reboot the node
Get-StorageFaultDomain -Type StorageScaleUnit | ? FriendlyName -eq "S2D-N1" | Disable-StorageMaintenanceMode
Resume-ClusterNode -Name S2D-N1 -Failback Immediate
Get-StorageJob    # wait until empty before touching the next node

Cluster-Aware Updating can automate this sequence. Size CPU and memory so either node can run every VM, since a node failure puts the whole workload on one server.

Windows Server 2025 changes

ChangeWhat it means for a 2-node build
Datacenter required (unchanged)S2D is Datacenter-only. Plan licensing accordingly
Network ATC for Windows ServerIntent-based host networking, previously an Azure Local feature. Needs Datacenter plus the NetworkATC and NetworkHUD features
Thin provisioningOvercommit the pool, convert fixed volumes to thin, set a pool default. Monitor physical pool use, not only volume size. Nested interaction: verify
Repair and resync controlsFive priority levels, valuable because resync after each reboot is long in 2-node clusters
ReFS dedup and compressionAvailable for VM volumes. Optional, so test against your workload
NVMe optimizations and NVMe-oF initiatorFaster NVMe handling. The initiator targets external SAN, not S2D
Campus clustersNeed four nodes (2+2) and the December 2025 update, so they do not apply to 2 nodes
SMB signing defaultI believe SMB signing is required by default for outbound connections on Windows Server 2025. I have not confirmed its effect on S2D storage traffic, so measure throughput after applying your security baseline (verify)
Workgroup clustersExist in 2025, but assume a domain for S2D unless Microsoft documents otherwise (verify)

Troubleshooting

SymptomLikely cause and fix
Drives show CanPool = FalseLeftover partitions or metadata, a RAID controller, or multipath. Re-run the clean-up and confirm HBA pass-through
Enable-ClusterS2D finds no eligible drivesDrives not clean, validation not passed, or the cluster was created without -NoStorage and claimed disks
RDMA not usedCheck Get-NetAdapterRdma and Get-SmbClientNetworkInterface for RDMA capable. Look for mismatched protocols or DCB settings (RoCE)
Nested tier name not foundRun Get-StorageTier. Names depend on media type. Windows Server 2019 needs manual tier creation
Volume creation fails for capacityNested footprint is larger than usable size. Check pool size and allocation and leave the repair reserve
Volumes degraded after a rebootResync in progress. Check Get-StorageJob and wait before touching another node
Cluster stops when one node failsNo witness, or the witness is unreachable (blocked HTTPS to Azure, or missing share permissions)
Poor performanceSMB Multichannel or RDMA not in use, mismatched MTU, or a validation failure that was ignored

Questions that decide your design

  1. Scale: must compute and storage scale independently, or will this stay a 2-node pair?
  2. Failure tolerance: must the cluster survive a node plus a drive failure, or is one failure at a time enough with good backups?
  3. Drives and capacity: what is your drive layout, and how much usable capacity do you need after 25% nested efficiency?
  4. Fabric: do you already run a DCB-capable network or have RoCE experience?
  5. Witness: can both nodes reach Azure over HTTPS, or do you need a file share witness on an independent machine?
  6. Growth: will you add a third node within the hardware lifetime? That rules out nested resiliency and affects switchless.
  7. Security baseline: does it require SMB signing or encryption, and have you measured the effect on RDMA throughput?
  8. Drivers: does your OEM provide Windows Server 2025 drivers and firmware for your NIC and HBA?
  9. Headroom: can either node run every VM on its own?

If you also manage Windows Server, Hyper-V and hybrid Azure environments, more practical guides are on VMoreCloud.

Frequently asked questions

Can I build a Storage Spaces Direct cluster with only two nodes?

Yes. Microsoft supports S2D with two to sixteen servers. A 2-node cluster needs a witness and can use direct, switchless network connections.

Do I need RDMA for a 2-node S2D cluster?

No, but it is recommended. S2D requires at least 10 GbE, and RDMA (iWARP or RoCE) lowers CPU use and latency. iWARP is easier to configure than RoCE.

Which witness should I use for a 2-node cluster?

A cloud witness if both nodes can reach Azure over HTTPS, otherwise a file share witness on a machine outside the cluster. Never host the witness on the cluster itself.

What is nested resiliency?

A Storage Spaces Direct option for exactly two servers that lets volumes survive a server failure plus a drive failure in the remaining server, at 25% capacity efficiency for nested two-way mirror or about 35 to 40% for nested mirror-accelerated parity.

Can I convert a two-way mirror volume to nested resiliency?

No. Resiliency types cannot be converted. Create a new volume with the resiliency you want and migrate the data.

Do I need Datacenter edition for Storage Spaces Direct?

Yes. Storage Spaces Direct requires Windows Server Datacenter edition.

Sources and further reading

This guide is based on Microsoft documentation and community sources available on October 28, 2026. Cmdlet parameters, hardware support and defaults can change with updates, and some details depend on your OEM. Items marked verify were not confirmed in Microsoft documentation. Test the full build, including a node-failure test, in a lab before production, and keep tested backups.

Khurram Shahzad, Hybrid Cloud & Virtualization Engineer and author at VMoreCloud
👤 About the Author
Khurram Shahzad
Hybrid Cloud & Virtualization Engineer
Hybrid Cloud & Virtualization Engineer specializing in VMware (VCF, vSAN, Aria), Microsoft Azure, AWS, Windows Server, Microsoft 365, Entra ID, Intune, Linux, Nutanix, Proxmox, networking, backup & disaster recovery, Cisco and FortiGate. I share practical technical guides, infrastructure projects and insights to help IT professionals build and manage modern IT environments through VMoreCloud.
🖥️ VMware🔷 Azure☁️ AWS🪟 Windows Server🐧 Linux🗄️ Virtualization🛡️ Cybersecurity🔗 Networking💾 Backup & DR✖️ Nutanix🟠 Proxmox
📄
120+
Articles Published
👥
10K+
Readers
🎓
Learning & Sharing
A Stronger Tech Community
View all articles →
“Learn  |  Build  |  Share”
☁️ VMoreCloud|Tech Knowledge for a Better Tomorrow
IT  •  Cloud  •  Virtualization  •  Security  •  Open Source

Leave a Reply

Your email address will not be published. Required fields are marked *