How to get Windows 10 VM to boot on the screen that's attached to the Unraid server


wchusky

Recommended Posts

Hi,

 

Sorry in advanced if this has been asked many times prior.  I been searching for an answer but can't seem to find one. 

 

Basically, I am trying to get my Windows 10 VM to boot up on the screen that's attached the UNRAID Server.  I have a MSI RX 570 GPU on the server, and the monitor is hooked up to the RX 570 GPU.

 

When I boot up unRaid server, I can see the BIOS info booting up etc on the computer monitor.  Once its booted up, I want to get it to see Windows 10 login screen, which it is not doing right now.

 

I can log into the server GUI from a different machine on the same network no problem.

 

I got WIndows 10 machine Graphic Adaptor part set up to be the AMD RX 570 GPU.  Also, I assigned the local USB Keyboard and mouse to the Windows 10 VM that's attached to the server.

 

Here is the set up part:

image.thumb.png.66743189392c5821c5f47ea8b959c6b1.png

 

 

image.thumb.png.e13e02597c8f6f203ad9d0072f9d2f9c.png

 

 

So what am I doing wrong?  How do I get it to boot up on the monitor and use the keyboard/mouse that's attached to the server? 

 

Thanks in advance!

 

Link to comment

I did a dump of the GPU bios using user script.  I updated the GPU passthrough on the WIN 10 machine with the following:

 

image.png.67e4b85c8f61dfa08184060176305792.png

 

Still, I am getting a blank screen on my monitor?  I also enabled both USB keyboard and mouse that's attached to the server, but they don't seem to respond:

 

image.png.01bc3eba37136b5a1a3010dcd63ec9a8.png

 

Here is the log:

 

-display none \
-no-user-config \
-nodefaults \
-chardev socket,id=charmonitor,fd=31,server,nowait \
-mon chardev=charmonitor,id=monitor,mode=control \
-rtc base=localtime \
-no-hpet \
-no-shutdown \
-boot strict=on \
-device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x7.0x7 \
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x7 \
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x7.0x1 \
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x7.0x2 \
-device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x3 \
-blockdev '{"driver":"file","filename":"/mnt/user/domains/Windows 10 rliu GM/vdisk1.img","node-name":"libvirt-3-storage","cache":{"direct":false,"no-flush":false},"auto-read-only":true,"discard":"unmap"}' \
-blockdev '{"node-name":"libvirt-3-format","read-only":false,"cache":{"direct":false,"no-flush":false},"driver":"raw","file":"libvirt-3-storage"}' \
-device virtio-blk-pci,bus=pci.0,addr=0x4,drive=libvirt-3-format,id=virtio-disk2,bootindex=1,write-cache=on \
-blockdev '{"driver":"file","filename":"/mnt/user/isos/Windows10-64Bits.iso","node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"}' \
-blockdev '{"node-name":"libvirt-2-format","read-only":true,"driver":"raw","file":"libvirt-2-storage"}' \
-device ide-cd,bus=ide.0,unit=0,drive=libvirt-2-format,id=ide0-0-0,bootindex=2 \
-blockdev '{"driver":"file","filename":"/mnt/user/isos/virtio-win-0.1.190-1.iso","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
-blockdev '{"node-name":"libvirt-1-format","read-only":true,"driver":"raw","file":"libvirt-1-storage"}' \
-device ide-cd,bus=ide.0,unit=1,drive=libvirt-1-format,id=ide0-0-1 \
-netdev tap,fd=33,id=hostnet0 \
-device virtio-net,netdev=hostnet0,id=net0,mac=52:54:00:a1:b5:10,bus=pci.0,addr=0x2 \
-chardev pty,id=charserial0 \
-device isa-serial,chardev=charserial0,id=serial0 \
-chardev socket,id=charchannel0,fd=34,server,nowait \
-device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=org.qemu.guest_agent.0 \
-device usb-tablet,id=input0,bus=usb.0,port=1 \
-device vfio-pci,host=0000:03:00.0,id=hostdev0,bus=pci.0,addr=0x5,romfile=/mnt/user/isos/vbios/gpu-MSI-RX570.rom \
-device vfio-pci,host=0000:03:00.1,id=hostdev1,bus=pci.0,addr=0x6 \
-device vfio-pci,host=0000:00:1b.0,id=hostdev2,bus=pci.0,addr=0x8 \
-device usb-host,hostbus=2,hostaddr=3,id=hostdev3,bus=usb.0,port=2 \
-device usb-host,hostbus=2,hostaddr=4,id=hostdev4,bus=usb.0,port=3 \
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
-msg timestamp=on
2021-11-04 01:49:59.445+0000: Domain id=6 is tainted: high-privileges
2021-11-04 01:49:59.445+0000: Domain id=6 is tainted: host-cpu
char device redirected to /dev/pts/0 (label charserial0)

 

Thanks.

Edited by wchusky
Link to comment

I changed the WIN 10 GPU to VNC, and created a new VM using the Ubuntu template with the following settings:

 

image.thumb.png.096e74882b95b9dec802f037c4b42c5c.png

 

I am still getting a blank screen, but the keyboard I can change the light for CAP on/off.  Here is the log:

 

-nodefaults \
-chardev socket,id=charmonitor,fd=31,server,nowait \
-mon chardev=charmonitor,id=monitor,mode=control \
-rtc base=utc,driftfix=slew \
-global kvm-pit.lost_tick_policy=delay \
-no-hpet \
-no-shutdown \
-boot strict=on \
-device pcie-root-port,port=0x8,chassis=1,id=pci.1,bus=pcie.0,multifunction=on,addr=0x1 \
-device pcie-root-port,port=0x9,chassis=2,id=pci.2,bus=pcie.0,addr=0x1.0x1 \
-device pcie-root-port,port=0xa,chassis=3,id=pci.3,bus=pcie.0,addr=0x1.0x2 \
-device pcie-root-port,port=0xb,chassis=4,id=pci.4,bus=pcie.0,addr=0x1.0x3 \
-device pcie-root-port,port=0xc,chassis=5,id=pci.5,bus=pcie.0,addr=0x1.0x4 \
-device pcie-root-port,port=0xd,chassis=6,id=pci.6,bus=pcie.0,addr=0x1.0x5 \
-device pcie-root-port,port=0xe,chassis=7,id=pci.7,bus=pcie.0,addr=0x1.0x6 \
-device pcie-pci-bridge,id=pci.8,bus=pci.1,addr=0x0 \
-device ich9-usb-ehci1,id=usb,bus=pcie.0,addr=0x7.0x7 \
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pcie.0,multifunction=on,addr=0x7 \
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pcie.0,addr=0x7.0x1 \
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pcie.0,addr=0x7.0x2 \
-device virtio-serial-pci,id=virtio-serial0,bus=pci.2,addr=0x0 \
-blockdev '{"driver":"file","filename":"/mnt/user/domains/bbi-rliu-ubuntu-01/vdisk1.img","node-name":"libvirt-1-storage","cache":{"direct":false,"no-flush":false},"auto-read-only":true,"discard":"unmap"}' \
-blockdev '{"node-name":"libvirt-1-format","read-only":false,"cache":{"direct":false,"no-flush":false},"driver":"raw","file":"libvirt-1-storage"}' \
-device virtio-blk-pci,bus=pci.4,addr=0x0,drive=libvirt-1-format,id=virtio-disk2,bootindex=1,write-cache=on \
-netdev tap,fd=33,id=hostnet0 \
-device virtio-net,netdev=hostnet0,id=net0,mac=52:54:00:4f:94:c2,bus=pci.3,addr=0x0 \
-chardev pty,id=charserial0 \
-device isa-serial,chardev=charserial0,id=serial0 \
-chardev socket,id=charchannel0,fd=34,server,nowait \
-device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=org.qemu.guest_agent.0 \
-device usb-tablet,id=input0,bus=usb.0,port=1 \
-device vfio-pci,host=0000:03:00.0,id=hostdev0,bus=pci.5,addr=0x0,romfile=/mnt/user/isos/vbios/gpu-MSI-RX570.rom \
-device vfio-pci,host=0000:03:00.1,id=hostdev1,bus=pci.6,addr=0x0 \
-device usb-host,hostbus=2,hostaddr=3,id=hostdev2,bus=usb.0,port=2 \
-device usb-host,hostbus=2,hostaddr=4,id=hostdev3,bus=usb.0,port=3 \
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
-msg timestamp=on
2021-11-04 02:07:57.237+0000: Domain id=11 is tainted: high-privileges
2021-11-04 02:07:57.237+0000: Domain id=11 is tainted: host-cpu
char device redirected to /dev/pts/0 (label charserial0)

 

Really would appreciate any help since I am not sure why this is so complicated when it should be simple.

Link to comment

Hi there,

 

A few things to keep in mind.  First and foremost is that AMD GPUs are notoriously more difficult to pass through to VMs than NVIDIA, so keep that in the back of your mind.  The second thing worth noting is that the host OS needs a GPU and you'll need one for the guest.  If the motherboard has integrated graphics, you need to ensure those are enabled in the BIOS and set as the primary graphics there so that when Unraid boots, it utilizes that iGPU and then you can use your discrete GPU for the VM.  If you don't have an iGPU on that system, you can try some more advanced guides to passing through the GPU:

 

 

Link to comment

Thanks Jon.  Yeah I seen that video already.  My mother unfortunately don't have a built-in GPU.  I followed the instruction in the video above, but I am still unable to get the display.  My next step is I will install a second GPU to see if that will work.  I will report back if second GPU can get this working somehow.

Link to comment

I got 2 GPUs now on the system.  I have 1x NVIDIA GT1030 Rev A1 GPU and 1x MSI AMD RX 570 4 GB GPU installed on the system.  The system boots up to NVIDIA GPU fine, and I can see the UNRAID GUI login screen now.  I got a second monitor hooked up to the AMD RX570 HDMI port.   I tried to pass through using the WIN 10 VM, and I am getting nothing.  I also tried to passthrough using the Ubuntu VM I just created, and I am also getting a blank screen.  Why didn't it work?

 

Any recommendation on what GPU would make this process easier?  What else have people tried that's popular and working?

 

Attached is the diagnostic file.  Any advice would be appreciated.

 

inno-unraid-01-diagnostics-20211104-1605.zip

Edited by wchusky
Link to comment
9 hours ago, wchusky said:

What else have people tried that's popular and working?

1. If you passthrough the amd gpu I would suggest to switch from i440fx to q35, maintaining ovmf as bios.

2. Manually put the gpu audio part in the same bus/slot as the video part, but different function

(multifunction device).

The following is just an example:

From:

    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x82' slot='0x00' function='0x0'/>
      </source>
      <rom file='/mnt/user/isos/vbios/gpu-MSI-RX570.rom'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x82' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </hostdev>

 

To:

    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x82' slot='0x00' function='0x0'/>
      </source>
      <rom file='/mnt/user/isos/vbios/gpu-MSI-RX570.rom'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x82' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </hostdev>

 

3. In the system devices in unraid put a check for vfio for the gpu (iommu group 69), both 82:00.0 and 82:00.1

4. Reboot and try

Link to comment
7 hours ago, ghost82 said:

1. If you passthrough the amd gpu I would suggest to switch from i440fx to q35, maintaining ovmf as bios.

2. Manually put the gpu audio part in the same bus/slot as the video part, but different function

(multifunction device).

The following is just an example:

From:

    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x82' slot='0x00' function='0x0'/>
      </source>
      <rom file='/mnt/user/isos/vbios/gpu-MSI-RX570.rom'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x82' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </hostdev>

 

To:

    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x82' slot='0x00' function='0x0'/>
      </source>
      <rom file='/mnt/user/isos/vbios/gpu-MSI-RX570.rom'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x82' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </hostdev>

 

3. In the system devices in unraid put a check for vfio for the gpu (iommu group 69), both 82:00.0 and 82:00.1

4. Reboot and try

 

Thanks for the help.  Sorry for my ignorance, but do you modify this under SETTING for each VM?  Right now I got another issue is that I can't open the VMs page to edit VMs.  I am not sure what caused this, but as of right now I can't even get to my VM page.  It is running Parity Check now, so I guess I will wait until it is over?  Is there a quicker way to get the VM page back?  I am getting a blank page now when going to the VM page.

image.thumb.png.eb82beefd984bc3c026f92c1a59fa247.png

 

For number 1 above about switching to q35, does that mean I need to boot my system under UEFI vs. legacy bios?  I read here that Windows VM does not work in q35?  

 

I have applied number 3 above per your suggestion.  Hopefully this will bring back the VM page.

 

Will update with progress.  Thanks again!

Link to comment
43 minutes ago, wchusky said:

It is running Parity Check now, so I guess I will wait until it is over?

I don't use parity, but I think so..if it doesn't come up again after the check reboot the server.

 

43 minutes ago, wchusky said:

For number 1 above about switching to q35, does that mean I need to boot my system under UEFI vs. legacy bios?

You are already running your windows 10 vm with uefi (ovmf)!!!!!This is your current xml:

  <os>
    <type arch='x86_64' machine='pc-i440fx-5.1'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/qemu/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
    <nvram>/etc/libvirt/qemu/nvram/5f4b97e6-d87e-88ca-d98e-bab82428566e_VARS-pure-efi.fd</nvram>
  </os>

 

43 minutes ago, wchusky said:

I read here that Windows VM does not work in q35?

You read it wrong :)

It works.

 

If you want to switch to q35 you can do it from the gui; as far as multifunction device you need to switch to advance view (top right) in the vm settings (gui) and the full xml will show.

 

Edited by ghost82
Link to comment

I switched WIN 10 to q35 5.1, and did all the above.  I also switched bios on the motherboard to UEFI.  It booted up, but still can't do passthrough on the screen that's attached to AMD RX 570.  I know the screen works since when I boot up, boot up screen shows up on both monitors (one to Nvidia 1030 and other to AMD RX570).

 

Attached is the diagnostic file.  At this pointinno-unraid-01-diagnostics-20211105-1614.zip, I wonder if I should just reinstall and start over?

Link to comment
9 hours ago, wchusky said:

but still can't do passthrough on the screen that's attached to AMD RX 570.

You didn't apply multifunction:

from this:

    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x82' slot='0x00' function='0x0'/>
      </source>
      <rom file='/mnt/user/isos/vbios/gpu-MSI-RX570.rom'/>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x82' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
    </hostdev>

To this:

    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x82' slot='0x00' function='0x0'/>
      </source>
      <rom file='/mnt/user/isos/vbios/gpu-MSI-RX570.rom'/>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0' multifunction='on'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x82' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x1'/>
    </hostdev>

 

Make sure gpu-MSI-RX570.rom is dumped from your gpu.

 

No errors in the logs, everything seems fine, if it still doesn't work, I suspect an issue with the mb bios, check if there are updates: note that if you update the bios all the bios settings will be resetted.

Link to comment
6 hours ago, ghost82 said:

You didn't apply multifunction:

from this:

    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x82' slot='0x00' function='0x0'/>
      </source>
      <rom file='/mnt/user/isos/vbios/gpu-MSI-RX570.rom'/>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x82' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
    </hostdev>

To this:

    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x82' slot='0x00' function='0x0'/>
      </source>
      <rom file='/mnt/user/isos/vbios/gpu-MSI-RX570.rom'/>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0' multifunction='on'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x82' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x1'/>
    </hostdev>

 

Make sure gpu-MSI-RX570.rom is dumped from your gpu.

 

No errors in the logs, everything seems fine, if it still doesn't work, I suspect an issue with the mb bios, check if there are updates: note that if you update the bios all the bios settings will be resetted.

Silly question: but how do you add multifunctional settings into this? How do I edit this in settings? 

 

And yes, gpu-MSI-RX570.rom was dumped from the GPU using the space invader user script method.  The VM is hanging now when I try to dump vbios for Nvidia GT 1030 though.  Need to go back and figure out why I can't dump GT 1030 vbios still. 

Edited by wchusky
Link to comment
  • 2 weeks later...

Update on this:

 

I could not get RX 570 to work, so I swapped out the GPU with a really old Radeon HD 6850 GPU with 1 GB of RAM.  So, I got 2 GPUs in the system now:

 

1.  NVIDIA GT 1030 GPU with 2 GB 

2.  Radeon HD 6850 GPU with 1 GB

 

I did the Spaceinvader GPU bios dump to dump both vBIOS.  The script did complain the fie is too small, but it accepted it.  It is possible because these are just older GPUs with limited capabilities.

 

For some wild reason, I was able to pass through my WIN10 VM on HD 6850, so that's a huge accomplishment.    For whatever reason, the system decided NVIDIA GT 1030 is the primary GPU for the system and UNRAID boots off that GPU.  So, I decided to use the HD 6850 for passthrough even though I wanted to use the NVIDIA since it has 2 GB vs 1 GB on HD 6850.  Is there a way to force the system to use certain GPU as the primary GPU?  I looked around the SuperMicro X9DAI bios, but didn't find any settings.  Is it due to which slot the GPU in inserted into the motherboard?

 

So I was playing around the Windows 10 etc.  I did a Windows update, and rebooted.  I did try to install the Radeon GPU software from AMD, which could be the culprit of the reason for what's next to come.  I then tried to reboot the VM since Windows 10 always ask you to reboot after updates, and it did not come back.  My precious passthrough is dead again.

 

I did all the multifunction etc like above, and nothing worked.  So I am back to square one.  I even tried to create new UBUNTU VM and new WIN 10 VM, and none will do pass through.  I also re-downloaded the vBIOS, and it is still not working.

 

At this point, I am seriously thinking about just letting the server be a headless server.  I really want to get this passthrough working, so it is frustrating that it just won't work.

 

Attached is the latest Diagnostic file.  Really hope someone can give me some advice on how to get this working.  It would be huge for this system.

inno-unraid-01-diagnostics-20211118-0845.zip

Link to comment
  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.