Blu-ray / DVD ROM Passthrough


Recommended Posts

Wanted to add my two cents to this. I just built a server a week ago and purchased unRaid. Blu-ray ripping was going to be a big part of it - running Plex, ripping the blu-rays to it and running storage...all inside the one box.

 

I initially tried the SATA to USB3 method (Anker brand), but didn't have much luck. No USB devices seemed to mount under i440fx, but they did if I swapped to Q35...however had a ton of performance loss as a result. The blu-ray drive also wouldn't mount at all on the internal USB3 header, but did when plugged into a USB2 (again, performance losses that were unacceptable).

 

I then tried the direct passthrough method suggested by jonp earlier in this thread and it worked like a charm. I'm a bit of a newbie with Linux and command lines, so I obtained the controller information from the Devices list inside unRaid. Also pasted the information into the XML as an all new virtual machine - as someone stated trying to edit a current VM seems to create issues, this proved to be correct.

 

Like saarg I am unable to use MakeMKV - settled for AnyDVD HD. Same symptoms - reads the disc but then never actually begins ripping. Thankfully didn't experience any lockups or crashes necessitating a reboot.

 

Have not yet tried eschultz's rawio command - will do so later and report back if results are positive. If anyone has any further suggestions I'd love to hear them.

 

Build notes:

unRaid 6.0.1

Windows 7 Enterprise N VM in KVM

SuperMicro X10SRL-F-O

LG Slim Blu-Ray Combo Drive - SATA CT40N

Link to comment

I would be surprised if this would work. I have that implemented including rawio but still doesn't work as posted earlier.

Don't want to buy anyDVD or DVDFab...

 

XML here:

<domain type='kvm'>
  <name>Windows7</name>
  <uuid>a8271969-c377-b630-e1e4-cf63b02c6264</uuid>
  <metadata>
    <vmtemplate name="Custom" icon="windows7.png" os="windows7"/>
  </metadata>
  <memory unit='KiB'>4194304</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
  <memoryBacking>
    <nosharepages/>
    <locked/>
  </memoryBacking>
  <vcpu placement='static'>2</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='6'/>
    <vcpupin vcpu='1' cpuset='7'/>
  </cputune>
  <os>
    <type arch='x86_64' machine='pc-q35-2.3'>hvm</type>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
    </hyperv>
  </features>
  <cpu mode='host-passthrough'>
    <topology sockets='1' cores='2' threads='1'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='hypervclock' present='yes'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none' io='native'/>
      <source file='/mnt/cache/.VMs/Windows7/vdisk1.img'/>
      <target dev='hdc' bus='virtio'/>
      <boot order='1'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x04' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/user/.VMs/ISOs/win7pro64.iso'/>
      <target dev='hda' bus='sata'/>
      <readonly/>
      <boot order='2'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/user/.VMs/ISOs/virtio-win-0.1-100.iso'/>
      <target dev='hdb' bus='sata'/>
      <readonly/>
      <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='0x02' slot='0x02' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x02' function='0x0' multifunction='on'/>
    </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='dmi-to-pci-bridge'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1e' function='0x0'/>
    </controller>
    <controller type='pci' index='2' model='pci-bridge'>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x0'/>
    </controller>
    <controller type='scsi' index='0' model='virtio-scsi'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x06' function='0x0'/>
    </controller>
    <interface type='bridge'>
      <mac address='00:16:3e:a1:bc:a5'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/Windows7.org.qemu.guest_agent.0'/>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' websocket='-1' listen='0.0.0.0' keymap='en-us'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <video>
      <model type='vmvga' vram='16384' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
    </video>
    <hostdev mode='subsystem' type='scsi' managed='no' rawio='yes'>
      <source>
        <adapter name='scsi_host2'/>
        <address bus='0' target='0' unit='0'/>
      </source>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x0d8c'/>
        <product id='0x013c'/>
      </source>
    </hostdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x05' function='0x0'/>
    </memballoon>
  </devices>
</domain>

Link to comment

saarg & dirtyofries,

 

Thanks for the info! I actually use AnyDVD HD so it's reassuring that it will work. I'm not quite sure when I'll make the upgrade as I need to continue getting up to speed on everything. In the mean time, thanks!

Link to comment
  • 4 months later...

I guess this is still an open issue  :(

 

I read the whole thread, experienced same things, MakeMKV not working, unraid (6.1.6) going completely unresponsive (no webGUI, no ssh).

I had to hard reset the server to get everything back on its feet :(

 

I'm using a SATA BD-ROM and I thought the BD-ROM was the easy part in all this virtualization journey ::)

At the moment I have no other PC in the house that can rip my discs, as I ditched my old HTPC.

Should I hold my breath for a solution or it's better I bring back the HTPC?

 

I've been able to play movies with AnyDVD-HD installed though.

Link to comment

I guess this is still an open issue  :(

 

I read the whole thread, experienced same things, MakeMKV not working, unraid (6.1.6) going completely unresponsive (no webGUI, no ssh).

I had to hard reset the server to get everything back on its feet :(

 

I'm using a SATA BD-ROM and I thought the BD-ROM was the easy part in all this virtualization journey ::)

At the moment I have no other PC in the house that can rip my discs, as I ditched my old HTPC.

Should I hold my breath for a solution or it's better I bring back the HTPC?

 

I've been able to play movies with AnyDVD-HD installed though.

Why don't you use my makemkv docker?

 

Link to comment
  • 3 months later...
  • 1 year later...

Just an FYI ... I followed the steps documented earlier in this thread (editing the XML file for the VM with the values returned by 'lsscsi' for the necessary drive) on 6.4.0 and it works fine on that release, in a Windows 10 Pro VM (10.0.16299, Build 16299). Unfortunately, I did not have a need to use my ASUS BC-12B1ST Blu-Ray drive until about half an hour before posting this, which was after I had upgraded to 6.4.0. So, I cannot answer for certain if this would have worked on a 6.3.x release.

 

However, VM performance was very choppy/laggy through VNC/TeamViewer until I managed to get the Red Hat VirtIO SCSI Controller driver installed ... and I'm talking really laggy/slow. Was almost painfully slow. Had to use keyboard to navigate through Windows because the mouse was just unusable for me, until after that driver was installed.

 

This was on a host with an EVGA SR-2 motherboard (BIOS A58). Drive is attached to one of the on-board SATA2 ports.

 

shot1.jpg

Edited by vmxnet4
Link to comment

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.