When This Happens
You're running a storage pool on Windows 10 or Server 2016/2019. Everything's fine until the power blinks. Or you yank a drive to hot-swap it. When the system comes back, you open Storage Spaces and see the pool status shows "Rebalancing" with no progress. Maybe it's stuck at 0% for hours. The pool is technically online, but you can't write or read files reliably. Sometimes the rebalance just won't resume, no matter how long you wait.
What's Going On
Storage Spaces uses a metadata log to track rebalance progress. When the operation gets interrupted—power loss, drive removed without disconnecting properly, or even a driver crash—that log can get out of sync. Windows thinks the rebalance is still running, but it's actually dead in the water. The pool's parity or mirror state is inconsistent, so the system refuses to move forward. It's not a hardware failure most of the time. It's a software lock that needs a kick.
The real fix isn't in the GUI. You have to use PowerShell to check the status and either resume or reset the operation. Don't bother with chkdsk or SFC first—those won't touch the rebalance state.
Step-by-Step Fix
Step 1: Open PowerShell as Admin
Right-click the Start button and pick "Windows PowerShell (Admin)". Click Yes on the UAC prompt. You need elevated rights to talk to Storage Spaces directly.
Step 2: Check the Pool Status
Get-StoragePool -FriendlyName "YourPoolName" | Select-Object FriendlyName, OperationalStatus, HealthStatus, IsReadOnly, IsClustered
Replace "YourPoolName" with the actual name of your storage pool. Look at the OperationalStatus column. If it says "Rebalancing" or "Repairing", that's the problem. Also check IsReadOnly—if True, you can't write until this is fixed.
Step 3: Check the Virtual Disks in the Pool
Get-VirtualDisk -StoragePoolFriendlyName "YourPoolName" | Select-Object FriendlyName, OperationalStatus, HealthStatus
You might see individual virtual disks stuck in "Detached" or "Degraded" state. That's normal when the rebalance is incomplete. Write down the names of any virtual disks that look problematic.
Step 4: Try Resuming the Rebalance
Sometimes the operation just needs a nudge. Run this:
Resume-StorageJob -StoragePoolFriendlyName "YourPoolName"
Check the pool status again after 30 seconds. If the rebalance restarts and shows progress (even 1%), you're done. Watch it for a few minutes to confirm.
Step 5: If Resume Doesn't Work, Repair the Virtual Disk
When resume does nothing, the virtual disk's metadata is corrupted. Force a repair on each stuck virtual disk. Replace "YourVirtualDiskName" with the actual name:
Repair-VirtualDisk -FriendlyName "YourVirtualDiskName" -Force
The -Force parameter bypasses the stalled state. You'll see a warning about data loss—ignore it if you have backups. This doesn't erase your data, it just resets the rebalance state. Wait for the command to finish (it may take 30 seconds to 2 minutes depending on pool size).
Step 6: Verify and Reset Pool Read-Only Flag
After repair, check the pool again:
Get-StoragePool -FriendlyName "YourPoolName" | Select-Object IsReadOnly
If it's still True, force it off:
Set-StoragePool -FriendlyName "YourPoolName" -IsReadOnly $false
Step 7: Restart the Storage Spaces Service
This clears any stuck background threads. Open Services (services.msc), find "Storage Service", right-click and pick Restart. Then go back to PowerShell and run:
Get-StorageJob -StoragePoolFriendlyName "YourPoolName"
If no jobs are listed and the pool status shows "OK" or "Healthy", you've fixed it.
Still Stuck?
If the pool still shows rebalancing after all that, you have a hardware problem. Check the physical disks in the pool:
Get-PhysicalDisk -StoragePoolFriendlyName "YourPoolName" | Select-Object FriendlyName, OperationalStatus, HealthStatus, Usage
Look for any disk with OperationalStatus of "Lost Communication" or HealthStatus of "Unhealthy". Replace that drive immediately. If all disks show healthy but the pool won't rebalance, try removing and re-adding one drive at a time (only if you have redundancy—don't do this on a simple pool with no parity or mirror).
One last trick: if you're comfortable with data loss risk, you can detach and reattach the pool entirely. In PowerShell:
Remove-StoragePool -FriendlyName "YourPoolName" -Confirm:$false
Restart-Computer
# After reboot, re-add the pool via Storage Spaces GUI
This is a nuclear option. Only do it if you've got a full backup of the data. Most of the time, the repair command alone will get you moving again.