After You Migrate: Cleanup, Governance, and Preventing Unmanaged Disks from Coming Back

TL;DR

Converting disks is not the finish line. Your real goal is a new steady state:

no unmanaged disks

no lingering storage account VHD costs

guardrails that prevent reintroduction

Cleanup is measurable FinOps value: remove unattached disks and old VHD blobs after your validation period.

Governance is your long-term win: use Azure Policy to audit VMs that do not use managed disks and surface drift continuously.

Architecture Diagram

Table of Contents

Scenario

What “Done” Looks Like

Operational Runbook Snapshot

Cleanup Workflow

Governance Controls

Anti-patterns

Day-two Operations

Best Practices

Conclusion

Scenario

You’ve migrated your VMs to managed disks. The outage risk is reduced.

Then the quiet problems show up:

original VHD blobs still exist and cost money

orphaned disks accumulate over time

a team deploys a legacy template and reintroduces unmanaged disks

your compliance posture report doesn’t catch any of it until an audit

This post is about making “managed disks everywhere” the default, not a one-time project.

What “Done” Looks Like

You are done when:

Inventory shows zero unmanaged-disk VMs across all subscriptions.

Old VHD artifacts have a documented retention period and then are deleted.

You have a policy posture:

audit unmanaged disk usage

track exceptions with an expiration date

Your IaC and pipelines cannot accidentally recreate unmanaged disks.

Operational Runbook Snapshot

Roles:

Cloud platform team: backlog, tooling, policy, reporting

App owners: validation sign-off and maintenance windows

Security/FinOps: governance requirements and cleanup approval

Runbook stages:

validate

cleanup

enforce guardrails

monitor drift and exceptions

Cleanup Workflow

Cleanup objective

Reduce cost and remove latent risk:

unattached managed disks

unattached unmanaged VHD blobs

storage accounts that exist only to host legacy disks

Managed disks cleanup

A managed disk can be unattached but still billable.

Operator workflow:

list unattached managed disks

confirm retention requirements

delete with approval

Example with Azure CLI:

# List managed disks that are not attached to any VM
az disk list –query “[?managedBy==null].[name,resourceGroup,location,id]” -o table

Unmanaged disks cleanup

Unmanaged disks are page blobs in storage accounts. After migration, the original VHD blobs may remain.

Operator workflow:

identify storage accounts that hosted VHDs

locate unlocked VHD blobs after conversion

delete after validation period and approval

Keep your deletion workflow conservative:

snapshot or export evidence if required by your org

perform deletes in small batches

document exactly what was removed

Governance Controls

Azure Policy: audit unmanaged disk usage

Your minimum viable guardrail:

Assign the built-in policy Audit VMs that do not use managed disks at the subscription or management group scope.

Integrate non-compliance reporting into your operations cadence.

Policy assignment options:

portal assignment

IaC assignment (Terraform/Bicep)

CLI/PowerShell in a platform pipeline

CI guardrails in IaC

Design-time prevention is stronger than day-two detection.

Controls to add:

module standards: disallow VM disk definitions that reference storage account VHD URIs

pipeline tests:

policy-as-code checks

template validation

peer review gates for compute changes

Exception workflow

You will find edge cases. Handle them without creating permanent risk:

time-boxed exceptions only

business owner sign-off

remediation plan tracked like any other change

Anti-patterns

“We’ll migrate later” without an owner and a date.

Converting production without verifying IP dependencies.

Leaving old VHD blobs forever because “storage is cheap.”

Fixing production manually but not updating IaC, guaranteeing drift and repeat work.

Treating policy audit as optional telemetry instead of an operational control.

Day-two Operations

Your steady-state routines:

Weekly inventory report of unmanaged disk usage (should be empty).

Monthly cleanup run for unattached managed disks.

Quarterly review of exceptions and removals.

Post-incident check: any restored VM should land on managed disks.

Best Practices

Build a “golden path”:

managed disks by default

backup enabled by default

policy assignment at management group

Measure outcomes:

number of unmanaged-disk VMs reduced to zero

storage cost reduction from cleanup

reduction in operational toil by removing storage account management

Conclusion

Migration avoids an outage, but governance prevents a repeat. Clean up the old artifacts, enforce managed disks with policy, and put guardrails into your delivery pipelines so unmanaged disks cannot reappear.

Convert Azure VMs from Unmanaged to Managed Disks: A Production-Ready Runbook
TL;DR Architecture Diagram Table of Contents Scenario You’ve identified one or more production VMs still using unmanaged disks. You need a runbook…

Sources

Find and delete unattached Azure managed and unmanaged disks (Azure portal): https://learn.microsoft.com/en-us/azure/virtual-machines/disks-find-unattached-portalFind and delete unattached Azure managed and unmanaged disks using PowerShell: https://learn.microsoft.com/en-us/azure/virtual-machines/windows/find-unattached-disksMigrate your Azure unmanaged disks by March 31, 2026: https://learn.microsoft.com/en-us/azure/virtual-machines/unmanaged-disks-deprecationAzure virtual machine recommended policies (includes Audit VMs that do not use managed disks): https://learn.microsoft.com/en-us/azure/governance/policy/concepts/recommended-policiesBuilt-in policy definitions for Azure Virtual Machines: https://learn.microsoft.com/en-us/azure/virtual-machines/policy-referenceFrequently asked questions about disks: https://learn.microsoft.com/en-us/azure/virtual-machines/faq-for-disks
The post After You Migrate: Cleanup, Governance, and Preventing Unmanaged Disks from Coming Back appeared first on Digital Thought Disruption.