Impossible to start VM Windows 2008 standard edition SP2 with kubevirt

11 views
Skip to first unread message

farzin assadi

unread,
Sep 4, 2025, 10:51:20 AM (yesterday) Sep 4
to kubevirt-dev
Hello all,

I'm trying to instantiate an existing Windows 2008 Standard Edition SP2 VM running Hyper-V, whose disk image (.vhd) was converted via qemu-img to .qcow2 via Kubervirt. The VM boots, and after 4 seconds (we see the Microsoft Corporation log appearing in the console), a Windows blue screen appears, indicating that the boot process has stopped.

I was able to boot the Windows VM with the same .qcow2 file via the following qemu command:
qemu-system-x86_64 -enable-kvm -hda /datastore_local_pacsv_001/unixadmin/hyper-v/SR3F7702VM/Virtual-Hard-Disks/SR3F7702VM-SYS.qcow2 -m 4096 -smp 2 -boot c -vga std -serial mon:stdio -net nic,model=virtio -net user -vnc :0

Booting simply shows that the image converted via qemu-img is good and booting the VM itself does not pose any problems.

We're using Kubervirt version 1.5.2, which is deployed on a Talos Hypervisor 1.10.6, whose Kubernetes version is 1.33.2.

Has anyone had any experience with kubevirt booting a Windows 2008 VM under hyper-v whose disk system (as I mentioned was converted via qemu-img)?

The manifest corresponding to VirtualMachine is:

apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: win203es1513-win2k12r2
  labels:
  namespace: nemo
spec:
  runStrategy: Halted
  template:
    metadata:
      labels:
        kubevirt.io/vm: win203es1513-win2k12r2
    spec:
      terminationGracePeriodSeconds: 0
      domain:
        cpu:
          cores: 2
        resources:
          requests:
            memory: 4G
        features:
          acpi: {}
          apic: {}
          hyperv:
            relaxed: {}
            vapic: {}
            spinlocks:
              spinlocks: 8191
        clock:
          utc: {}
          timer:
            hpet:
              present: false
            pit:
              tickPolicy: delay
            rtc:
              tickPolicy: catchup
            hyperv: {}
        firmware:
          uuid: 44458dc6-1ab5-428b-b8aa-d9c3ac732e02
        devices:
          disks:
          - name: win203es1513-win2k12r2-sys-pvc
            disk:
              bus: sata
          interfaces:
          - model: e1000
            name: external
            bridge: {}
      networks:
      - multus:
          networkName: nemo/bridge-network
        name: external
      volumes:
      - name: win203es1513-win2k12r2-sys-pvc
        persistentVolumeClaim:
          claimName: win203es1513-win2k12r2-sys-pvc
#- containerDisk:
#image: kubevirt/virtio-container-disk
#name: virtio-drivers

  dataVolumeTemplates:
  - metadata:
      name: win203es1513-win2k12r2-sys-pvc
    spec:
      storage:
        resources:
          requests:
            storage: 64Gi
        accessModes:
          - ReadWriteOnce
        storageClassName: "local-path"
      source:
        http:
          url: "http://xxx.xxx.xxx.xxx/hyper-v/SR3F7702VM/Virtual-Hard-Disks/SR3F7702VM-SYS.qcow2"






The qemu command corresponding to the VM creation in the corresponding virt-launcher-xxxxx pod is:

/usr/libexec/qemu-kvm -name guest=nemo_win203es1513-win2k12r2,debug-threads=on
-S -object {"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/run/kubevirt-private/libvirt/qemu/lib/domain-1-nemo_win203es1513-wi/master-key.aes"}
-machine pc-q35-rhel9.6.0,usb=off,vmport=off,dump-guest-core=off,memory-backend=pc.ram,hpet=off,acpi=on -accel kvm -cpu Skylake-Server-IBRS,
vmx=on,pdcm=on,hypervisor=on,ss=on,tsc-adjust=on,mpx=on,clflushopt=on,umip=on,pku=on,md-clear=on,stibp=on,flush-l1d=on,arch-capabilities=on,
ssbd=on,xsaves=on,ibpb=on,ibrs=on,amd-stibp=on,amd-ssbd=on,rsba=on,skip-l1dfl-vmentry=on,pschange-mc-no=on,gds-no=on,rfds-no=on,
vmx-ins-outs=on,vmx-true-ctls=on,vmx-store-lma=on,vmx-activity-hlt=on,vmx-activity-wait-sipi=on,vmx-vmwrite-vmexit-fields=on,
vmx-apicv-xapic=on,vmx-ept=on,vmx-desc-exit=on,vmx-rdtscp-exit=on,vmx-apicv-x2apic=on,vmx-vpid=on,vmx-wbinvd-exit=on,
vmx-unrestricted-guest=on,vmx-apicv-register=on,vmx-apicv-vid=on,vmx-rdrand-exit=on,vmx-invpcid-exit=on,vmx-vmfunc=on,vmx-shadow-vmcs=on,
vmx-rdseed-exit=on,vmx-pml=on,vmx-xsaves=on,vmx-tsc-scaling=on,vmx-ept-execonly=on,vmx-page-walk-4=on,vmx-ept-2mb=on,vmx-ept-1gb=on,
vmx-invept=on,vmx-eptad=on,vmx-invept-single-context=on,vmx-invept-all-context=on,vmx-invvpid=on,vmx-invvpid-single-addr=on,vmx-invvpid-all-context=on,
vmx-invept-single-context-noglobals=on,vmx-intr-exit=on,vmx-nmi-exit=on,vmx-vnmi=on,vmx-preemption-timer=on,vmx-posted-intr=on,vmx-vintr-pending=on,
vmx-tsc-offset=on,vmx-hlt-exit=on,vmx-invlpg-exit=on,vmx-mwait-exit=on,vmx-rdpmc-exit=on,vmx-rdtsc-exit=on,vmx-cr3-load-noexit=on,
vmx-cr3-store-noexit=on,vmx-cr8-load-exit=on,vmx-cr8-store-exit=on,vmx-flexpriority=on,vmx-vnmi-pending=on,vmx-movdr-exit=on,vmx-io-exit=on,
vmx-io-bitmap=on,vmx-mtf=on,vmx-msr-bitmap=on,vmx-monitor-exit=on,vmx-pause-exit=on,vmx-secondary-ctls=on,vmx-exit-nosave-debugctl=on,
vmx-exit-load-perf-global-ctrl=on,vmx-exit-ack-intr=on,vmx-exit-save-pat=on,vmx-exit-load-pat=on,vmx-exit-save-efer=on,vmx-exit-load-efer=on,
vmx-exit-save-preemption-timer=on,vmx-exit-clear-bndcfgs=on,vmx-entry-noload-debugctl=on,vmx-entry-ia32e-mode=on,vmx-entry-load-perf-global-ctrl=on,
vmx-entry-load-pat=on,vmx-entry-load-efer=on,vmx-entry-load-bndcfgs=on,vmx-eptp-switching=on,hv-time=on,hv-relaxed=on,hv-vapic=on,hv-spinlocks=0x1fff
-m size=3906560k -object {"qom-type":"memory-backend-ram","id":"pc.ram","size":4000317440} -overcommit mem-lock=off -smp 2,sockets=1,dies=1,clusters=1,cores=2,threads=1
-uuid 44458dc6-1ab5-428b-b8aa-d9c3ac732e02 -smbios type=1,manufacturer=Talos Virtualization,product=talosvm,version=v0.1.0,
uuid=44458dc6-1ab5-428b-b8aa-d9c3ac732e02,sku=TalosCloud,family=ccio -no-user-config -nodefaults -chardev socket,id=charmonitor,fd=21,server=on,wait=off
-mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=delay -no-shutdown -boot strict=on
-device {"driver":"pcie-root-port","port":16,"chassis":1,"id":"pci.1","bus":"pcie.0","multifunction":true,"addr":"0x2"}
-device {"driver":"pcie-pci-bridge","id":"pci.2","bus":"pci.1","addr":"0x0"}
-device {"driver":"pcie-root-port","port":17,"chassis":3,"id":"pci.3","bus":"pcie.0","addr":"0x2.0x1"}
-device {"driver":"pcie-root-port","port":18,"chassis":4,"id":"pci.4","bus":"pcie.0","addr":"0x2.0x2"}
-device {"driver":"pcie-root-port","port":19,"chassis":5,"id":"pci.5","bus":"pcie.0","addr":"0x2.0x3"}
-device {"driver":"pcie-root-port","port":20,"chassis":6,"id":"pci.6","bus":"pcie.0","addr":"0x2.0x4"}
-device {"driver":"pcie-root-port","port":21,"chassis":7,"id":"pci.7","bus":"pcie.0","addr":"0x2.0x5"}
-device {"driver":"pcie-root-port","port":22,"chassis":8,"id":"pci.8","bus":"pcie.0","addr":"0x2.0x6"}
-device {"driver":"pcie-root-port","port":23,"chassis":9,"id":"pci.9","bus":"pcie.0","addr":"0x2.0x7"}
-device {"driver":"virtio-scsi-pci-non-transitional","id":"scsi0","bus":"pci.6","addr":"0x0"}
-device {"driver":"virtio-serial-pci-non-transitional","id":"virtio-serial0","bus":"pci.7","addr":"0x0"}
-blockdev {"driver":"file","filename":"/var/run/kubevirt-private/vmi-disks/win203es1513-win2k12r2-sys-pvc/disk.img","node-name":"libvirt-1-storage","read-only":false,"discard":"unmap","cache":{"direct":true,"no-flush":false}}
-device {"driver":"ide-hd","bus":"ide.0","drive":"libvirt-1-storage","id":"ua-win203es1513-win2k12r2-sys-pvc","bootindex":1,"write-cache":"on","werror":"stop","rerror":"stop"}
-netdev {"type":"tap","fd":"22","id":"hostua-external"}
-device {"driver":"e1000","netdev":"hostua-external","id":"ua-external","mac":"32:f4:f9:46:99:b4","bus":"pci.2","addr":"0x1","romfile":""}
-add-fd set=0,fd=20,opaque=serial0-log -chardev socket,id=charserial0,fd=18,server=on,wait=off,logfile=/dev/fdset/0,logappend=on
-device {"driver":"isa-serial","chardev":"charserial0","id":"serial0","index":0}
-chardev socket,id=charchannel0,fd=19,server=on,wait=off -device {"driver":"virtserialport","bus":"virtio-serial0.0","nr":1,"chardev":"charchannel0","id":"channel0","name":"org.qemu.guest_agent.0"}
-audiodev {"id":"audio1","driver":"none"} -vnc vnc=unix:/var/run/kubevirt-private/3b0c77d0-e783-49b1-8db4-20bf1470ba42/virt-vnc,audiodev=audio1
-device {"driver":"VGA","id":"video0","vgamem_mb":16,"bus":"pcie.0","addr":"0x1"} -global ICH9-LPC.noreboot=off -watchdog-action reset
-device {"driver":"virtio-balloon-pci-non-transitional","id":"balloon0","free-page-reporting":true,"bus":"pci.8","addr":"0x0"}
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny -msg timestamp=on


Thank you for your help.

Felix Matouschek

unread,
Sep 4, 2025, 11:18:14 AM (yesterday) Sep 4
to kubevirt-dev
Hi Farzin,

On Thursday, September 4, 2025 at 4:51:20 PM UTC+2 farzin assadi wrote:
Hello all,

I'm trying to instantiate an existing Windows 2008 Standard Edition SP2 VM running Hyper-V, whose disk image (.vhd) was converted via qemu-img to .qcow2 via Kubervirt. The VM boots, and after 4 seconds (we see the Microsoft Corporation log appearing in the console), a Windows blue screen appears, indicating that the boot process has stopped.

I was able to boot the Windows VM with the same .qcow2 file via the following qemu command:
qemu-system-x86_64 -enable-kvm -hda /datastore_local_pacsv_001/unixadmin/hyper-v/SR3F7702VM/Virtual-Hard-Disks/SR3F7702VM-SYS.qcow2 -m 4096 -smp 2 -boot c -vga std -serial mon:stdio -net nic,model=virtio -net user -vnc :0


The -hda option suggests to me that the installed OS is expecting the boot disk to be on an IDE bus.
Unfortunately, we don't support the IDE bus in KubeVirt.

Can you convert your guest to SATA or better virtio first?
Here your VM is using the SATA bus, which is most likely causing the issue.

Felix Matouschek

unread,
Sep 4, 2025, 11:54:05 AM (yesterday) Sep 4
to farzin Gazvini, kubevirt-dev

On Thu, Sep 4, 2025 at 5:46 PM farzin Gazvini <fgaz...@gmail.com> wrote:
Hi Felix,

Thank you for your reply.
I have already tried with all available options (virtio, sata, scsi) at kubevirt but the problem persists and remains the same. 

To me it looks like your existing Windows installation is expecting the boot disk to be on an IDE bus. You need to change it to SATA or virtio first before it can run on KubeVirt. 
 
I also tried other possible and imaginable options that might exist in KubeVirt. In fact, I used combinaison of the various common templates available at https://github.com/kubevirt/common-templates/tree/master/templates.

I can give you another variation of Virtual Machine that I used, but the result remains the same:

apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: win203es1513
  namespace: nemo
spec:
  runStrategy: Halted
  template:
    metadata:
      labels:
        kubevirt.io/vm: win203es1513
    spec:
      architecture: amd64
      domain:

        clock:
          utc: {}
          timer:
            hpet:
              present: false
            pit:
              tickPolicy: delay
            rtc:
              tickPolicy: catchup
            hyperv: {}
        cpu:
          cores: 1
        features:
          acpi: {}
          apic: {}
          smm: {}
          hyperv:
            relaxed: {}
            vapic: {}
            vpindex: {}
            spinlocks:
              spinlocks: 8191
            synic: {}
            synictimer:
              direct: {}
            tlbflush: {}
            frequencies: {}
            reenlightenment: {}
            ipi: {}
            runtime: {}
            reset: {}
        devices:
          autoattachGraphicsDevice: true
          disks:
          - bootOrder: 1
            disk:
              bus: virtio
            name: win203es1513-sys-pvc

          interfaces:
          - model: e1000
            name: external
            bridge: {}
          inputs:
            - type: tablet
              bus: usb
              name: tablet
        resources:
          requests:
            memory: 4G

      networks:
      - multus:
          networkName: nemo/bridge-network
        name: external
      volumes:
      - name: win203es1513-sys-pvc
        persistentVolumeClaim:
          claimName: win203es1513-sys-pvc

#- containerDisk:
#image: kubevirt/virtio-container-disk
#name: virtio-drivers

  dataVolumeTemplates:
  - metadata:
      name: win203es1513-sys-pvc

    spec:
      storage:
        resources:
          requests:
            storage: 64Gi
        accessModes:
          - ReadWriteOnce
        storageClassName: "local-path"
      source:
        http:
          url: "http://xxx.xxx.xxx.xxx/hyper-v/SR3F7702VM/Virtual-Hard-Disks/SR3F7702VM-SYS.qcow2"


How we can debug ? I mean if there is any parameter I can enable at VirtualMachine manifest to produce more information. Maybe this way I could have and provide more information to understand what is going on.

Thank you for your help.
Kind regards,
Farzin 
Reply all
Reply to author
Forward
0 new messages