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>
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).Réponses:
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 envirtio
(virtio-blk
), Je vais aller aussi loin avant que l'invité se bloque sans détails: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
DISM
et 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:
scsi
comme son bus de disque avecdiscard='unmap'
dans le<driver>
pour le support TRIM.sata
bus pour que l’installateur Windows puisse démarrer.sata
afin que l'installateur Windows puisse le lire.q35
comme lemachine
attribut du<type>
sous<os>
au lieu depc
(i440fx
) pour meilleur support de la passerelle PCIe car i440FX ne supporte que le PCI. Notez queq35
nécessite un autre ensemble de<controller>
éléments. Vous pouvez définir ceci dansvirt-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 dei440FX
àQ35
.virtio
pour de meilleures performances.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:
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 ajoutantjuste au dessus
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:la source