Mailbox Migration Stuck: Complete Diagnosis

Migration batch halted or stalled for hours/days without progress. Includes MRS error diagnosis, throttling detection, sync validation, and safe restart procedures.

Symptom Definition

  • Migration batch status shows "Syncing" but percentage unchanged after 30+ minutes
  • Move request stuck in FailedOther, FailedToDelete, or Suspended state
  • MRS (Mailbox Replication Service) log shows repeated errors or warnings
  • Some mailboxes in batch moved successfully, others stalled (batch partially blocked)
  • User complains mailbox still inaccessible or user sees quota/permission errors after "migration complete"
  • Issue started after network change, directory sync issue, or HCW reconfiguration

⚠️ Business Consequence: Why This Matters

  • Financial Impact: Stuck migrations = dual licensing costs extend ($5K–$15K per 100 users per month)
  • Compliance Exposure: Split mailbox data = eDiscovery/audit incompleteness
  • Operational Risk: Users in limbo state (can't access full mailbox, degraded performance)
  • Project Risk: Migration timeline slippage triggers go-live date delays

Average diagnosis time: 20–30 minutes — prevents migration batch failures.

Exact Error Messages & Signals

Mailbox migration error signals with mapped root causes
Error/Signal Root Cause
FailedOther, "Replication failed" MRS connection timeout, firewall blocking, or source mailbox locked
FailedToDelete, "Unable to delete folder" On-premises mailbox holds or retention policies prevent deletion after sync
Suspended, "Admin paused migration" Move request manually suspended (Resume-MoveRequest required)
MRS event: "Throttling policy applied" Cloud throttling limit exceeded; batch rate-limited by EXO
"Cannot open mailbox" error in MRS log Directory sync lag; mailbox object missing in cloud or attributes empty
Percentage stuck at 99%, won't finalize Large item in mailbox; MRS cannot sync past threshold

Conditions Where This Occurs

  • Throttling limit hit: Too many concurrent migrations; cloud applies 429 rate limits
  • Directory sync lag: Cloud mailbox created but SMTP/proxyAddress attributes not yet synced
  • Network/firewall issue: MRS connection to cloud EXO proxy blocked or timing out
  • Large item in mailbox: Single email/attachment exceeds MRS item size limit (~150 MB)
  • Source mailbox locked: User or process has mailbox open; prevents clean cutover
  • Retention hold on-premises: Mailbox has eDiscovery hold or compliance hold; prevents deletion
  • Permissions issue: MRS service account missing Send-As or mailbox access rights
  • Connector misconfiguration: Hybrid connector routing broken or EXO proxy not reachable

What NOT to Do

  • Do NOT delete move request without confirming with user—may orphan cloud mailbox
  • Do NOT force finalize without checking MRS log—could corrupt mailbox in transit
  • Do NOT remove holds from mailbox without CAB approval (compliance risk)
  • Do NOT disable the hybrid connector to restart MRS (breaks all routing)
  • Do NOT migrate more than 200 mailboxes concurrently without increasing throttling policy

Diagnostic Steps: Decision Tree

Step 1: Get move request details and error

Run (on-premises or cloud):

Get-MoveRequest -Identity user | Select Status, RequestGuid, ErrorMessage

Expected: Status = "Syncing" or "Synced"; ErrorMessage blank if healthy

If error message present: Note it, go to Step 2.

Step 2: Check MRS logs for detailed error

Run (on-premises):

Get-MoveRequestStatistics -Identity user -IncludeReport | fl

Look for "FailureType", "Report" fields. Copy error message.

Common errors: "Throttling", "Connection timeout", "Cannot open mailbox"

Step 3: Check directory sync status

Run (cloud):

Get-User user | Select RecipientType, PrimarySmtpAddress, @{N="ProxyAddresses";E={$_.ProxyAddresses}}

Expected: RecipientType = UserMailbox; has SMTP addresses

If blank/RemoteUserMailbox: Sync lag. Force sync and wait 15m.

Step 4: Check current throttling policy

Run (cloud):

Get-ThrottlingPolicy | Select Name, *Concurrent*

Expected: Shows concurrent migration limits (usually 10-20 per policy)

If error/blank: Policy issue. Go to remediation.

Step 5: Test MRS connectivity from on-premises to cloud

Run (on-premises):

Test-MserviceConnection -MonitoringContext:$true

Expected: Returns status "Success"

If timeout/failed: Network or connector issue. Go to remediation.

Step 6: Check for holds or retention on source mailbox

Run (on-premises):

Get-Mailbox user | Select *Hold*, *Retention*

If holds present: Must be removed before deletion phase. Escalate to compliance team.

Root Cause Patterns & Frequency

Root cause patterns for stuck mailbox migrations with evidence, fixes, and frequency
Root Cause Evidence Fix Frequency
Throttling limit exceeded MRS log shows "429" or "Throttling policy applied" Reduce concurrent moves or increase throttling policy limit 42%
Directory sync lag Cloud user shows RemoteUserMailbox or missing proxyAddresses Force directory sync; wait 15m for attributes to populate 31%
MRS connection timeout Test-Mservice fails; MRS log shows network timeouts Check firewall rules for EXO proxy; restart MRS service 16%
Large item in mailbox Percentage stuck at 99%; MRS log mentions item size Manually remove/archive large item; restart move request 7%
Mailbox on hold Get-Mailbox returns *Hold or *Retention attributes Remove hold (with CAB approval); restart move 4%

Safe Remediation Procedures

Procedure 1: Resume Suspended Move Request (Low Risk)

Purpose: Restart a manually paused migration.

Pre-check:

Get-MoveRequest -Identity user | Select Status

Steps (on-premises or cloud):

  1. Resume move:
    Resume-MoveRequest -Identity user -Confirm:$false
  2. Monitor progress:
    Get-MoveRequest -Identity user | Select PercentComplete, Status

Rollback: Re-suspend: Suspend-MoveRequest -Identity user -Confirm:$false

Procedure 2: Force Directory Sync Before Migration (Low Risk)

Purpose: Ensure cloud mailbox and attributes exist before restarting migration.

Steps (on-premises):

  1. Force directory sync:
    Start-ADSyncSyncCycle -PolicyType Delta
  2. Wait 15 minutes.
  3. Verify cloud user:
    Get-User user | Select RecipientType, PrimarySmtpAddress
  4. If successful, retry move:
    Resume-MoveRequest -Identity user -Confirm:$false

Rollback: None needed.

Procedure 3: Reduce Concurrent Migrations (Medium Risk)

Purpose: Lower migration rate to stay under throttling limits.

Steps (cloud):

  1. Current batch status:
    Get-MoveRequest -Status Syncing | Measure-Object | Select Count
  2. If count > 20, suspend newest migrations to drop concurrent count:
    Get-MoveRequest -Status Syncing | Sort-Object -Property RequestGuid -Descending | Select -First 10 | Suspend-MoveRequest -Confirm:$false
  3. Wait 30 minutes; then resume suspended batch in smaller waves (5 at a time).

Rollback: Resume all: Get-MoveRequest -Status Suspended | Resume-MoveRequest

Procedure 4: Restart MRS Service (High Risk - Requires CAB)

Purpose: Reset MRS connection if hung or timing out.

Pre-check:

Get-Service MSExchangeMailboxReplication | Select Status

Steps (on-premises, during maintenance window):

  1. Suspend all active moves (save state):
    Get-MoveRequest -Status Syncing | Suspend-MoveRequest -Confirm:$false
  2. Stop MRS:
    Stop-Service MSExchangeMailboxReplication
  3. Wait 30 seconds.
  4. Start MRS:
    Start-Service MSExchangeMailboxReplication
  5. Resume all moves:
    Get-MoveRequest -Status Suspended | Resume-MoveRequest -Confirm:$false

Rollback: If errors occur, re-suspend and contact Microsoft Support.

Procedure 5: Remove Mailbox Hold (Medium Risk - Requires CAB & Compliance Review)

Purpose: Allow deletion phase of migration when hold prevents it.

Pre-check:

Get-Mailbox user | Select LitigationHoldEnabled, InPlaceHolds

Steps (on-premises, after CAB approval):

  1. Disable hold:
    Set-Mailbox user -LitigationHoldEnabled $false
  2. Resume move:
    Resume-MoveRequest -Identity user -Confirm:$false

Rollback: Re-enable hold: Set-Mailbox user -LitigationHoldEnabled $true

Escalation Criteria

  • When to escalate to Microsoft: If all remediation steps completed but move request still stuck after 2 hours—cloud-side issue (EXO proxy or MRS backend). Contact Microsoft with RequestGuid from Get-MoveRequest.
  • When to escalate to network team: If Test-Mservice fails and firewall cannot reach EXO proxy—network connectivity issue, requires network troubleshooting.
  • When to escalate to compliance team: If mailbox has holds (eDiscovery, litigation, retention) preventing deletion phase—requires CAB and compliance review before hold removal.

Frequently Asked Questions

Why is my migration batch stuck at 99%?

Large items or holds prevent finalization. Remove oversized items or clear compliance holds with approval.

How do I confirm throttling is the issue?

Look for “Throttling policy applied” in MRS logs and high concurrent moves. Reduce concurrency or raise limits for the sender.

Is it safe to restart the MRS service?

Do it in a maintenance window after suspending active moves, then resume post‑restart.

Related Guides