VMWARE → STACKIT · WINDOWS GUIDE

Migrating Windows virtual machines from VMware to STACKIT

A Windows VM moves to STACKIT as a disk image: you decide how the Windows licence is provided, convert the disk to qcow2 or raw, make sure the guest has the storage and network drivers of the new platform, choose a machine type that supports Windows, and import. This guide follows those steps on a demo estate of six Windows servers and one template that StackToIT assessed on 4 November 2026, and shows what the run flags and what it leaves to you.

A SQL Server VM with three disks

Left: the three disks of win-sql01 from the vDisk sheet. Right: the blocks of compute.tf for that server, without the review comments above each block.

Example inputRVTools_tabvDisk.csv
VM,Disk,Capacity MiB,Raw,Disk Mode,Sharing mode,Thin,Controller,Shared Bus,Disk Path,VM UUID
win-sql01,Hard disk 1,102400,False,persistent,sharingNone,False,SCSI controller 0,noSharing,[ds-prod-01] win-sql01/win-sql01_0.vmdk,4202-vm12-0004
win-sql01,Hard disk 2,512000,False,persistent,sharingNone,False,SCSI controller 1,noSharing,[ds-prod-01] win-sql01/win-sql01_1.vmdk,4202-vm12-0004
win-sql01,Hard disk 3,204800,False,persistent,sharingNone,False,SCSI controller 2,noSharing,[ds-prod-01] win-sql01/win-sql01_2.vmdk,4202-vm12-0004
STACKIT Terraform by StackToITterraform/compute.tf
resource "stackit_network_interface" "vm_win_sql01_nic1" {
  project_id = var.project_id
  network_id = stackit_network.network_PG_Win_Data.network_id
  ipv4       = "10.30.20.31"
}

resource "stackit_server" "vm_win_sql01" {
  project_id        = var.project_id
  name              = "win-sql01"
  machine_type      = var.vm_win_sql01_machine_type
  availability_zone = var.availability_zone
  boot_volume = {
    source_type = "image"
    source_id   = var.vm_win_sql01_image_id
    size        = 100
  }
  network_interfaces = [stackit_network_interface.vm_win_sql01_nic1.network_interface_id]
}

resource "stackit_volume" "vm_win_sql01_disk2" {
  project_id        = var.project_id
  name              = "win-sql01-disk2"
  availability_zone = var.availability_zone
  size              = 500
  performance_class = var.vmware_volume_performance_class
}

resource "stackit_server_volume_attach" "vm_win_sql01_disk2" {
  project_id = var.project_id
  server_id  = stackit_server.vm_win_sql01.server_id
  volume_id  = stackit_volume.vm_win_sql01_disk2.volume_id
}

resource "stackit_volume" "vm_win_sql01_disk3" {
  project_id        = var.project_id
  name              = "win-sql01-disk3"
  availability_zone = var.availability_zone
  size              = 200
  performance_class = var.vmware_volume_performance_class
}

resource "stackit_server_volume_attach" "vm_win_sql01_disk3" {
  project_id = var.project_id
  server_id  = stackit_server.vm_win_sql01.server_id
  volume_id  = stackit_volume.vm_win_sql01_disk3.volume_id
}
  • Boot disk

    Hard disk 1, 102400 MiB, becomes a boot volume of 100 GiB. The server starts from an image you supply through a variable.

  • Data disks

    Hard disk 2 with 512000 MiB and hard disk 3 with 204800 MiB become volumes of 500 and 200 GiB, each attached by its own attach block. Their contents are copied after the volumes exist.

  • The image is not in the draft

    StackToIT does not convert or upload disks. The image ID is an input, and the next section shows how it is declared.

What the draft asks you for

Left: the vInfo row of win-sql01. Right: the two variables its server reads, from variables.tf.

Example inputRVTools_tabvInfo.csv
VM,Powerstate,Template,CPUs,Memory,NICs,Disks,Provisioned MiB,In use MiB,Primary IP Address,DNS Name,Datacenter,Cluster,Host,Folder,Firmware,HW version,Path,Annotation,OS according to the configuration file,OS according to the VMware Tools,VM UUID
win-sql01,poweredOn,False,8,65536,1,3,819200,573440,10.30.20.31,win-sql01.corp.example,DC-Munich,CL-Prod,esx11,prod,bios,vmx-19,[ds-prod-01] win-sql01/win-sql01.vmx,SQL Server 2019 Standard,Microsoft Windows Server 2019 (64-bit),Microsoft Windows Server 2019 Standard,4202-vm12-0004
STACKIT Terraform by StackToITterraform/variables.tf
variable "vm_win_sql01_image_id" {
  type        = string
  description = "STACKIT image converted from the boot disk of VM win-sql01 (qcow2 or raw)."
}

variable "vm_win_sql01_machine_type" {
  type        = string
  description = "STACKIT machine type replacing VM win-sql01 (source 8 vCPU / 64 GiB). See https://docs.stackit.cloud/products/compute-engine/server/basics/machine-types/"
}
  • Size is stated, not chosen

    The source has 8 CPUs and 65536 MiB. The machine type variable repeats that as 8 vCPU and 64 GiB and links the STACKIT machine types, so you choose a catalogue name.

  • Windows narrows the choice

    The machine type page has a Windows Server compatible column for each family. Check it before you pick.

  • Image from the boot disk

    The image variable stands for the boot disk after conversion to qcow2 or raw.

The Windows template

Left: the vInfo row of tpl-win2022. Right: the line of the README in terraform/ that lists it under Left for the architect.

Example inputRVTools_tabvInfo.csv
VM,Powerstate,Template,CPUs,Memory,NICs,Disks,Provisioned MiB,In use MiB,Primary IP Address,DNS Name,Datacenter,Cluster,Host,Folder,Firmware,HW version,Path,Annotation,OS according to the configuration file,OS according to the VMware Tools,VM UUID
tpl-win2022,poweredOff,True,2,4096,1,1,61440,30720,,,DC-Munich,CL-Prod,esx11,prod,efi,vmx-19,[ds-prod-01] tpl-win2022/tpl-win2022.vmx,"Golden image, sysprepped",Microsoft Windows Server 2022 (64-bit),,4202-vm12-0007
STACKIT Terraform by StackToITterraform/README.md
| Source | Class | Why |
|---|---|---|
| `vm.tpl-win2022` | REPLATFORM / MEDIUM | VM template: convert the VMDK to qcow2/raw and upload it with stackit_image, or rebuild it from a STACKIT public image. |
  • No image block is written

    A template is classified REPLATFORM. The run writes no image for it: you convert the disk and upload it, or rebuild it from a STACKIT public image.

  • Firmware stays open

    The template boots with EFI. The run leaves BIOS or EFI open and notes that it is a property of the uploaded image, which you create.

What the run says about each Windows VM

VM in the demo estateWhat the run reportsWhat you do
win-iis01, win-iis02 (Windows Server 2022, EFI)Class RECONFIGURE. Info finding: prepare the image for the new virtual hardware (storage and network drivers) before conversion, and check how Windows licences are provided on STACKIT.Pick the licence route and a Windows-compatible machine type. Confirm EFI on the uploaded image. Replace VMware Tools.
win-dc01 (Windows Server 2019, domain controller)Same class and finding as the web servers. The note in the export says domain controller; the run does not interpret notes.Treat it as an Active Directory task. As practice, many teams add a new domain controller on STACKIT instead of converting the disk of an existing one; agree this with your AD owner.
win-sql01 (Windows Server 2019, SQL Server)Three disks drafted as boot volume plus two volumes. A memory reservation of 65536 is exported; the reservation is left open because a server cannot express it.Choose a machine type that holds the memory. Plan the database move separately; see the database guide.
win-fs01 (Windows Server 2019, file server)A 2097152 MiB data disk becomes a 2048 GiB volume. A snapshot of 18432 MiB is found; the finding says only the current state is migrated.Consolidate the snapshot before export. Plan the data copy and its duration.
win-app12 (Windows Server 2012 R2)Warning that the guest operating system is past its vendor's end of support and that STACKIT public images will not cover it. Also a snapshot finding and a finding for the legacy network adapter.Upgrade first, or migrate it as a custom image at your own risk, as the finding says. Check the guest network configuration after conversion.
tpl-win2022 (template)Class REPLATFORM, no image block written. Info finding for Windows.Rebuild from a STACKIT public image or convert and upload the template.

The statements in the middle column are the messages of assessment.json and engineering/architect-report.md of the run, shortened. The run reads the guest OS from the configuration file; the OS reported by VMware Tools is left to a person to compare.

The migration in order

  1. Export all sheets and read the guest OS twice

    Include vSnapshot and vMemory in the RVTools export so snapshots and reservations are known. Compare the configuration-file OS with the one VMware Tools reports: the end-of-support check reads only the first.

  2. Decide the licence route per VM

    As of November 2026, the STACKIT operating system images page lists Windows Server 2025, 2022, 2019 and 2016 Standard images with the licence included, or you bring your own image and licences. Section Licence decisions lists what each route means.

  3. Choose machine types

    Start from the exported CPUs and memory, then keep to the families marked compatible with Windows Server on the machine type page.

  4. Prepare the guest

    Consolidate snapshots. STACKIT's own Windows example installs the VirtIO drivers NetKVM, Viostor and Vioscsi, installs Cloudbase-Init and runs Sysprep before conversion. That example starts from Hyper-V, so treat it as a model and test the same steps on a copy of your VMware guest.

  5. Convert and upload

    Convert the disk with qemu-img to qcow2 or raw, create the image through the CLI or API, upload the file and wait until the image state is AVAILABLE. The custom image page states a maximum image size of 70 GB; check your converted disk against it.

  6. Create volume, server and data volumes

    Apply the draft once networks, image ID and machine type are filled. The server starts from the image; data volumes follow.

  7. Join the domain and verify

    The STACKIT domain join command needs DNS servers that resolve your domain and a domain controller reachable on the local network. Check Device Manager for missing drivers.

  8. Cut over and retire

    Move traffic when the checks pass. Keep the source VM stopped but intact until the owner signs off. This is general practice, not a run output.

Licence decisions

  • Licence included

    With a STACKIT Windows Server Standard image the operating system licence is included, Client Access Licences are not required, and Remote Desktop subscriber licences are not provided or charged; you bring those.

  • Your own image and licences

    For a customer-provided image STACKIT provides no Windows licence and the customer is responsible for proper licensing. The guide names this route FVB and attaches conditions such as subscription licences or active Software Assurance; server licences without it are listed as not eligible.

  • Custom image and licensing agent

    The images page says Windows licences cannot be migrated and that a custom image needs contact with STACKIT to install the licensing agent, while the licensing guide says no scanning agent is installed on customer-provided images. Ask STACKIT which applies to you.

  • Versions STACKIT supports

    STACKIT provides only Windows Server versions that Microsoft still supports; the images page lists Microsoft's end-of-support date per version, so recheck it when you plan. A 2012 R2 guest therefore needs an upgrade or a custom image at your own risk.

  • SQL Server and other products

    The licensing guide treats server applications and SQL Server as allowed when properly licensed. Read its per-product list for your estate.

Questions Windows teams ask

Does StackToIT convert the Windows disk or install drivers?

No. It reads the export and writes the draft: servers, volumes, interfaces and the list of settings still open. Disk conversion, VirtIO drivers and the upload are steps for your team.

Can a Windows Server 2012 R2 VM move to STACKIT?

The run warns that STACKIT public images will not cover a guest past its vendor's end of support and that it can only be migrated as a custom image at your own risk, or upgraded first. Plan the upgrade where the application allows it.

Which file formats can STACKIT import?

The custom image page lists raw, qcow2 and iso. Other formats can be converted, for example with qemu-img convert, which that page shows for raw.

What stays open after the run for every Windows server?

Machine type, address handling, boot firmware, power state after cutover, source location and the guest OS as VMware Tools reports it are critical settings left for review. The report lists them per VM in engineering/architect-report.md.

Sources

Your next move: STACKIT.

Tell us about your estate. We show you what StackToIT delivers for it: target architecture, Terraform artifacts and a structured migration plan.