Skip to content

Add TSG: live migration fails with No mapping between account names and security IDs (0x80070534)#326

Merged
1008covingtonlane merged 6 commits into
Azure:mainfrom
1008covingtonlane:tsg/live-migration-sid-account-mapping
Jul 9, 2026
Merged

Add TSG: live migration fails with No mapping between account names and security IDs (0x80070534)#326
1008covingtonlane merged 6 commits into
Azure:mainfrom
1008covingtonlane:tsg/live-migration-sid-account-mapping

Conversation

@1008covingtonlane

@1008covingtonlane 1008covingtonlane commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

Documents the Azure Local 24H2 live-migration failure "No mapping between account names and security IDs was done" (0x80070534).

Summary:

  • On clusters below Azure Local 12.2605 (2026.05B), live migration of certain VMs fails, which also fails CAU / solution-update node drains.
  • Cause: the VM's creating-account SID does not resolve in Active Directory. Two ways it happens: (1) the VM was created or imported under a local node administrator account; (2) it was created under an AD administrator account that has since been deleted.
  • The 12.2605 fix removes the unnecessary validation of the creating account before live migration.

The article covers detection (Event 21024 / 0x80070534, the two at-risk conditions), the update resolution, and an interim quick-migration workaround (DefaultMoveType=1) that also lets the update itself complete, with a quick-vs-live comparison and a terms glossary.

Draft for review.

1008covingtonlane and others added 5 commits July 8, 2026 11:47
…and security IDs' (0x80070534)

24H2 clusters below Azure Local 12.2605 (2026.05B) fail to live-migrate VMs whose
creating account SID does not resolve in AD, which also fails CAU / solution
update node drains. Two causes: (1) VM created/imported under a local node
administrator; (2) created under an AD administrator account that no longer
exists. The 12.2605 fix removes the unnecessary validation of the creating
account before live migration. Documents detection (Event 21024 / 0x80070534),
the update resolution, and the interim quick-migration (DefaultMoveType=1)
workaround that also lets the update itself complete. Quick-vs-live comparison,
terms glossary, and cross-link to the distinct 22H2->23H2 dynamic-memory issue.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ry, hyphenate modifiers

- Fix the Related link to the 22H2->23H2 upgrade TSG: double-encode the literal
  %2D in the target filename as %252D so GitHub resolves it (the working repo
  convention per TSG/Upgrade/README.md), instead of the single-encoded %2D that
  404s.
- Add the TSG to TSG/Update/README.md so it is discoverable from the Update index.
- Hyphenate compound modifiers: sub-second, in-guest, time-sensitive,
  latency-sensitive.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…lease label

Azure Local customers running full Azure Local (not HCI) do not recognize the
"2026.05B" HCI-style release label and it only adds confusion. Reference the
Azure Local solution version 12.2605 alone throughout the customer-facing TSG.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…versions

- Note that VMs migrated into Azure Local from VMware or Hyper-V (for example
  using Azure Migrate) can carry an owner SID that does not resolve in Active
  Directory when the migration registered the VM under a local node administrator,
  making them subject to this failure. Add it to Issue Validation and Cause.
- Clarify the affected versions: 24H2 solution versions are 12.25xx/12.26xx (fix
  in 12.2605+); 23H2 clusters (11.25xx) are not affected because the account
  validation was introduced with 24H2.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… (Operational)

Per the live L4 validation (skill PR Azure#264, 2026-07-08): Event 21024 in the
VMMS-Admin log is only the "failed at migration source" marker and does NOT
contain the SID error text; the definitive "No mapping between account names and
security IDs" signature is Event 1106 in the Hyper-V-VMMS-OPERATIONAL log, with
the HRESULT rendered as the bare code 80070534 (no 0x prefix). The old query only
searched VMMS-Admin and matched 0x80070534, so it surfaced the marker but never the
confirming signature.

- Query both VMMS-Admin and VMMS-Operational; add Id 1106; match the bare 80070534;
  select LogName so the two events are distinguishable.
- Reword the prose to attribute the marker to Event 21024 (Admin) and the definitive
  signature to Event 1106 (Operational).
- Add the VMMS-Operational log to the "collect for Microsoft Support" list.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@AlBurns-MSFT

Copy link
Copy Markdown
Collaborator

Nice writeup, and the core of it holds up. I ran the read-only parts on lab hardware and checked the rest against the product behavior and Microsoft Learn. The cause (the pre-live-migration validation of the VM's creating account, which fails when that account's SID does not resolve in AD), the fix landing in 12.2605, the upgrade regression, and the version mapping (23H2 is 10.x/11.x, 24H2 is 12.x, with 11.2510 the last 23H2) all check out. On a cluster node I confirmed the cmdlets and parameters exist (including Get-ClusterResource -VMId), the three event channels exist, the detection query runs clean, and DefaultMoveType really does default to 4294967295. So the approach is sound. A few things to fix before it merges.

  1. The revert block will silently do nothing for most operators. $affectedVMs is only defined in the "Apply the workaround" block. The "Disable the workaround after updating" block runs after the whole update finishes (every node has rebooted, so almost certainly a new PowerShell session, possibly on a different node), where $affectedVMs is undefined. With StrictMode off (the interactive default) foreach ($vm in $affectedVMs) just iterates zero times: no output, no error, and the VMs stay pinned to quick migration. The later "confirm by live migrating a VM" step still passes on 12.2605, so it is easy to walk away believing you reverted when you did not. Re-declare the list at the top of both the verify and revert blocks, and add a guard so a missing list stops loudly instead of silently:

    if (-not $affectedVMs) { Write-Warning "Set `$affectedVMs to your affected VM names first."; return }

    [LOW RISK] doc-only change, but worth fixing since it defeats the revert.

  2. The hard-coded event IDs are not verified and at least one looks wrong. Microsoft's public "Troubleshoot live migration issues" article attributes Event 21024 to a different scenario (a VM that loses network connectivity after a successful migration) and puts the "failed at migration source" marker on Event 21502 (21501 as a variant). I could not confirm Event 1106 in the VMMS-Operational log for this signature either. The HRESULT text is right (0x80070534 is ERROR_NONE_MAPPED, "No mapping between account names and security IDs"), and since the query already matches on the message text and 80070534, that message match is the reliable signal. Suggest verifying the exact IDs on an affected 24H2 node and either correcting them or dropping the hard IDs and keeping the message match. [LOW RISK].

  3. The detection query can miss the confirming event on a busy node. Get-WinEvent -LogName $log -MaxEvents 200 | Where-Object {...} pulls the newest 200 events and then filters, so on a busy VMMS-Operational log (which is where the signature event lives), or when the failure is not recent, the confirming event can sit outside that window and the query returns nothing, reading as a false "not this issue." Filtering server-side scans the whole log instead:

    Get-WinEvent -FilterHashtable @{ LogName = $log; Id = 21502, 1106 }

    (swap in whatever IDs you confirm in point 2, and add StartTime if you want to bound it). [LOW RISK].

  4. Small precision fix on the DefaultMoveType note. 4294967295 is 0xFFFFFFFF, which means "use the cluster's default move type" (and that default is live migration), rather than literally the live-migration value. The reset command is correct and I confirmed 4294967295 is the real default on hardware, so this is only wording: something like "resetting to 4294967295 restores the cluster's default move type, which is live migration" reads more precisely. [LOW RISK].

  5. The set and revert loops skip a bad VM silently. There is no error handling around the state-changing Set-ClusterParameter, and Get-ClusterGroup $vm assumes the cluster group name matches the VM name. A mistyped, renamed, or offline VM cascades to $null | Set-ClusterParameter, which is a non-terminating error, so the loop keeps going and prints an empty value line that is easy to miss, leaving that VM unset and still failing the drain. Wrapping the per-VM body in try/catch, null-checking the VM and resource, and printing an explicit "not set" summary at the end would make a skip visible. [LOW RISK].

None of these are blockers to the approach, quick migration is the right workaround. One caveat on validation: I could not reproduce the actual 0x80070534 failure, since it needs a 24H2 build below 12.2605 plus a VM whose owner SID does not resolve, and the lab hardware available was 23H2. So the behavioral claims (the failure itself, and that quick migration then succeeds) are backed by the source and the code path rather than a live repro.

…cripts

- Detection query: scan the whole recent log server-side with
  Get-WinEvent -FilterHashtable @{LogName; StartTime} instead of -MaxEvents 200,
  so a busy VMMS-Operational log cannot push the confirming event out of the window.
  Keep both the validated event IDs (21024 Admin marker, 1106 Operational signature)
  and the message-text match; state that these IDs were validated during a live
  reproduction of the issue, and note the message text stays reliable if a build logs
  the failure under a different ID.
- Workaround scripts: re-declare $affectedVMs at the top of the Verify and Disable
  blocks (they usually run in a new session after the update, where the Apply-block
  variable is gone, so the revert was silently iterating zero times), add a guard that
  stops loudly on a missing list, wrap each per-VM body in try/catch with null-checked
  cmdlets, and print an explicit "NOT set / NOT reset" summary so a skipped VM is visible.
- DefaultMoveType note: 4294967295 (0xFFFFFFFF) means "use the cluster's default move
  type", which is live migration (precise wording).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@1008covingtonlane

Copy link
Copy Markdown
Collaborator Author

@AlBurns-MSFT thanks, this was a great review. All five are addressed in bb6062b:

1. Revert block silently doing nothing. Fixed. I re-declared $affectedVMs at the top of both the Verify and the Disable blocks (which usually run in a new session after the update, where the Apply-block variable is gone), and added a guard so a missing list stops loudly instead of iterating zero times.

2. Event IDs. I kept 21024 (Admin, the "failed at migration source" marker) and 1106 (Operational, the "No mapping" / bare 80070534 signature), because both were validated during a live reproduction of this exact failure on a pre-12.2605 24H2 cluster, and I now say that explicitly in the TSG. On the discrepancy with the public "Troubleshoot live migration" article: I believe 21024 is a generic "failed at migration source" event that is reused across scenarios (the network-loss case that article describes, and this SID case), disambiguated by the message text, so both your doc read and the repro are correct. That is exactly why I also kept the message-text match as the reliable signal; if a different build logs it under 21502 or another ID, the message match still catches it.

3. Busy-log miss. Fixed. The query now scans server-side by time with Get-WinEvent -FilterHashtable @{ LogName = $log; StartTime = $since } instead of pulling the newest 200 and filtering, so the confirming event cannot sit outside the window on a busy Operational log.

4. DefaultMoveType wording. Fixed: "4294967295 (0xFFFFFFFF) means 'use the cluster's default move type', which is live migration."

5. Silent per-VM skips. Fixed. Each per-VM body in the set and revert loops is now wrapped in try/catch with null-checked cmdlets, and prints an explicit "NOT set" / "NOT reset" summary at the end, so a mistyped, renamed, or offline VM is visible instead of leaving an empty line.

On validation: the failure itself and the quick-migration workaround were reproduced live on a pre-12.2605 24H2 cluster (with the fix's KIR toggled off then on for the A/B), which is where the 21024/1106 IDs and the bare 80070534 render came from. Thanks again for the careful pass.

@1008covingtonlane
1008covingtonlane marked this pull request as ready for review July 9, 2026 14:25
Copilot AI review requested due to automatic review settings July 9, 2026 14:25
@1008covingtonlane
1008covingtonlane merged commit 5c5a578 into Azure:main Jul 9, 2026
1 check passed

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new Azure Local Troubleshooting Guide (TSG) documenting a 24H2 live-migration failure (0x80070534) that can also block CAU/solution-update node drains, and links it from the Update TSG index.

Changes:

  • Added a new TSG describing symptoms, validation steps, root cause, and resolution via updating to 12.2605+.
  • Documented an interim quick-migration workaround using DefaultMoveType=1 to allow drains/updates to complete before applying the permanent fix.
  • Updated TSG/Update/README.md to include the new guide.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
TSG/Update/README.md Adds the new TSG link to the Update documentation index.
TSG/Update/Live-migration-fails-with-No-mapping-between-account-names-and-security-IDs.md New troubleshooting article covering detection, cause, update-based fix, and workaround.

Comment on lines +1 to +3
# Live migration fails with "No mapping between account names and security IDs was done" (0x80070534)

## Overview
Comment on lines +69 to +73
**2. Confirm the VM is exposed to this issue.** The affected VM was created or imported under an account whose Security Identifier (SID) does not resolve in Active Directory. This happens in either of these cases:

- The VM was **created or imported under a local (non-domain) administrator account** on a cluster node (for example the built in Administrator, or another local account). A local account SID exists only on that node and can never be resolved through Active Directory.
- The VM was created by a **domain account that has since been removed (deleted) from the domain**. Once the account is deleted, its SID is orphaned and no longer resolves in Active Directory.
- The VM was **migrated or imported into Azure Local from VMware or Hyper-V** (for example using Azure Migrate). If the migration registered the VM under a local node administrator account rather than a domain account, the recorded owner SID is a local account that exists only on that node and cannot be resolved through Active Directory.

- The `DefaultMoveType` setting is stored in the cluster database, so it persists across node reboots and through the phases of an orchestrated solution update. It is not reverted by the update, so remember to reset it after the cluster reaches 12.2605.
- No VM needs to be recreated. The update fixes migration for existing affected VMs in place.
- This issue is distinct from [Live migrations may fail when upgrading OS from 22H2 to 23H2](../Upgrade/Known%252Dissue-%252D-Live-migrations-may-fail-when-upgrading-OS-from-22H2-to-23H2.md), which is caused by VMs that use dynamic memory and is resolved by a different registry setting. If your migrations fail with the `0x80070534` "No mapping between account names and security IDs" error, use this article.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants