I suspect the problem is not QEMU but whatever it is that you use to drive QEMU.
I’m successfully using QEMU (including kvm acceleration) on all MNT platforms.
From the error message I suspect that the problem might be that the OS you are installing doesn’t do the right thing for QEMU on ARM or, alternatively, that whatever you are using is not doing the right thing to start QEMU in a way that the OS in your VM expects.
If you can give me a raw QEMU command line that works or does not work I might be of help. I’m working with multiple tools in Debian that drive QEMU+kvm.
That error is the EDK2 UEFI boot manager telling you that it looked through the boot options and attached devices, but did not see anything with a bootable EFI loader.
A few things could be wrong:
Make sure the VM is actually ARM64, not x86_64 (easy mistake, ensure the VM Architecture is aarch64)
Is the Windows 11 ARM ISO directly bootable?
Check whether your ISO contains the ARM64 EFI loader
For #1, I think the GUI will tell you somewhere what the architecture is, but you can also check in the terminal:
mkdir /tmp/winiso
sudo mount -o loop WIN11-Arm64.iso /tmp/winiso
ls /tmp/winiso/EFI/BOOT/
You should see BOOTAA64.EFI.
Caveat: My Windoze knowledge hasn’t been well tested in a decade or so. I do run a x86_64 Windows VM for the odd task like recovering the emmc on a bricked A311D.
micha@mntremk:~/Downloads$ mkdir /tmp/winiso
mkdir: cannot create directory ‘/tmp/winiso’: Die Datei existiert bereits
micha@mntremk:~/Downloads$ sudo mount -o loop Win11_25H2_German_Arm64_v2.iso /tmp/winiso
[sudo] Passwort für micha:
mount: /tmp/winiso: /home/micha/Downloads/Win11_25H2_German_Arm64_v2.iso is already mounted.
micha@mntremk:~/Downloads$ ls /tmp/winiso/EFI/BOOT/
ls: Zugriff auf '/tmp/winiso/EFI/BOOT/' nicht möglich: Datei oder Verzeichnis nicht gefunden
micha@mntremk:~/Downloads$
Huh, normally I’d say you probably have a bad ISO but since you say this happens on Linux images as well, I’m less inclined to think that.
For the windows ISO there are a couple other tools for checking the contents…
sudo apt install xorriso # if not already installed
xorriso -indev ~/Downloads/Win11_25H2_German_Arm64_v2.iso -toc
Or…
7z l ~/Downloads/Win11_25H2_German_Arm64_v2.iso | less
If I were in your place I’d want to be sure I had a “known good setup” first. I’d download something commonly run in virtualization on Arm.
Debian 12 netinst (arm64) is small, minimal, very well-exercised on aarch64 KVM since Debian’s own builds are often arm64.
Canonical does a lot of Arm testing too. Look for ubuntu-24.04-live-server-arm64.iso. I often use this as a “does my VirtManager setup work” test on Arm.
If you can get that working in VirtManager then try debugging the issue with your Windows ISO. It’s still possible that image is bad.
Virtualization is a tricky thing to get right, especially with Windows. Viel Glück!
Thanks for the tip. I downloaded and installed Debian 13. It runs smoothly with the default settings. That’s nice, but it doesn’t make things any clearer.
Both the arm64 versions of Alpine and Windows 10 always display the message mentioned above. I’ve compared every setting in LibVirt, but I can’t find any differences.
Right, sorry, I meant Debian 13. And that’s great! It tells us that the hypervisor, KVM, libvirt, and AAVMF firmware (ARM Architecture Virtual Machine) are fundamentally working. That rules out a lot of potential issues.
I’d start by comparing two ISO images: Debian & Windows:
xorriso -indev debian-13.6.0-arm64-netinst.iso -report_el_torito
xorriso 1.5.8.pl02 : RockRidge filesystem manipulator, libburnia project.
xorriso : NOTE : Loading ISO image tree from LBA 0
xorriso : UPDATE : 1639 nodes read in 1 seconds
xorriso : NOTE : Detected El-Torito boot information which currently is set to be discarded
Drive current: -indev 'debian-13.6.0-arm64-netinst.iso'
Media current: stdio file, overwriteable
Media status : is written , is appendable
Boot record : El Torito , MBR cyl-align-all
Media summary: 1 session, 356864 data blocks, 697m data, 745g free
Volume id : 'Debian 13.6.0 arm64 n'
El Torito catalog : 1028 1
El Torito cat path : /boot.catalog
El Torito images : N Pltf B Emul Ld_seg Hdpt Ldsiz LBA
El Torito boot img : 1 UEFI y none 0x0000 0x00 7744 1029
El Torito img path : 1 /boot/grub/efi.img
xorriso -indev Win11_25H2_German_Arm64_v2.iso -report_el_torito
xorriso 1.5.8.pl02 : RockRidge filesystem manipulator, libburnia project.
xorriso : NOTE : Loading ISO image tree from LBA 0
xorriso : UPDATE : 1 nodes read in 1 seconds
libisofs: NOTE : Found hidden El-Torito image for EFI.
libisofs: NOTE : EFI image start and load size: 550 * 2048 , 3360 * 512
libisofs: NOTE : Roughly estimated EFI image size: 4294965248 bytes
xorriso : NOTE : Detected El-Torito boot information which currently is set to be discarded
Drive current: -indev 'Win11_25H2_German_Arm64_v2.iso'
Media current: stdio file, overwriteable
Media status : is written , is appendable
Boot record : El Torito
Media summary: 1 session, 3910832 data blocks, 7638m data, 745g free
Volume id : 'CCCOMA_A64FRE_DE-DE_DV9'
El Torito catalog : 22 1
El Torito images : N Pltf B Emul Ld_seg Hdpt Ldsiz LBA
El Torito boot img : 1 UEFI y none 0x0000 0x00 3360 550
El Torito img blks : 1 3910282
I’m not sure if I’m using the commands correctly. This is what I got:
xorriso \
-osirrox on \
-indev Win11_25H2_German_Arm64_v2.iso \
-extract_boot_images ./bootimages
xorriso 1.5.8.pl02 : RockRidge filesystem manipulator, libburnia project.
Copying of file objects from ISO image to disk filesystem is: Enabled
Drive current: -indev 'Win11_25H2_German_Arm64_v2.iso'
Media current: stdio file, overwriteable
Media status : is blank
Media summary: 0 sessions, 0 data blocks, 0 data, 745g free
micha@mntremk:~$ file bootimages/*
sudo mount -o loop bootimages/... /mnt
find /mnt
bootimages/*: cannot open `bootimages/*' (No such file or directory)
mount: /mnt: failed to set up loop device for bootimages/....
/mnt
micha@mntremk:~$ virsh dumpxml debian-vm > debian.xml
virsh dumpxml windows-vm > windows.xml
diff -u debian.xml windows.xml
error: Abruf der Domain 'debian-vm' scheiterte
error: Abruf der Domain 'windows-vm' scheiterte
You have indeed found some odd behavior here. Well done.
Since the file is the same as mine, but xoriso seems to think it is a blank piece of media, it stands to reason that something inside qemu is also making that mistake. But qemu doesn’t use the same libraries that xoriso does (for reading optical media), so I’d start with your settings:
virsh list --all
virsh dumpxml debian13 > windows.xml
virsh dumpxml win10 > debian.xml
Id Name Status
---------------------
error: Abruf der Domain 'debian13' scheiterte
error: Abruf der Domain 'win10' scheiterte
I’m assuming the VMs have to be turned on for that?!