Do not reset, initialize, remove, or replace a disk until its UniqueId/serial number and the deployment type—standalone Storage Spaces, clustered Storage Spaces, or Storage Spaces Direct (S2D)—have been positively identified.
1. Capture the current state
Run PowerShell as Administrator:
Get-StoragePool -IsPrimordial $false |
Select FriendlyName, HealthStatus, OperationalStatus, IsReadOnly, Size, AllocatedSize
Get-VirtualDisk |
Select FriendlyName, UniqueId, ResiliencySettingName, NumberOfDataCopies,
PhysicalDiskRedundancy, HealthStatus, OperationalStatus, DetachedReason
Get-PhysicalDisk |
Select FriendlyName, SerialNumber, UniqueId, DeviceId, PhysicalLocation,
HealthStatus, OperationalStatus, Usage, Size
Get-StorageJob
A Degraded virtual disk still has at least one readable copy, but its resilience is reduced. No redundancy means data has already been lost because too many drives failed; replace the failed drives and restore from backup rather than attempting destructive recovery. For Incomplete or Majority Disks Unhealthy, reconnect missing drives—and bring offline S2D nodes online—before replacing anything.^1^
Save the output before changing the pool.
2. Identify the failing physical drive
Map the affected virtual disk to its physical disks:
$vd = Get-VirtualDisk -FriendlyName "<VirtualDiskName>"
$vd | Get-PhysicalDisk |
Select FriendlyName, SerialNumber, UniqueId, DeviceId, PhysicalLocation,
HealthStatus, OperationalStatus, Usage, Size
Then collect hardware counters from each suspect disk:
$vd | Get-PhysicalDisk | Get-StorageReliabilityCounter |
Select DeviceId, Temperature, Wear, PowerOnHours,
ReadErrorsTotal, ReadErrorsUncorrected,
WriteErrorsTotal, WriteErrorsUncorrected
These counters expose temperature, wear, usage time, and corrected or uncorrected errors.^2^
Interpret the operational state before acting:
- Failed media or Device hardware failure: replace the drive.
- Recurring IO error, Transient error, or Abnormal latency: replacement is appropriate if the condition persists.
- Split, Stale metadata, or Unrecognized metadata has a reset-and-repair path, but
Reset-PhysicalDisk erases the disk. Do not use it until the disk identity is certain and remaining redundancy has been validated.^1^
Match SerialNumber, UniqueId, and PhysicalLocation against the enclosure, controller, or platform inventory. Do not rely on friendly name alone.
3. Verify resiliency and file-system integrity
ResiliencySettingName, NumberOfDataCopies, and PhysicalDiskRedundancy on the affected virtual disk are the relevant per-disk configuration evidence. Get-ResiliencySetting only reports layouts/defaults available from the subsystem and does not by itself prove the effective configuration when creation-time overrides were used. PhysicalDiskRedundancy defines how many physical-disk failures the virtual disk was configured to withstand.^3^
Perform a read-only file-system scan before hardware changes. Use the volume’s actual drive letter or path; do not assume D::
Repair-Volume -DriveLetter <Letter> -Scan
# For a suitable cluster volume, identify it by its applicable path:
Repair-Volume -Path "<VolumePath>" -Scan
-Scan reports corruption without repairing it. -SpotFix briefly takes the volume offline, while -OfflineScanAndFix takes it offline for a full repair; schedule either only after storage redundancy is restored.^4^
Confirm a usable backup before proceeding, particularly if another disk failure would exceed PhysicalDiskRedundancy.
4. Restore redundancy using the matching workflow
Storage Spaces Direct
Reconnect missing nodes or drives first, then replace drives reported as failed according to the server/enclosure hardware procedure. S2D automatically starts repair after a drive is reconnected or replaced; monitor it with:
Get-StorageJob
Get-VirtualDisk |
Select FriendlyName, HealthStatus, OperationalStatus
Do not apply the standalone Add-PhysicalDisk or Azure LUN-removal sequence automatically to S2D.^1^
Standalone Storage Spaces
Microsoft directly documents the following retire–repair–drain–remove sequence for standalone Storage Spaces hosted in Azure. For physical servers, SANs, or vendor-controlled enclosures, first validate the equivalent procedure with the hardware/storage vendor.^5^
If the suspect drive remains readable, sufficient free capacity exists, and a spare slot is available:
- Identify and add only the intended replacement—never every poolable disk:
$replacement = Get-PhysicalDisk -UniqueId "<ReplacementUniqueId>"
$replacement | Select SerialNumber, UniqueId, PhysicalLocation, HealthStatus, Size
Add-PhysicalDisk -StoragePoolFriendlyName "<PoolName>" -PhysicalDisks $replacement
Add-PhysicalDisk adds the selected disk to the specified pool.^6^
- Retire the suspect disk, repair, and wait:
Set-PhysicalDisk -UniqueId "<FailingDiskUniqueId>" -Usage Retired
Get-VirtualDisk -UniqueId "<VirtualDiskUniqueId>" | Repair-VirtualDisk
Get-StorageJob
- After all jobs complete, verify the retired disk has
VirtualDiskFootprint equal to 0; only then remove it from the pool and physically detach it:
$old = Get-PhysicalDisk -UniqueId "<FailingDiskUniqueId>"
$old | Select FriendlyName, UniqueId, Usage, VirtualDiskFootprint
Remove-PhysicalDisk -PhysicalDisks $old `
-StoragePoolFriendlyName "<PoolName>"
If the old disk is inaccessible or no spare slot exists, the evacuate-first sequence is unavailable. Do not improvise by resetting or pulling an ambiguously identified member; verify the backup and remaining redundancy, then use the replacement procedure for that enclosure, controller, or hosting platform.
5. Final validation
Wait until no storage jobs remain, then confirm:
Get-StorageJob
Get-StoragePool -IsPrimordial $false |
Select FriendlyName, HealthStatus, OperationalStatus
Get-VirtualDisk |
Select FriendlyName, HealthStatus, OperationalStatus
Repair-Volume -DriveLetter <Letter> -Scan
The expected endpoint is pool and virtual-disk Healthy/OK, no active repair job, no footprint on a retired disk, and a clean file-system scan. If repair reports insufficient free space, insufficient redundancy, inaccessible data, or an unexpected disk topology, stop destructive operations and engage Microsoft Support or the storage hardware vendor.
References
- Troubleshoot Storage Spaces and Storage Spaces Direct health and operational states
- Get-StorageReliabilityCounter-Syntax
- CreateVirtualDisk method of the MSFT_StoragePool class
- Repair-Volume-Description
- Manage disks in standalone Storage Spaces on Windows Server hosted in Azure
- Add-PhysicalDisk-Description