Edit

Assess readiness for the v6 and v7 VM series

Applies to: ✔️ Linux VMs ✔️ Windows VMs

Workload patterns: ✔️ B. Image-based hosts · E. Customer-managed VMs · F. Stateful and clustered · G. Certified appliances — ❌ Not for A, C, or D

To move to the v6 or v7 series, start with a quick readiness check. Readiness is a short checklist focused on the platform underneath: boot mode, image, storage interface, network driver, and regional and zonal availability.

Note

Who this article is for. This readiness check assumes you own the image and the VM — customer-managed applications, stateful and clustered workloads, session-host golden images, and certified appliances.

Greenfield deployments

For new deployments, you don't need to fix anything. Choose the v6 or v7 series intentionally and start clean:

  • Confirm region and zone availability and quota for the chosen family.
  • Note a fallback size, zone, or region before launch.
  • Use infrastructure as code (Bicep or Terraform) for repeatability.
  • Enable Trusted Launch (the default for Generation 2) for Secure Boot and vTPM.
  • Deploy from a current Generation 2, NVMe-ready, MANA-ready marketplace or Azure Compute Gallery image.

Greenfield deployments can skip the remediation guidance that follows and go straight to sizing and capacity in Plan the modernization.

Brownfield modernization from the v2 through v5 series

Retiring v3 source series

Important

The Dv3, Dsv3, Ev3, and Esv3 series retire on November 15, 2029. After that date, you can't create, resize into, run, or purchase these sizes. Assess workloads on these series first. For retirement details, see the Retired VM sizes modernization guide.

Workloads on these series usually trigger several readiness signals at once. Check these signals for every v3 workload:

  • Generation 1: Many v3 VMs are Generation 1. Plan a Generation 2 image. You can't convert Generation 1 Dv3 VMs to Generation 2 in place. For more information, see Decide a modernization approach.
  • Image: Refresh custom images to a current Generation 2, NVMe-ready, and MANA-ready version.
  • NVMe: The v3 series presents disks over SCSI. Replace hard-coded SCSI device paths with stable identifiers.
  • MANA: Confirm the OS and driver meet the MANA version floors.
  • Local disk: Every v3 size includes a local temporary disk. If the workload uses it, choose a d-suffixed target size, such as Ddsv6 or Edsv6, or relocate that data to a managed data disk.
  • Region and quota: Capacity growth restrictions already block extra v3 quota. Request quota for the target family early in every region and zone you need.

If the v6 or v7 prerequisites block a v3 workload, the v5 series provides the smoothest transition. For more information, see Modernize to the v5 VM series.

What changes, and what doesn't

What changes What doesn't change
Boot mode (Generation 2, UEFI, Trusted Launch) Application code and configuration
Disk interface (NVMe) and disk device paths Business logic, user flows, APIs
Network driver (MANA) Autoscale rules and scaling thresholds
Local and temporary disk presence and format Load balancer, ingress, and DNS topology
Image driver readiness Identity and authentication design
Low-level agents that install kernel or filter drivers Application-layer monitoring dashboards

Hard gates

Two categories of workloads have a gate that comes before this checklist. Confirm the gate first. If the target family isn't supported, the remaining signals don't matter.

Important

  • SAP workloads. Only sizes on the SAP-certified list are supported, regardless of platform readiness. Treat certification as a gate that comes before all other planning, not as a validation item. See What SAP software is supported on Azure VMs.
  • ISV virtual appliances. Firewalls, network virtual appliances, backup dec, and storage appliances are vendor-certified products. The vendor certifies specific VM families, NIC layouts, driver configurations, and disk presentation. Confirm the vendor supports your exact target family before assessing anything else. See ISV network and storage appliances.

Readiness signals to check

Signal Why it matters Recommended action
Generation 1 source (common on v2, v3, and v4) The v6 and v7 series require Generation 2 (UEFI). Plan a Generation 2 image, or use the Generation 1 to Generation 2 upgrade.
OS NVMe support The OS must discover disks over NVMe. Confirm a supported OS version and refresh the image if needed, or follow the SCSI to NVMe conversion.
Custom image not NVMe/Generation 2 ready The image might not boot or attach storage on the target size. Rebuild or update the image; test boot and disk discovery once.
MANA driver readiness Networking uses the MANA adapter. Confirm OS and driver support (see version floors under Assessment Checklist.
Hard-coded SCSI disk paths Scripts or agents that reference /dev/disk/azure/scsi* need stable IDs. Switch to stable identifiers (by-UUID or Azure disk symlinks).
Persistent data on the OS disk Cross-generation moves redeploy from a fresh image, so anything an app writes straight to the OS volume (configuration, license/activation files, local databases, certificates, or state) doesn't carry over. Inventory what each workload persists to the OS disk and plan a capture-and-restore step, or relocate it to a managed data disk or external store. See Persistent application data on the OS disk.
Temporary-disk dependency A local or temporary disk exists only on d-suffixed sizes and is presented as NVMe. A source VM that already has a temporary disk (for example, E32ds_v5) can't convert in place directly to a v6 size. Choose a d-size if local scratch is needed, and relocate the page file or tempdb accordingly. Where the source has a temporary disk, plan a redeploy path rather than a direct conversion.
Azure Disk Encryption (ADE) for Linux ADE for Linux isn't supported with NVMe, so converting an ADE-encrypted Linux VM to NVMe produces an unsupported configuration. Decrypt the VM before you convert, or use the redeploy-from-image path. Check for ADE yourself first, the community SCSI-to-NVMe conversion script doesn't currently detect ADE and can complete without warning.
Local NVMe temporary disk isn't auto-formatted On v6 and v7 sizes, the local NVMe temporary disk is presented raw and unformatted and is re-created on every stop/deallocate cycle. Nothing left on it is persistent, and on Windows the D: mapping can be lost after a deallocate/start cycle. Initialize and format the local disk on each start (for example, a boot-time task), and keep nothing persistent there.
Region and zone requirement Availability varies by region and zone. Confirm the target size is available in the required regions and zones before committing the design. See Region, zone, and capacity planning.
Availability and quota for the new family The v6 and v7 series use distinct quota families. Request quota early, verify capacity for the target size in the required regions and zones, and use capacity reservations for guaranteed supply.
Family-scoped reservations and savings plans Discounts are scoped to a VM family. Replan reservations or savings plans so coverage follows the move.
Low-level ISV agents (antivirus, backup, monitoring with kernel or filter drivers) Secure Boot and NVMe can affect unsigned or older drivers. Confirm a current, signed agent version.
Marketplace or ISV network appliance Vendors certify specific VM families and NIC/driver configurations. Confirm vendor support for the target family and image.

Session-host golden images

For non-persistent session hosts — Azure Virtual Desktop pooled host pools, Citrix DaaS random (pooled) catalogs, and Omnissa Horizon floating instant-clone pools (pattern B) — the readiness signals above apply to the golden image, not to each session host. Assess the image once, and pay particular attention to two signals that bite hardest on session hosts:

  • Low-level agents. Antivirus, EDR, and monitoring agents that install kernel or filter drivers must be current and signed to work with Secure Boot.
  • Persistent data on the OS disk. This pattern assumes user profiles and application data already live outside the session host. Confirm that's true before you rebuild the image.

Persistent desktops don't follow this pattern. Azure Virtual Desktop personal host pools, Citrix DaaS static (dedicated) catalogs, and Omnissa Horizon dedicated assignments bind a user to a specific VM, so there's no shared image to assess once and no host to drain. Assess each one as a customer-managed VM, and expect the OS-disk data and hibernation signals in the preceding table to apply.

For the host replacement sequence, see Image-based desktop and application hosts.

Assessment checklist

Keep the checklist lean and platform-focused.

Scope

  • Confirm sponsor and workload owner.
  • Document business driver (capacity, performance, cost, or modernization).
  • Identify source family (v2/v3/v4/v5) and deployment type (modernization or greenfield).
  • Separate production and non-production.
  • Agree on modernization window and success/rollback criteria.

Compute and capacity

  • Select current size and target v6/v7 size.
  • Confirm VM generation (Generation 2 path planned if the source is Generation 1).
  • Confirm target region and zone requirement.
  • Confirm quota and availability per wave; consider capacity reservation.
  • Note fallback size or region.

OS and image

  • Support OS version; image is Generation 2, NVMe, and MANA ready.
  • Azure Disk Encryption, BitLocker, or similar.
  • Rebuild and validate custom gallery images once; enable boot diagnostics for the pilot.
  • Use Azure Image Builder and Azure Compute Gallery for image build and versioning to ensure repeatability.

Storage

  • Inventory OS and data disks; check disk-path references for hard-coded SCSI paths.
  • Review temporary and local disk use; confirm page file, tempdb, and scratch placement.
  • Take backup or snapshot before cutover; confirm Azure Backup support for Generation 2 and Trusted Launch.

Networking

  • Confirm MANA OS and driver readiness.
  • For network appliances: confirm NIC count, IP forwarding, and vendor support for the family.

Note

MANA OS version floors

  • Linux: MANA Ethernet drivers are upstream in Linux kernel 5.15 and later. Kernel 6.2 and later adds support for advanced features such as RDMA/InfiniBand and DPDK. Prefer a recent kernel from an endorsed distribution.
  • Windows: Use current Windows Server images with the built-in MANA driver and the latest updates.
  • MANA is also rolling out to some existing VM series, so confirming OS compatibility benefits the whole estate, not just the v6 and v7 series.

Commercial

  • Replan family-scoped reservations and savings plans so discount coverage follows the workload.

Inventory query (Azure Resource Graph)

The following Azure Resource Graph query surfaces the items that gate a clean move: size, generation, OS, image source, disk controller type, and more. Run this query in the portal's Resource Graph Explorer or via az graph query.

For more queries, see Starter queries.

resources
| where type =~ 'microsoft.compute/virtualmachines'
| extend p = properties
// ---- identity & placement ----
| extend
    resourceId          = id,
    availabilityZone    = tostring(zones[0]),
    availabilitySetId   = tostring(p.availabilitySet.id),
    vmssId              = tostring(p.virtualMachineScaleSet.id),
    platformFaultDomain = tostring(p.platformFaultDomain)
| extend
    availabilitySetName = iff(isnotempty(availabilitySetId), tostring(split(availabilitySetId, '/')[-1]), ''),
    vmssName            = iff(isnotempty(vmssId),            tostring(split(vmssId, '/')[-1]), '')
| extend
    membershipModel = case(
        isnotempty(vmssId),            'VMSS Flex',
        isnotempty(availabilitySetId), 'Availability Set',
                                       'Standalone'),
    zonePlacement   = iff(isnotempty(availabilityZone), 'Zonal', 'Regional')
// ---- compute & generation ----
| extend
    vmSize            = tostring(p.hardwareProfile.vmSize),
    hyperVGeneration  = tostring(p.extended.instanceView.hyperVGeneration)
// ---- power state + data quality ----
| extend
    vmState              = tostring(p.extended.instanceView.powerState.displayStatus)
| extend
    instanceViewCaptured = iff(isempty(hyperVGeneration) and isempty(vmState), 'No', 'Yes')
// ---- OS & image ----
| extend
    osType            = tostring(p.storageProfile.osDisk.osType),
    osVersion         = tostring(p.extended.instanceView.osVersion),
    computerName      = tostring(p.extended.instanceView.computerName),
    isMarketplaceVm   = isnotempty(plan),
    imagePublisher    = tostring(p.storageProfile.imageReference.publisher),
    imageOffer        = tostring(p.storageProfile.imageReference.offer),
    imageSku          = tostring(p.storageProfile.imageReference.sku),
    imageVersion      = tostring(p.storageProfile.imageReference.exactVersion)
// ---- storage / disks ----
| extend
    diskControllerType= tostring(p.storageProfile.diskControllerType),
    osDiskType        = tostring(p.storageProfile.osDisk.managedDisk.storageAccountType),
    osDiskSizeGB      = toint(p.storageProfile.osDisk.diskSizeGB),
    ephemeralOsDisk   = iff(tostring(p.storageProfile.osDisk.diffDiskSettings.option) =~ 'Local', 'Yes', 'No'),
    dataDiskCount     = array_length(p.storageProfile.dataDisks)
// ---- capabilities / licensing ----
| extend
    hibernationEnabled= tostring(p.additionalCapabilities.hibernationEnabled),
    ultraSsdEnabled   = tostring(p.additionalCapabilities.ultraSSDEnabled),
    licenseType       = tostring(p.licenseType)
// ---- network (VM level) ----
| extend
    nicCount          = array_length(p.networkProfile.networkInterfaces)
// ---- security & encryption ----
| extend
    securityType      = tostring(p.securityProfile.securityType),
    secureBootEnabled = tostring(p.securityProfile.uefiSettings.secureBootEnabled),
    vTpmEnabled       = tostring(p.securityProfile.uefiSettings.vTpmEnabled),
    adeOsDiskEnabled  = tostring(p.storageProfile.osDisk.encryptionSettings.enabled)
// ---- NIC flags: any NIC on the VM ----
| extend joinKey = tolower(tostring(id))
| join kind=leftouter (
    resources
    | where type =~ 'microsoft.network/networkinterfaces'
    | extend vmId = tolower(tostring(properties.virtualMachine.id))
    | where isnotempty(vmId)
    | summarize
        anyAccelNet = countif(tobool(properties.enableAcceleratedNetworking) == true),
        anyIpFwd    = countif(tobool(properties.enableIPForwarding) == true)
      by vmId
) on $left.joinKey == $right.vmId
| extend
    acceleratedNetworking = iff(coalesce(anyAccelNet, 0) > 0, 'Yes', 'No'),
    ipForwarding          = iff(coalesce(anyIpFwd, 0) > 0, 'Yes', 'No')
| project
    name, resourceGroup, location,
    membershipModel, zonePlacement, availabilityZone, vmssName, availabilitySetName, platformFaultDomain,
    vmSize, hyperVGeneration,
    vmState, instanceViewCaptured,
    osType, osVersion, computerName, isMarketplaceVm,
    imagePublisher, imageOffer, imageSku, imageVersion,
    diskControllerType, osDiskType, osDiskSizeGB, ephemeralOsDisk, dataDiskCount,
    hibernationEnabled, ultraSsdEnabled, licenseType,
    nicCount, acceleratedNetworking, ipForwarding,
    securityType, secureBootEnabled, vTpmEnabled, adeOsDiskEnabled,
    subscriptionId, resourceId, vmssId, availabilitySetId
| order by membershipModel asc, vmSize asc, name asc
Column Values Meaning / why it matters
name / resourceGroup / location string VM name, resource group, Azure region (target availability is per-region).
membershipModel Standalone · Availability Set · VMSS Flex How the VM is grouped for fault tolerance; shapes redeploy and sequencing.
zonePlacement Zonal · Regional Zone posture (AvSet VMs are always Regional).
availabilityZone 1/2/3 or blank Blank = regional or in an availability set.
vmssName / availabilitySetName string or blank Parent VMSS Flex or availability set, if any.
platformFaultDomain integer or blank Fault-domain index for Flex and AvSet members.
vmSize e.g. Standard_D4s_v3 The VM size; decode CPU platform from it (see CPU table).
hyperVGeneration V1 · V2 · blank V1 = cross-gen redeploy needed (biggest effort driver). Blank = state not captured.
vmState VM running · VM deallocated · VM stopped · … Current power state.
instanceViewCaptured Yes · No No → hyperVGeneration/osVersion/vmState unreliable; start the VM before trusting them.
osType Windows · Linux Drives OS-support checks for Gen2 and Trusted Launch.
osVersion / computerName string or blank Guest OS version and hostname; blank on deallocated VMs.
isMarketplaceVm true · false true → target needs a Gen2 or plan-matched image SKU.
imagePublisher / imageOffer / imageSku / imageVersion strings or blank Source image; all blank = custom or specialized image (trace lineage manually).
diskControllerType SCSI · NVMe · blank Blank ≈ SCSI. NVMe target needs a driver-ready OS.
osDiskType Premium_LRS · PremiumV2_LRS · StandardSSD_LRS · Standard_LRS · UltraSSD_LRS · *_ZRS OS managed-disk SKU.
osDiskSizeGB integer OS disk size (cross-gen move = fresh OS disk).
ephemeralOsDisk Yes · No Yes = stateless; nothing on the OS disk persists.
dataDiskCount integer Data disks to detach and re-attach; check target SKU max.
hibernationEnabled / ultraSsdEnabled true · false · blank Capability flags the target family and zone must also support.
licenseType Windows_Server · Windows_Client · RHEL_BYOS · SLES_BYOS · blank Azure Hybrid Benefit or BYOL; blank = pay-as-you-go.
nicCount integer NIC count; check target SKU max.
acceleratedNetworking Yes · No Enabled on any NIC; target size must support it.
ipForwarding Yes · No Enabled on any NIC; signals a network-appliance role.
securityType TrustedLaunch · ConfidentialVM · blank Blank = Standard. Gen2 is a prerequisite for Trusted Launch.
secureBootEnabled / vTpmEnabled true · false · blank Trusted Launch posture.
adeOsDiskEnabled true · blank Azure Disk Encryption on the OS disk only (not data disks; platform SSE is separate).
subscriptionId / resourceId / vmssId / availabilitySetId GUID / ARM ID / blank Identifiers.

For the CPU decode, use the following table:

Letter CPU platform Example
(none) Intel x86-64 Standard_D4s_v5
a AMD x86-64 (EPYC) Standard_D4as_v5
p Arm64 (Ampere Altra / Microsoft Cobalt) Standard_D4ps_v5

Exit criteria

  • You clear hard gates: SAP workloads have a certified target size, and appliance workloads have written vendor support for the exact family.
  • Workloads are scored as ready now, ready after a small refresh, or plan the region or family.
  • Target family, region, zone, and quota or capacity plan are documented.
  • Any small remediation is assigned.
  • Pilot (or greenfield first deployment) is selected.
  • Rollback approach is noted, and workload owners approve the first wave.

Next steps