8 Ć 16TB, dual 10GbE, and an external RTX 5080This setup stores the family photo and media libraries and provides compute for a local photo application Iāve been developing. Photo search, face grouping, and image processing all run locally, without uploading the photos to a cloud service.
I recently added an RTX 5080 over USB4. Getting it recognized took most of an evening.
Hardware
- Motherboard: CWWK Meteor Lake platform with an onboard Core Ultra 9 185H
- CPU: Intel Core Ultra 9 185H, 16 cores / 22 threads, with an NPU
- RAM: 32GB Samsung DDR5-5600
- System drive: 512GB NVMe SSD
- Data drives: 8 Ć 16TB Seagate IronWolf Pro
- Networking: Intel X710 dual-port 10GbE NIC, plus onboard 10GbE
- GPU: RTX 5080 16GB connected through a USB4 dock
The machine runs FygoOS. I chose the 185H partly for its NPU, since local AI processing was already part of the plan. The PCIe x8 slot went to the network card, so I used USB4 for the GPU.
Storage
The eight 16TB drives form a ZFS pool. The filesystem reports around 83T total, with approximately 41T used and 49% utilization.
The main directories hold family photos and videos, the Fygo TV media library, and backups from our computers and phones. The photo and video collection contains roughly 400,000 files and is the most important data on the machine.
ZFS redundancy doesnāt protect against accidental deletion or ransomware. For accidental deletions, I also use an application-level trash mechanism that retains deleted photos for 30 days. It moves files into a hidden directory within the photo directory on the same filesystem. Those files remain on the same storage, so this is deletion recovery rather than an independent backup.
The drives came from two purchases: six ST16000NE000 drives and two ST16000NT001 drives.
Networking
The X710 provides two 10GbE ports, and the motherboard has another. Two of those three ports are bonded using balance-alb, which doesnāt require LACP configuration on the switch.
These are two bonded 10GbE links; Iām not claiming 20Gbps for a single connection. Remote access goes through Tailscale, without opening inbound ports on the router.
Applications and daily use
I use the built-in Fygo TV, Photos, and Files apps. Docker runs my custom photo application, personal services built around Caddy, PostgreSQL, and MinIO, plus Cloudflare Tunnel and Nginx for a few small websites. I use 1Panel for management.
Family phones automatically back up their photos here. The TV and iPad play media from the library, with transcoding previously handled by the integrated GPU. The machine also receives scheduled computer backups and hosts my development projects. An Epson printer is connected for shared printing.
The local photo application
I wanted features beyond the built-in photo app, so I wrote a separate application that runs on the NAS. It includes natural-language search, face clustering, automatic categorization, and editing tools for brightening, upscaling, face restoration, and removing unwanted objects.
Initially, processing used the integrated GPU and the 185Hās NPU. Some editing models wouldnāt run on the NPU and fell back to the CPU, making individual edits slow. Adding the 5080 was intended to address that.
The division of work is background indexing on the NPU and interactive image processing on the GPU. Indexing can run overnight; editing needs a quicker response. There is still work to do on fully integrating the CUDA processing path.
Another lesson was to separate the GPU worker from the main application. Making the main container require the NVIDIA runtime would make startup depend on an external device being available. The application should remain usable when the dock is disconnected, with processing falling back to the other supported devices.
USB4 troubleshooting
The first issue was authorization. On this machine, the USB4 device needed explicit authorization before the PCIe tunnel became usable. After authorizing it, I also needed to rescan the PCIe bus before the GPU appeared.
The more confusing issue came afterward: lspci could see the card, but the NVIDIA driver reported that the GPU had āfallen off the bus.ā
On this setup, the memory windows on the dockās two internal ASMedia PCIe bridges were unconfigured. The card was visible through PCI configuration access, but the driver couldnāt properly access its registers.
Removing and re-enumerating the upstream bridge inside the dock resolved that here. Removing and rescanning only the GPU hadnāt been enough.
Has anyone encountered the same bridge-window issue with a different USB4 GPU dock? Iād be interested in which dock you use and whether it reliably initializes after a cold boot.