IRQL_NOT_LESS_OR_EQUAL au démarrage .iso | Problèmes de virtualisation Windows 10

3

Mon matériel de jeu prenant en charge IOMMU, j'ai décidé de migrer la machine vers Linux.

La mise en place:

  • AMD FX-8350
  • 8 Go 1600
  • Asus Sabertooth 990FX R1.0
  • ATI HD 5450 (pour système de base)
  • nvidia GTX970 (pour VM)

J'ai installé un Linux vide et propre, configuré IOMMU et réparé ma table IVRS. Ensuite, j'ai lié mon nVidia GTX 970 au vfio-pci module de noyau. Puis je me suis installé libvirtd démon avec ses dépendances, où je devais ajouter virtlogd et dbus démon à la main. Ensuite, j'ai installé virt-manager et mis en place une nouvelle machine virtuelle sur la base des recommandations des réponses.

Mise à jour (surmonter le BSOD)

Après avoir essayé les images OVMF pré-construites avec les mêmes résultats, j'ai commencé à changer TOUTES les options. tu sais juste au cas où.

Une des premières choses que j'ai essayée a été de passer de host-passthrough / Copy host CPU configuration en CPU à Hypervisor Default. Maintenant, le programme d'installation démarre sans aucun problème. Donc, l'erreur IRQL est causée par le pasprocessus!

Problème: j'aurai un impact sur les performances si j'émule un processeur au lieu de le céder. Donc, le but sera d'obtenir host-passthrough / Copy host CPU configuration travailler...

Le problème original:

Lorsque j'essaie de démarrer à partir d'un Win10.iso actuel et testé, il me donne le BSOD avec IRQL_NOT_LESS_OR_EQUAL.

Alors, comment puis-je réparer le BSOD?

Je vois que l'erreur est liée à l'allocation de mémoire, mais je ne sais pas quoi changer pour que cela fonctionne.

J'avais déjà la machine virtuelle en marche (il est donc possible de contourner cette erreur), à l'exception de l'erreur 43 de nVidia, mais j'ai alors réalisé que mon système de base était corrompu. J'ai donc décidé de procéder à une réinstallation propre. fonctionnait parfaitement jusqu'au premier démarrage de la VM.

Heres le XML actuel. Il manque les pilotes vfio-drivers.iso et Bootdrive, car le problème est que le Win10.iso ne démarre pas.

<domain type='kvm'>
  <name>win10</name>
  <uuid>6f957f60-c90c-4d33-8821-01348fa531a9</uuid>
  <memory unit='KiB'>6291456</memory>
  <currentMemory unit='KiB'>6291456</currentMemory>
  <vcpu placement='static'>8</vcpu>
  <os>
    <type arch='x86_64' machine='pc-q35-2.12'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
    <nvram>/var/lib/libvirt/qemu/nvram/win10_VARS.fd</nvram>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
    </hyperv>
    <vmport state='off'/>
  </features>
  <cpu mode='host-passthrough' check='none'/>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
    <timer name='hypervclock' present='yes'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/home/pitch/Downloads/Win10_1803_EnglishInternational_x64.iso'/>
      <target dev='sdb' bus='sata'/>
      <readonly/>
      <boot order='1'/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x2'/>
    </controller>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pcie-root'/>
    <controller type='pci' index='1' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='1' port='0x10'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
    </controller>
    <controller type='pci' index='2' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='2' port='0x11'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
    </controller>
    <controller type='pci' index='3' model='pcie-to-pci-bridge'>
      <model name='pcie-pci-bridge'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </controller>
    <controller type='pci' index='4' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='4' port='0x12'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
    </controller>
    <controller type='pci' index='5' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='5' port='0x13'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
    </controller>
    <controller type='pci' index='6' model='pcie-root-port'>
      <model name='pcie-root-port'/>
      <target chassis='6' port='0x14'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:00:36:19:70'/>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
    </interface>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <sound model='ich6'>
      <address type='pci' domain='0x0000' bus='0x03' slot='0x01' function='0x0'/>
    </sound>
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x046d'/>
        <product id='0xc069'/>
      </source>
      <address type='usb' bus='0' port='1'/>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x046d'/>
        <product id='0xc316'/>
      </source>
      <address type='usb' bus='0' port='2'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/>
    </hostdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
    </memballoon>
  </devices>
</domain>

VIEUX XML

C'était mon XML libvirt original:

<domain type='kvm'>
  <name>win10</name>
  <uuid>502f32c7-01fc-4690-98b7-85c1c82e392b</uuid>
  <memory unit='KiB'>4194304</memory>
  <currentMemory unit='KiB'>4194304</currentMemory>
  <vcpu placement='static'>4</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-2.12'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
    <nvram>/var/lib/libvirt/qemu/nvram/win10_VARS.fd</nvram>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
    </hyperv>
    <vmport state='off'/>
  </features>
  <cpu mode='host-passthrough' check='none'/>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
    <timer name='hypervclock' present='yes'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/win10.qcow2'/>
      <target dev='sdb' bus='sata'/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/home/pitch/Downloads/Win10_1803_EnglishInternational_x64.iso'/>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='floppy'>
      <driver name='qemu' type='raw'/>
      <source file='/home/pitch/Downloads/virtio-win-0.1.149.iso'/>
      <target dev='fda' bus='fdc'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='fdc' index='0'/>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </controller>
    <controller type='scsi' index='0' model='virtio-scsi'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </controller>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:00:04:2a:7a'/>
      <source network='default'/>
      <model type='rtl8139'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='spice' autoport='yes'>
      <listen type='address'/>
      <image compression='off'/>
    </graphics>
    <sound model='ich6'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='2'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='3'/>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </memballoon>
  </devices>
</domain>

Juste pour tester, j'ai essayé de dépouiller la configuration de la machine virtuelle. Voici le vidage XML:

<domain type='kvm'>
  <name>win10</name>
  <uuid>502f32c7-01fc-4690-98b7-85c1c82e392b</uuid>
  <memory unit='KiB'>6291456</memory>
  <currentMemory unit='KiB'>5242880</currentMemory>
  <vcpu placement='static'>8</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-2.12'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
    <nvram>/var/lib/libvirt/qemu/nvram/win10_VARS.fd</nvram>
    <bootmenu enable='no'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
    </hyperv>
    <vmport state='off'/>
  </features>
  <cpu mode='host-passthrough' check='partial'/>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
    <timer name='hypervclock' present='yes'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/home/pitch/Downloads/Win10_1803_EnglishInternational_x64.iso'/>
      <target dev='sda' bus='scsi'/>
      <readonly/>
      <boot order='1'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='scsi' index='0' model='virtio-scsi'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </controller>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x046d'/>
        <product id='0xc069'/>
      </source>
      <address type='usb' bus='0' port='1'/>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x046d'/>
        <product id='0xc316'/>
      </source>
      <address type='usb' bus='0' port='2'/>
    </hostdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </memballoon>
  </devices>
</domain>
pitchzer0
la source
IRQF_LESS_OR_EQUAL est une façon obscure de Windows de dire qu'elle frappe un déréférencement de pointeur nul. C'est presque toujours un problème de pilote, ce qui signifie à son tour soit un matériel défectueux, soit des pilotes mal écrits (ou le matériel a été modifié d'une manière inattendue par Windows).
Austin Hemmelgarn
Il n'est pas nécessaire que ce soit un "pointeur nul". Il peut s'agir d'une référence à la mémoire paginable à partir d'IRQL 2 ou supérieur. De tels bogues peuvent rester cachés longtemps sans que la mémoire en question ne soit paginée un jour. (par exemple, une personne a alloué un pool paginé au lieu de non paginé.) Mais oui, c’est presque toujours un problème de pilote. Si l'OP peut publier son fichier minidump sur un site public de partage de fichiers, nous pourrons peut-être déterminer quel pilote est le coupable.
Jamie Hanrahan

Réponses:

4

Réponse mise à jour

On dirait que vous avez pu réinstaller Windows, mais le premier écran de démarrage bleu. Cette réponse mise à jour répond à cela.

Windows est fragile lorsqu'il s'agit de modifications matérielles, virtualisées ou non.

Si vous avez modifié quelque chose dans votre domaine XML libvirt après l’installation, le IRQL_NOT_LESS_OR_EQUAL écran bleu de la mort pourrait facilement arriver.

Il est particulièrement difficile de comprendre la cause de l'écran bleu si vous ne vous souvenez pas de ce que vous avez modifié. Par exemple, si j’installais Windows sur le scsi ( virtio-scsi ) bus de disque, puis changé le bus de disque en virtio ( virtio-blk ), Je vais aller aussi loin avant que l'invité se bloque sans détails:

UEFI TianoCore Windows boot

Le moyen le plus simple de résoudre ce problème consiste à configurer le fichier XML du domaine libvirt à votre guise, puis à réinstaller Windows pour ce matériel.

Un moyen plus difficile serait de démarrer l’ISO d’installation de Windows, d’ajouter des pilotes virtio-win avec DISMet espère que l’un d’eux corrigera le BSOD. Vous devrez adapter les instructions de cette réponse super utilisateur . C'est un processus agaçant sans aucune garantie de succès.

(Et dans le cas de changer le bus du disque d’amorçage après l’installation, cela ne semble pas possible pour Windows 10, comme je l'ai découvert .)

Donc, épargnez-vous les maux de tête du dépannage et réinstallez Windows une fois de plus.

Voici comment j'ai personnalisé mon domaine XML libvirt pour Windows:

  • Le disque de démarrage installé utilise scsi comme son bus de disque avec discard='unmap' dans le <driver> pour le support TRIM.
  • Le programme d’installation / lecteur ISO utilise le sata bus pour que l’installateur Windows puisse démarrer.
  • le virtio-win pilotes lecteur ISO utilise également sata afin que l'installateur Windows puisse le lire.
  • j'utilise q35 comme le machine attribut du <type> sous <os> au lieu de pc ( i440fx ) pour meilleur support de la passerelle PCIe car i440FX ne supporte que le PCI. Notez que q35 nécessite un autre ensemble de <controller> éléments. Vous pouvez définir ceci dans virt-manager si vous supprimez (indéfinissez) votre invité actuel, créez-en un nouveau, cochez la case "Personnaliser la configuration avant l'installation", puis modifiez le chipset de i440FX à Q35.
  • Le modèle d'adaptateur réseau est virtio pour de meilleures performances.
  • Le modèle vidéo est QXL pour un affichage plus performant.

Dans le programme d'installation Windows, installez tous les pilotes compatibles à partir de l'ISO virtio-win avant de terminer l'étape de partitionnement du disque:

Windows installer: Select the driver to install

Espérons qu'après la réinstallation, vous ne devriez plus avoir l'écran bleu de la mort.


Ancienne réponse

Cette réponse partait du principe que vous essayiez de réinstaller Windows.

Selon le fichier XML libvirt que vous avez fourni, vous ne démarrez pas à partir du fichier ISO ( cdrom ). Vous semblez démarrer directement à partir de votre image de machine virtuelle, qui contient probablement Windows installé sur un matériel différent et est donc incompatible avec le matériel virtualisé.

Vous pouvez démarrer à partir de cdrom en ajoutant

    <boot dev='cdrom'/>

juste au dessus

    <boot dev='hd'/>

puis en démarrant la machine virtuelle normalement. Notez que le disque de démarrage Windows peut vous donner une invite limitée dans le temps à appuyer sur n’importe quelle touche pour lancer le programme d’installation.


Vous pouvez également activer le démarrage à partir de cdrom par virt-manager comme suit:

Boot Options in virt-manager

Deltik
la source
Oui, je viens de le choisir dans le menu de démarrage d'OVMF, mais je vais l'essayer de toute façon.
pitchzer0
pas de progrès, il ne démarre pas du tout de cette façon, il suffit de demander au clavier de démarrer à partir du CD puis du logo de tianocore, à répéter après un moment, il me laisse tomber dans la coquille EFI
pitchzer0
@ pitchzer0: Je peux reproduire cela sur virt-manager. L'astuce consiste à effectuer une "réinitialisation forcée", à cliquer rapidement au milieu de l'écran noir, puis à saisir les touches de spam du clavier.
Deltik
réaliser quoi exactement? J'essaie maintenant différents paramètres de bus de stockage et j'ai même supprimé le "disque dur" de la liste des périphériques pour l'exclure comme un fauteur de troubles.
pitchzer0
1
@ pitchzer0: Je comprends maintenant que vous dépannez un BSOD au premier démarrage. J'ai mis à jour ma réponse pour refléter cela.
Deltik