|
| 1 | +--- |
| 2 | +title: Create a Storage Spaces Direct Campus Cluster on Windows Server |
| 3 | +description: Discover step-by-step instructions to deploy a Storage Spaces Direct campus cluster for high availability and fault tolerance on Windows Server 2025. |
| 4 | +#customer intent: As an IT administrator, I want to create a Storage Spaces Direct campus cluster so that I can ensure rack-level resiliency for my workloads across two physical locations. |
| 5 | +author: robinharwood |
| 6 | +ms.author: roharwoo |
| 7 | +ms.reviewer: robhind |
| 8 | +ms.date: 01/20/2026 |
| 9 | +ms.topic: how-to |
| 10 | +--- |
| 11 | + |
| 12 | +# Create a Storage Spaces Direct campus cluster |
| 13 | + |
| 14 | +Learn how to create a Storage Spaces Direct campus cluster on Windows Server 2025 and later. A campus cluster distributes data across two physical racks in separate rooms or buildings within the same campus, providing rack-level resiliency for your workloads. |
| 15 | + |
| 16 | +> [!NOTE] |
| 17 | +> A campus cluster is different from a stretch cluster. Campus clusters use LAN connectivity within the same location with S2D replication, while stretch clusters span geographically distant sites connected by WAN and use Storage Replica for replication. |
| 18 | +
|
| 19 | +For more information about campus cluster architecture, supported configurations, and how it compares to other topologies, see [Failover Clustering topologies](topologies.md). |
| 20 | + |
| 21 | +## Prerequisites |
| 22 | + |
| 23 | +Before you create a campus cluster, ensure you meet the following requirements: |
| 24 | + |
| 25 | +- **Windows Server 2025** with the 2025-12 Security Update (KB5072033) installed on every node in the failover cluster. |
| 26 | +- **Flat S2D storage** - All capacity drives must be flash-based (SSD or NVMe). Don't use HDDs. |
| 27 | +- **Exactly two RACK fault domains** - You must define exactly two rack-level fault domains and place the cluster nodes in these two racks. |
| 28 | +- **Hardware OEM guidelines** - Follow your hardware OEM's guidelines for the deployment. |
| 29 | +- **Cluster quorum resource** - Place the quorum resource (File Share Witness, Disk Witness, Cloud Witness, or USB Witness) in a third room, separate from the data rooms containing the racks. |
| 30 | + |
| 31 | +For optimal performance and resiliency, use the following configurations: |
| 32 | + |
| 33 | +- Each rack has a separate network path to the cluster quorum resource. |
| 34 | +- Use redundant top-of-rack (TOR) switches, core switches, and dedicated networks for S2D storage traffic to minimize single points of failure and maximize workload uptime and durability. |
| 35 | +- Network latency of 1 ms or less between racks. Use the [PsPing](/sysinternals/downloads/psping) utility to measure network latency. |
| 36 | +- RDMA NICs and switches, which can achieve up to 30% CPU savings. |
| 37 | + |
| 38 | +## Create the failover cluster |
| 39 | + |
| 40 | +To create a campus cluster, first create a failover cluster without storage, then define fault domains before enabling Storage Spaces Direct. |
| 41 | + |
| 42 | +#### [PowerShell](#tab/powershell) |
| 43 | + |
| 44 | +Here's how to create the failover cluster using the [New-Cluster](/powershell/module/failoverclusters/new-cluster) cmdlet. |
| 45 | + |
| 46 | +1. Run PowerShell on your computer in an elevated session. |
| 47 | + |
| 48 | +1. Run the following command to create the cluster without storage: |
| 49 | + |
| 50 | + ```powershell |
| 51 | + New-Cluster -Name <ClusterName> -Node <Node1,Node2,Node3,Node4> -NoStorage |
| 52 | + ``` |
| 53 | + |
| 54 | + Replace `<ClusterName>` with your cluster name and `<Node1,Node2,Node3,Node4>` with your node names. |
| 55 | + |
| 56 | +#### [Failover Cluster Manager](#tab/fcm) |
| 57 | + |
| 58 | +Here's how to create the failover cluster using Failover Cluster Manager. |
| 59 | + |
| 60 | +1. From the Windows desktop, open the **Start** menu, and then select the **Server Manager** tile. |
| 61 | + |
| 62 | +1. On the **Tools** menu, select **Failover Cluster Manager**. |
| 63 | + |
| 64 | +1. In the **Failover Cluster Manager** pane, under **Management**, select **Create Cluster**. The Create Cluster Wizard opens. |
| 65 | + |
| 66 | +1. On the **Before You Begin** page, select **Next**. |
| 67 | + |
| 68 | +1. On the **Select Servers** page, in the **Enter name** box, enter the name of a server that you plan to add as a failover cluster node, and then select **Add**. Repeat this step for each of the four nodes. When you're finished, select **Next**. |
| 69 | + |
| 70 | +1. On the **Validation Warning** page, select **Yes** to run cluster validation, and then select **Next**. Complete the Validate a Configuration Wizard. |
| 71 | + |
| 72 | +1. On the **Access Point for Administering the Cluster** page, enter a name for the cluster. If the servers don't use DHCP, configure one or more static IP addresses for the failover cluster. Select **Next**. |
| 73 | + |
| 74 | +1. On the **Confirmation** page, clear the **Add all eligible storage to the cluster** checkbox because you configure storage later when enabling Storage Spaces Direct. Select **Next**. |
| 75 | + |
| 76 | +1. On the **Summary** page, confirm that the failover cluster was created successfully, and then select **Finish**. |
| 77 | + |
| 78 | +--- |
| 79 | + |
| 80 | +## Define fault domains |
| 81 | + |
| 82 | +After you create the cluster, define fault domains before you enable Storage Spaces Direct. |
| 83 | + |
| 84 | +> [!IMPORTANT] |
| 85 | +> You must define fault domains before enabling Storage Spaces Direct. Once you create the pool and volumes, data doesn't retroactively move in response to changes to the fault domain topology. |
| 86 | +
|
| 87 | +#### [PowerShell](#tab/powershell) |
| 88 | + |
| 89 | +Here's how to define fault domains using PowerShell. |
| 90 | + |
| 91 | +1. Run PowerShell on your computer in an elevated session. |
| 92 | + |
| 93 | +1. Run the following command to define two rack fault domains, with two nodes in each rack: |
| 94 | + |
| 95 | + ```powershell |
| 96 | + Set-ClusterFaultDomain -XML @" |
| 97 | + <Topology> |
| 98 | + <Site Name="Campus"> |
| 99 | + <Rack Name="Room1"> |
| 100 | + <Node Name="Node1"/> |
| 101 | + <Node Name="Node2"/> |
| 102 | + </Rack> |
| 103 | + <Rack Name="Room2"> |
| 104 | + <Node Name="Node3"/> |
| 105 | + <Node Name="Node4"/> |
| 106 | + </Rack> |
| 107 | + </Site> |
| 108 | + </Topology> |
| 109 | + "@ |
| 110 | + ``` |
| 111 | + |
| 112 | + Replace the node names with your actual node names, and update the site and rack names as appropriate for your environment. |
| 113 | + |
| 114 | +1. Verify the fault domain configuration by running: |
| 115 | + |
| 116 | + ```powershell |
| 117 | + Get-ClusterFaultDomain |
| 118 | + ``` |
| 119 | + |
| 120 | +For alternative methods to define fault domains, including using individual PowerShell cmdlets, see [Fault domain awareness](fault-domains.md). |
| 121 | + |
| 122 | +#### [Failover Cluster Manager](#tab/fcm) |
| 123 | + |
| 124 | +Failover Cluster Manager doesn't support configuring rack-level fault domains through the GUI. Use PowerShell to define fault domains. |
| 125 | + |
| 126 | +1. Run PowerShell on your computer in an elevated session. |
| 127 | + |
| 128 | +1. Run the following command to define two rack fault domains, with two nodes in each rack: |
| 129 | + |
| 130 | + ```powershell |
| 131 | + Set-ClusterFaultDomain -XML @" |
| 132 | + <Topology> |
| 133 | + <Site Name="Campus"> |
| 134 | + <Rack Name="Room1"> |
| 135 | + <Node Name="Node1"/> |
| 136 | + <Node Name="Node2"/> |
| 137 | + </Rack> |
| 138 | + <Rack Name="Room2"> |
| 139 | + <Node Name="Node3"/> |
| 140 | + <Node Name="Node4"/> |
| 141 | + </Rack> |
| 142 | + </Site> |
| 143 | + </Topology> |
| 144 | + "@ |
| 145 | + ``` |
| 146 | + |
| 147 | + Replace the node names with your actual node names. |
| 148 | + |
| 149 | +1. Verify the fault domain configuration by running: |
| 150 | + |
| 151 | + ```powershell |
| 152 | + Get-ClusterFaultDomain |
| 153 | + ``` |
| 154 | + |
| 155 | +--- |
| 156 | + |
| 157 | +## Enable Storage Spaces Direct |
| 158 | + |
| 159 | +After defining fault domains, enable Storage Spaces Direct on the cluster. |
| 160 | + |
| 161 | +#### [PowerShell](#tab/powershell) |
| 162 | + |
| 163 | +Here's how to enable Storage Spaces Direct using the [Enable-ClusterStorageSpacesDirect](/powershell/module/failoverclusters/enable-clusterstoragespacesdirect) cmdlet. |
| 164 | + |
| 165 | +1. Run PowerShell on your computer in an elevated session. |
| 166 | + |
| 167 | +1. Enable Storage Spaces Direct on the cluster: |
| 168 | + |
| 169 | + ```powershell |
| 170 | + Enable-ClusterStorageSpacesDirect |
| 171 | + ``` |
| 172 | + |
| 173 | +1. Update the storage pool to ensure it's using the latest features: |
| 174 | + |
| 175 | + ```powershell |
| 176 | + Get-StoragePool S2D* | Update-StoragePool |
| 177 | + ``` |
| 178 | + |
| 179 | +1. Verify that the storage pool version is 29 or later: |
| 180 | + |
| 181 | + ```powershell |
| 182 | + (Get-CimInstance -Namespace root/microsoft/windows/storage -ClassName MSFT_StoragePool -Filter 'IsPrimordial = false').CimInstanceProperties['Version'].Value |
| 183 | + ``` |
| 184 | + |
| 185 | +1. Verify that the storage pool's `FaultDomainAwareness` property is set to `StorageRack`: |
| 186 | + |
| 187 | + ```powershell |
| 188 | + Get-StoragePool -FriendlyName S2D* | Format-List FaultDomainAwarenessDefault |
| 189 | + ``` |
| 190 | + |
| 191 | +#### [Failover Cluster Manager](#tab/fcm) |
| 192 | + |
| 193 | +Here's how to enable Storage Spaces Direct using Failover Cluster Manager. |
| 194 | + |
| 195 | +1. In **Failover Cluster Manager**, expand the cluster name, and then select **Storage** > **Pools**. |
| 196 | + |
| 197 | +1. Right-click **Pools**, and then select **Enable Storage Spaces Direct**. Follow the wizard to complete the operation. |
| 198 | + |
| 199 | +1. After enabling Storage Spaces Direct, use PowerShell to update the storage pool and verify the configuration: |
| 200 | + |
| 201 | + ```powershell |
| 202 | + Get-StoragePool S2D* | Update-StoragePool |
| 203 | + ``` |
| 204 | + |
| 205 | +1. Verify that the storage pool version is 29 or later: |
| 206 | + |
| 207 | + ```powershell |
| 208 | + (Get-CimInstance -Namespace root/microsoft/windows/storage -ClassName MSFT_StoragePool -Filter 'IsPrimordial = false').CimInstanceProperties['Version'].Value |
| 209 | + ``` |
| 210 | + |
| 211 | +1. Verify that the storage pool's `FaultDomainAwareness` property is set to `StorageRack`: |
| 212 | + |
| 213 | + ```powershell |
| 214 | + Get-StoragePool -FriendlyName S2D* | Format-List FaultDomainAwarenessDefault |
| 215 | + ``` |
| 216 | + |
| 217 | +--- |
| 218 | + |
| 219 | +## Create volumes |
| 220 | + |
| 221 | +Create volumes on the storage pool based on your resiliency requirements. For a 2+2 campus cluster, use four-copy volumes as they provide the best balance between cost, performance, and resiliency. A four-copy volume places a copy of data on each node, so the cluster can survive losing an entire rack and a node at the same time. |
| 222 | + |
| 223 | +A four-copy volume provides 25% storage capacity, while a two-copy volume provides 50% capacity with less resiliency. For more information about volume resiliency options, see [Fault tolerance and storage efficiency](../storage/storage-spaces/fault-tolerance.md). |
| 224 | + |
| 225 | +#### [PowerShell](#tab/powershell) |
| 226 | + |
| 227 | +Here's how to create a four-copy mirrored volume using PowerShell. |
| 228 | + |
| 229 | +1. Run PowerShell on your computer in an elevated session. |
| 230 | + |
| 231 | +1. Run the following command to create a four-copy volume: |
| 232 | + |
| 233 | + ```powershell |
| 234 | + New-Volume -FriendlyName "FourCopyVolume" ` |
| 235 | + -StoragePoolFriendlyName S2D* ` |
| 236 | + -FileSystem CSVFS_ReFS ` |
| 237 | + -Size 500GB ` |
| 238 | + -ResiliencySettingName Mirror ` |
| 239 | + -PhysicalDiskRedundancy 3 ` |
| 240 | + -ProvisioningType Fixed ` |
| 241 | + -NumberOfDataCopies 4 ` |
| 242 | + -NumberOfColumns 3 |
| 243 | + ``` |
| 244 | + |
| 245 | + To create a two-copy volume instead, set `-PhysicalDiskRedundancy 1` and remove the `-NumberOfDataCopies` and `-NumberOfColumns` parameters. To use thin provisioning, change `-ProvisioningType` to `Thin`. |
| 246 | + |
| 247 | +For more information about resiliency types and storage efficiency, see [Fault tolerance and storage efficiency](../storage/storage-spaces/fault-tolerance.md). |
| 248 | + |
| 249 | +#### [Failover Cluster Manager](#tab/fcm) |
| 250 | + |
| 251 | +Here's how to create volumes using Failover Cluster Manager. To create four-copy volumes, use PowerShell. |
| 252 | + |
| 253 | +1. In **Failover Cluster Manager**, expand the cluster name, and then select **Storage** > **Pools**. |
| 254 | + |
| 255 | +1. Select the **S2D** storage pool, and then right-click and select **New Virtual Disk**. |
| 256 | + |
| 257 | +1. In the New Virtual Disk Wizard, enter a name for the volume. |
| 258 | + |
| 259 | +1. On the **Storage Layout** page, select **Mirror**. |
| 260 | + |
| 261 | +1. On the **Resiliency Settings** page, select **Two-way mirror** for a two-copy volume. |
| 262 | + |
| 263 | +1. On the **Provisioning Type** page, select either **Fixed** or **Thin**. |
| 264 | + |
| 265 | +1. Specify the size for the volume and complete the wizard. |
| 266 | + |
| 267 | +1. After creating the virtual disk, right-click it and select **New Volume** to format it by using ReFS. |
| 268 | + |
| 269 | +--- |
| 270 | + |
| 271 | +## Related content |
| 272 | + |
| 273 | +- [Deploy a quorum witness](deploy-quorum-witness.md) |
| 274 | +- [Fault domain awareness](fault-domains.md) |
| 275 | +- [Announcing support for S2D Campus Cluster on Windows Server 2025](https://techcommunity.microsoft.com/blog/failoverclustering/announcing-support-for-s2d-campus-cluster-on-windows-server-2025/4477075) |
0 commit comments