How to Set Up Storage Spaces for Redundant Storage on Windows
A complete walkthrough pooling multiple physical drives into a resilient virtual disk — Windows' built-in, software-defined answer to hardware RAID.
Storage Spaces pools multiple physical disks into flexible virtual disks with configurable redundancy — a software-defined alternative to hardware RAID controllers, built directly into Windows.
Step 1: identify the physical disks to pool
Get-PhysicalDisk
Disks intended for a storage pool should be unformatted/unpartitioned — Storage Spaces takes ownership of the raw disk, not an existing partition on it.
Step 2: create a storage pool from the physical disks
$disks = Get-PhysicalDisk -CanPool $true
New-StoragePool -FriendlyName "MyPool" -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks $disks
The pool itself is just a container — it doesn’t yet define redundancy behavior; that’s configured per virtual disk created from the pool.
Step 3: understand the resiliency options before creating a virtual disk
Simple — no redundancy, striped across disks (fastest,
no protection against a disk failure)
Mirror — data duplicated across disks (protects against
failure, at the cost of usable capacity)
Parity — distributed parity like RAID 5 (better capacity
efficiency than mirror, slower write performance)
Step 4: create a virtual disk with the chosen resiliency
New-VirtualDisk -StoragePoolFriendlyName "MyPool" -FriendlyName "MyMirrorDisk" -ResiliencySettingName Mirror -Size 500GB
Step 5: initialize and format the new virtual disk
Get-VirtualDisk -FriendlyName "MyMirrorDisk" | Get-Disk | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem NTFS
Step 6: verify pool and virtual disk health
Get-StoragePool -FriendlyName "MyPool" | Get-VirtualDisk
Check the HealthStatus field — this is what you’d monitor going forward for signs of degradation.
Step 7: simulate and understand failure recovery, for Mirror or Parity configurations
With a redundant configuration, physically removing (or in testing, marking offline) one disk should leave the virtual disk accessible, though in a degraded health state — confirming this in a controlled test, rather than assuming it works, is worth doing before relying on it in production.
Step 8: add a replacement disk after a failure
Add-PhysicalDisk -StoragePoolFriendlyName "MyPool" -PhysicalDisks (Get-PhysicalDisk -CanPool $true)
Storage Spaces then repairs the redundant virtual disk onto the new physical disk automatically.
Step 9: monitor pool health going forward
Get-StorageJob
Get-PhysicalDisk | Select FriendlyName, HealthStatus, OperationalStatus
Why choosing resiliency level deliberately matters more than the setup commands
Simple, Mirror, and Parity trade off capacity, performance, and failure tolerance very differently — Simple offers no protection at all despite being the fastest and most space-efficient, while Mirror sacrifices roughly half of raw capacity for straightforward, fast-to-rebuild redundancy. Picking based on which trade-off actually matches your data’s importance and your available disk budget, rather than defaulting to whichever option a guide happened to demonstrate, is the actual decision that determines whether Storage Spaces protects you when a disk eventually fails.