Skip to content

Windows VM imported from VMware fails first boot on virtio/scsi disk bus; SATA first boot then switch works #4023

@dcieops

Description

@dcieops

What happened:
After migrating a Windows VM from VMware into KubeVirt using CDI/v2v (DataVolumeTemplates), the VM only boots successfully on the first boot when the boot disk bus is sata.

If the VM is created to boot with virtio or scsi (virtio-scsi controller) on the first boot, it fails to boot.
However, once the VM has booted successfully at least once using SATA, we can patch the VM disk bus to virtio or scsi and reboot, and then it boots successfully with those buses.

In other words: virtio/scsi work only after an initial SATA boot, even though the Windows guest had virtio drivers installed pre-migration in VMware.

What you expected to happen:
The migrated Windows VM should be able to boot on the first boot with the boot disk bus set to virtio or scsi (virtio-scsi), especially if virtio drivers were installed in the guest prior to migration. SATA should not be required as a “first boot staging” workaround.

How to reproduce it (as minimally and precisely as possible):

  1. Take an existing Windows VM in VMware vCenter and ensure it is powered off. (Virtio drivers are installed in-guest pre-migration.)
  2. Migrate/import the VM into KubeVirt using CDI/v2v (VMware → DataVolumeTemplates workflow).
  3. Create a KubeVirt VirtualMachine that references the imported DataVolumes.
  4. Set the boot disk bus to virtio (or scsi) before the first boot. Example JSON patch used in our automation:
  5. (Similarly reproduced with "value": "scsi" with a virtio-scsi controller.)
    [ { "op": "replace", "path": "/spec/template/spec/domain/devices/disks/0/disk/bus", "value": "virtio" } ]
  6. Start the VM → first boot fails.
  7. Recreate/patch the VM to boot with SATA ("value": "sata") and start → first boot succeeds.
  8. After the VM has booted successfully once on SATA, patch the disk bus to virtio or scsi and restart → boots successfully.

Additional context:

This looks like Windows may not consider the virtio/scsi storage driver “boot critical” until after a successful first boot / driver initialization phase. Guidance requested on whether this is expected and whether CDI/v2v should recommend or automate “first boot on SATA, then switch bus”.

Environment:

CDI version: v1.64.0 (cdi-controller image quay.io/kubevirt/cdi-controller:v1.64.0)

KubeVirt version: v1.6.2

Kubernetes version: v1.33.5 (cluster); kubectl client v1.27.4

Migration method: VMware vCenter → CDI/v2v import using DataVolumeTemplates

Hardware: Bare metal Kubernetes cluster

virtio driver: virtio-win-0.1.285

OS: Windows Server 2019/2016

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions