Unraid 6.9.2 GPU Passthrough

Recently my friend and I were toying with this because I wanted to be able to play some games and only had Mac’s at my house.

After a lot of googling and trial and error he gave me access to Unraid and I went to work on trying to find out what was going on – hopefully this blog will help others trying to achieve the same result.

Thanks very much to https://www.reddit.com/user/Kemaro for the original write up on this.

Getting the GPU Dump User Script

First of all – before getting started you need to install the User Scripts Plugin in Unraid. Once the User Script plugin has been installed then you will also need the GPU Dump script from here https://github.com/SpaceinvaderOne/Dump_GPU_vBIOS Make sure you add this as a user script and follow the instructions for dumping your cards VBIOS.

Establish Windows 10 VM

Now – you’ll also need a Windows 10 VM as well. Create it initially with just the VNC driver as the primary GPU, don’t pass through the second GPU yet.

Once loaded up, make sure that you install the VIRTIO drivers. Update windows.

Enable a program like teamviewer or RDP so you can access the VM without using Unraid’s browser VNC

Unraid Configuration Changes

Next – in Unraid go to Tools and then System devices. Make sure you tick all the devices that are your graphics card in the IOMMU group – then press “BIND SELECTED TO VFIO AT BOOT” Ours was done like this – as you can see its not simply just the graphics card its also the audio controller on the card and USB controllers.

Before you reboot unraid, go and click on the Flash drive under Main and add the following at the end of the second line in the Unraid OS Section

video=efifb:off

It should look like this

Go ahead now and reboot Unraid.

Configuring the VM Part 2

This is the key missing component from most guides I’ve seen. The next thing we need to do is pass through our GPU. We need to select the rom file as well and then also pass through the other devices related to the GPU as well.

In our example we had the following devices to passthrough:


As well as


Don’t start the VM yet, simply update the config.

Updating the VM Part 3

The last step we need to take is edit the VM one more time, however this time we want to click the toggle that says “Form View” so we can see the XML view of the machine.

In the original guide I read it said to find the hardware code, in our XML that didn’t exist however we were able to find out where the GPU is referenced as the hostdev section as it mentioned the GPU VBIOS ROM file we specified. In this line we need to look for the line that references the bus that is uses

In our case this was the lines:

<hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x0a' slot='0x00' function='0x0'/>
      </source>
      <alias name='hostdev0'/>
      <rom file='/mnt/user/isos/vbios/gpu1660 vbios.rom'/>
      <address type='pci' domain='0x0000' bus='0x0a' slot='0x06' function='0x0'/>
    </hostdev>

The line that says bus =’0x0a’ is what we are after. We need to edit the other devices after this in our XML config to also be on the same bus. So go through and change the lines for the other hostdev entries after the Video card entry to match the bus entry to be the same (i.e all the other devices should also say bus = ‘0x0a’ as opposed to whatever the VM has preconfigured.

Once you’ve done this – save the config.

Cross your fingers and start the VM

All going well, this should allow the VM to boot without error. Now though – you’ll need to access it via RDP or Teamviewer, whatever you decided on earlier and you can install the video card drivers.

Errors you might come across

If you have an existing VM image you’ve been trying this on – first you should go back to basics and just use the VNC driver, to then use DDU (https://www.guru3d.com/files-details/display-driver-uninstaller-download.html to completely remove the GPU driver if you had tried to install it earlier. If you don’t you’ll likely boot to a black screen even if everything else has been done correctly.

If you see an error like the one below:

can't reserve [mem 0xd0000000-0xdfffffff 64bit pref] unraid

Then refer above to appending video=efifb:off to your boot config.

If you fully break everything like we did multiple times – remember as long as you have physical access to Unraid you can change things like the boot config by looking at the config folder on another computer and then hopefully be able to boot back up.

If this thread was helpful for you please consider donating

Bitcoin: 14322nah4Jv6SRheoBN1KS8jemuPVhHc88
Ethereum: 0x7c6e97e80d66bfe74a70d763a0a5617890dc6463
Or via osko in Australia send to donnie@up.me

Bootcamp Windows 10 High Sierra AND Fusion Drive

I recently reformatted my iMac which involves also reinstalling the bootcamp partition and I had all sorts of issues but eventually had this work for me so thought I’d post it since it seems that there are no real set in stone methods for this to work and I hadn’t seen this one yet. 

My iMac is configured to have a Fusion drive, that is a 128GB SSD combined with a 4TB mechanical drive that appears in OSX as one volume. If you want to know how to create that style of drive google “Create Fusion Drive” (or look here https://www.lifewire.com/setting-up-fusion-drive-mac-2260165)

Anyway….

I was referring to the article here https://apple.stackexchange.com/questions/313007/high-sierra-and-bootcamp-with-windows-10-not-working  as it seemed to be the only one referencing the creation of a GPT partition rather than converting a whole drive to GPT

Below is what I ended up doing as it was not 100% following the above guide but worked 

In OSX High Sierra (Boot Camp Assistant)

I already had the Windows 10 installer created so I just resized the drive to the way I wanted for having both systems installed and then let the computer reboot itself.

In windows installer

When bootcamp assistant rebooted I just let the drive boot as normal – then:

When you get to the “Choose Language” screen press Shift + F10 together on your keyboard, this will spawn a command prompt window. The guide I posted above mentions having to remove the autoattend.xml to be able to access a command prompt which isn’t necessary. Shift+F10 has worked in installers since I believe Windows XP.

Once it is open type in “diskpart” and then press enter. This will put you into the disk partitioning tool built into the command line in windows. 

Next – type “list disk” this will show you all disks currently connected to the system. You need to select the one that your bootcamp partition should reside on. In my case it was disk 0 so the command was “select disk 0”

Now that I’d selected the disk I needed to confirm that the Bootcamp volume was indeed on this, to do this just type “list volume” and press enter – it will show all the volumes on the selected disk. You need to then use the bootcamp volume number to select the volume, in my case it was 0 so the command was “select volume 0”

The next part came from the other guide above – the initial step says to format the volume the command for that is:

format fs=ntfs label=BOOTCAMP quick

Once you press enter you’ll get a prompt saying that its formatting just wait until its done. Then it says to shrink the drive as well using this command:

shrink desired=600

After this it says to create another partition that has GPT, I attempted to do this and it failed and I thought it was due to drive size so I issued another shrink command (however I THINK that this command is actually not necessary now, the first one should be enough, if you try it let me know 😉 )

shrink desired=800

I attempted to do the next step again of creating a partition with GPT and it still failed…

Instead of issuing any more commands I just went back to the Windows Setup window and clicked the bootcamp drive then clicked on Next.

To my surprise the installation proceeded as normal, no complaints about GPT or MBR or EFI just a normal install 

Why Did this Work?

To be blatantly honest I’m not 100% sure but I’m guessing that its this:

BCA (bootcamp assistant) actually already has an EFI partition created and by default when creating the NTFS drive installs a hybrid MBR/GPT table at the same time. 

My guess is our first command formats whatever was left from BCA and then the second allows enough room for the Windows installer to add its own partitions to your bootcamp drive.

Normally if you click on a drive and press next you’ll get a warning saying that Windows needs to create additional partitions to be able to install. For me I did not get this warning so I can only assume that these were already created or the additional space from shrinking the partition allowed them to be created. 

Wont messing with the partitions stop OSX booting?

In this case it didn’t, as I was writing this windows was still installing and i thought I better check in case this is a waste of time.

It shouldn’t affect OSX because you don’t actually alter the EFI partition or the OSX partition that is already in place, you’re just formatting the bootcamp partition as NTFS and shrinking its size. 

What model mac did you do this on?

My iMac is running macOS High Sierra version 10.13.6 and the model identifier is iMac13,2

I used bootcamp assistant 6.1.0 as well.

For the windows ISO I used the latest available x64 Windows 10 image as of today 

Did it work for you?

Let me know in the comments below…

Why I own several Raspberry Pi’s

When the original Raspberry Pi was first released I jumped on board – the idea of having a tiny computer that cost less than $50 fascinated me.

My first Raspberry Pi I used to control media within my house, including automating downloading and distribution of TV content. It did this reasonably well but the limited RAM and CPU power definitely became noticeable.

So when the Raspberry Pi 2 was announced, again I was fascinated about now having the same form factor device but with more power! The price was still quite low so I ended up ordering a few more.

Armed with my Raspberry Pi 2 I set out to see what I may be able to use it for – this time I ended up turning it into a retro games emulator (More info on that here) – with the addition of a bluetooth USB module I purchased from Jaycar I was able to wirelessly connect in Playstation 3 controllers for a more authentic gaming experience. Thanks to Playhard Gaming I was able to purchase the genuine controllers that I needed for that project

It wasn’t too long after completing the retro games project that the Raspberry Pi 3 was announced. The big difference here with the Pi 3 was again more processing power and RAM but on top of that – built in Bluetooth and Wireless – it was no longer necessary to plug in USB devices just to get a wireless or bluetooth connection. So naturally – I ordered a couple of these to tinker with.

The first one I turned into a media centre using Kodi – the aim of this project was to make it easy enough to give to someone so they could just plug in and get started – and, then if they returned a media USB stick to me I could update just the USB stick and they could go plug it back in and easily get access. The Kodi Pi had a miniature keyboard, a USB drive (for holding a lot of media) and all the things required to connect to a TV. It worked perfectly fine, quite a good little media centre for <$200 (including all cables, adaptors etc)

The second Raspberry Pi 3 I used as a master computer in a Christmas Light Show that I completed last year. This allowed me to keep the overall power usage and the cost of the light show reasonably low. You can view the full show here

Since I’ve been able to use them for several different applications I’m always interested in what other people are doing with them or what else I can use them for. More recently I’ve used one to replace a DHCP Server in an office, which again allowed me to replace a large chunky power hungry server with a device thats total power supply is only 10W maximum.

If you’ve used a Raspberry Pi for something interesting be sure to comment or reach out to me to let me know what you’ve done.

I’m looking forward to seeing now as well what people will use the even more powerful but similar form factor ASUS Tinkerboards for – I’m yet to get one of these but I think they’d be incredibly for emulation purposes. Maybe I’ll retire the Pi 2 and upgrade it with one 😉