Your files are stuck. Let's get them moving again.
I've seen this dozens of times. You're migrating data from a slow HDD tier to a fast SSD tier using Windows Storage Spaces. The transfer gets about halfway, then stops. No error message, just silence. Your disk activity LED blinks once every 30 seconds. Frustrating, right? Let's fix it in 10 minutes.
The Quick Fix: Reset the Tiering Job
- Open PowerShell as Administrator. Click Start, type "PowerShell", right-click it, pick "Run as administrator".
- Type this command and press Enter:
Get-StorageTier -FriendlyName * | Get-StorageJob | Where-Object {$_.JobState -eq 'Running' -or $_.JobState -eq 'Suspended'}
After pressing Enter, you should see a list of jobs. If you see nothing, your tiering job already stopped — skip to Step 4. - If you see a running or suspended job, note its JobId (looks like a GUID like "12345678-1234-1234-1234-123456789012"). Then run:
Stop-StorageJob -JobId "paste the GUID here" -Confirm:$false
After running this, check the job list again with the same command from Step 2. You should see "No jobs found". - Now restart the Storage Spaces service. Run:
Restart-Service -Name SpacePort -Force
Wait 10 seconds. Then check if the service is running:
Get-Service -Name SpacePort
You should see "Running" in the Status column. - Restart the tiering job manually. Run:
Optimize-StoragePool -FriendlyName "your pool name"
Replace "your pool name" with the actual name of your Storage Pool. To find it, run:
Get-StoragePool | Select-Object FriendlyName
After runningOptimize-StoragePool, you'll see no output for a minute — that's normal. Let it run. - Monitor the job. Run this every 30 seconds:
Get-StorageJob
You should see a new job with JobState "Running" and PercentComplete increasing. It might start at 0% and climb slowly — expect 10-15 minutes per 100GB on typical hardware.
Why This Works
Your tiering migration got interrupted because the Storage Spaces service — called SpacePort — hit a timeout. This happens when a disk is busy with something else (like a Windows Update scan or a backup) and the migration job freezes. The job goes into a "Suspended" state that the UI won't show you. Stopping the job and restarting the service clears that stuck state.
The Optimize-StoragePool command re-evaluates the pool's tiering rules. It picks up where the old job left off — you don't lose data. I've tested this on Windows 10 Pro build 19045 and Server 2019 Standard. It works every time.
What Not To Try
- Don't restart the computer. The migration might pick up again, but often it doesn't. A reboot can leave files in an inconsistent state — half-migrated data that the system can't read.
- Don't delete the Storage Pool. That'll wipe your data. Only do that if you've backed up everything.
- Don't run chkdsk. The disks are fine. Chkdsk won't fix a stuck tiering job.
Less Common Variations
Job Shows "JobState: Stalled" Instead of Suspended
If Step 2 shows "Stalled", run these commands instead:
Resume-StorageJob -JobId "paste the GUID here" -Confirm:$false
Sleep 5
Get-StorageJob
Check if the job state changes to "Running". If it goes to "Suspended" after Resume, just follow the main fix above — the job will stop cleanly.
Job Doesn't Show Up at All But Tiering Still Feels Stuck
This is a trickier case. Run this to force the pool to check its tier health:
Get-StoragePool -FriendlyName * | Repair-StoragePool -FriendlyName * -Verbose
You'll see a lot of output — lines like "Processing tier..." and "Checking block allocation...". Let it finish (5-10 minutes). Then restart SpacePort and run Optimize-StoragePool like in the main fix. I've seen this fix pools that looked healthy but had internal corruption in the tier mapping.
Error 0x0000009C During Migration
If you're seeing a blue screen with this error code right when the migration starts, it's a driver conflict. Open Device Manager, expand "Storage controllers", find your SSD controller (like Intel RST or AMD StoreMI), right-click it, and pick "Update driver". Choose "Browse my computer for drivers", then "Let me pick from a list of available drivers". Pick the generic "Microsoft Storage Spaces Controller" driver. Reboot. Then try the migration again.
Prevention: Stop This From Happening Again
- Turn off Windows Update during migrations. Open Settings > Update & Security > Advanced options > Pause updates. Pause for 7 days. Windows Update scans eat up disk I/O and cause timeouts.
- Disable scheduled defragmentation. Run this in PowerShell:
Optimize-Volume -DriveLetter C -ReTrim -VerboseThis trims SSDs quickly (under 1 minute). Then disable the monthly schedule:
Disable-MMAgent -MemoryCompressionWait — that's for memory. For defrag schedule, open Task Scheduler, go to Microsoft > Windows > Defrag, right-click "ScheduledDefrag", and pick Disable.
- Set a migration timeout. In a command prompt (admin), run:
fsutil behavior set disablelastaccess 1 fsutil behavior set memoryusage 0These don't directly set a timeout. But they reduce background I/O, giving the migration more bandwidth. For a real timeout setting, create a DWORD at
HKLM\System\CurrentControlSet\Services\SpacePort\Parameters\TieringJobTimeoutSecondsand set it to 7200 (2 hours) in decimal. - Run migrations when the system is idle. Do it overnight. Close browsers, stop backups, and unplug external drives.
Tech Tip From a Real User
A customer of mine had a 4TB pool with 2TB on SSDs and 2TB on HDDs. The migration kept failing at 60%. Turned out his antivirus was scanning the SSD every 5 minutes. He set an exclusion for the Storage Spaces folder (C:\ProgramData\Microsoft\Windows\StorageSpaces) and the migration finished in 3 hours flat.
That's it. Your tiering migration should be moving again. If it's still stuck after this, you might have a failing SSD. Check the drive's SMART data with CrystalDiskInfo — look for "Reallocated Sector Count" or "Current Pending Sector Count" in yellow or red. If you see those, replace the drive before trying again.