Piping Hardware Through Software: The DVD Passthrough Project

Piping Hardware Through Software: The DVD Passthrough Project

I love physical media. I have a shelf full of DVDs that prove it. But in an era where I can stream 4K content to my phone while standing in the yard, getting up to swap a disc feels archaic.

Recently, I decided to digitize the entire collection. My goal was simple: get the movies off the plastic discs and onto my Jellyfin server so the family can watch them anywhere.

The problem? My “server” is a virtualized environment running on Proxmox. The DVD drive is real hardware; the file server doing the ripping is a Linux VM. In the world of hypervisors, getting the two to talk isn’t always a handshake; sometimes it requires a little plumbing.

Here is how I piped a physical optical drive through the virtualization layer to build a headless ripping station.


The Architecture

As a network engineer, I don’t like “all-in-one” messy boxes. I like separation of duties. Here is the layout I’m working with:

  • The Hypervisor: Proxmox VE running on bare metal.
  • The Storage: A Linux VM acting as a Samba file server (NAS).
  • The Application: A separate Debian container running Jellyfin.
  • The Hardware: A standard SATA DVD/RW drive physically connected to the Proxmox server.

The goal was to pass the SATA drive through to the Linux file server VM so I could run MakeMKV directly on the storage backend, rather than ripping movies on my desktop and transferring huge files across the LAN.

Step 1: The Physical Layer (Finding the Drive)

First, I had to ensure the Proxmox host actually saw the drive. It seems obvious, but never assume physical connectivity.

I dropped into the shell on the Proxmox node and ran:

lsblk

Sure enough, sr0 showed up as a read-only optical device. The plumbing was there, it just wasn’t connected to the faucet yet.

Step 2: The Passthrough (Punching the Hole)

This is where people get hung up. In Proxmox, you have a few ways to handle drives. You can mount an ISO (virtual), or you can pass through the hardware.

I didn’t want emulation; I wanted raw access so MakeMKV could read the disc structure correctly.

  1. I shut down the Linux file server VM.
  2. In the Proxmox GUI, I selected the VM > Hardware > Add > CD/DVD Drive.
  3. Crucially, I selected “Use physical CD/DVD Drive” rather than “Use CD/DVD disc image file (ISO).”
Note: If you are doing this with specialized hardware, you might need to mess with IOMMU groups. However, for a standard SATA optical drive, Proxmox creates a block device mapping that works surprisingly well out of the box.

Step 3: The Software (Headless Ripping)

Once the VM booted back up, I verified the drive was visible inside the Linux guest using dmesg | grep -i dvd.

For the ripping software, I stuck with the gold standard: MakeMKV. Since this is a server without a monitor (headless), I couldn’t use the GUI. I installed the command-line tools (makemkvcon).

The workflow is now incredibly streamlined:

  1. Pop a disc into the server.
  2. SSH into the file server.
  3. Run a command to identify the title tracks.
  4. Rip the stream directly to the /samba/movies/ directory.
makemkvcon mkv disc:0 all /path/to/media/share

The End Result

Jellyfin (running in its own container) has a bind mount to that same media share. The moment the rip finishes, I scan the library, and the movie appears with metadata and artwork, ready to stream.

This project was a classic example of “Internet Plumbing.” We took a legacy input (physical DVD), piped it through a modern virtualization stack, and dumped it into a digital reservoir (Samba) for consumption.

It took a bit of configuration to get the permissions right, but now? No more swapping discs.

Oh, and I automated it as well. Check out the project on my GitHub:
https://github.com/mgrffn117/ProxmoxLXC-DVD-Ripper

Leave a Comment

Your email address will not be published. Required fields are marked *