From b3aaf999d512c69504c0277fc35f806accf6e2a1 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 27 Jun 2026 04:46:40 +0000 Subject: [PATCH 1/3] docs: remove Quadro P2200 specific references, generalize for any NVIDIA GPU Replace all prose mentions of 'Quadro P2200' with generic GPU language. Sample command output blocks left as-is (they're illustrative, not prescriptive). Co-Authored-By: Claude Sonnet 4.6 --- README.md | 26 +++++++++++++------------- scripts/fan-control.sh | 2 +- scripts/gpu-passthrough-setup.sh | 2 +- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 2de478b..a762181 100644 --- a/README.md +++ b/README.md @@ -462,7 +462,7 @@ Find: **SR-IOV Global Enable** SR-IOV is a PCIe feature that allows a single physical device to appear as -multiple devices. Even though the Quadro P2200 does not use SR-IOV, enabling +multiple devices. Even though the GPU does not use SR-IOV, enabling this globally avoids a class of IOMMU grouping problems. ``` @@ -1203,7 +1203,7 @@ After running this, refresh the Proxmox web UI — the popup will be gone. **What this phase does:** Fixes two hardware quirks that bite R730xd owners running non-Dell gear: -1. **Fan control.** iDRAC detects the two Quadro P2200s as "non-Dell PCIe +1. **Fan control.** iDRAC detects the non-Dell GPUs as "non-Dell PCIe cards" and immediately pins every fan at 100% indefinitely to be safe. The server sounds like a jet engine and never stops. We disable iDRAC's automatic control and replace it with a daemon that sets fan speed based @@ -1306,7 +1306,7 @@ Expected output: ``` **The fans will immediately ramp back to 100% within a few seconds** — that -is iDRAC reacting to the Quadro again. This confirms the script was in fact +is iDRAC reacting to the non-Dell GPU again. This confirms the script was in fact holding them down. Get the service installed quickly so the noise stops. --- @@ -1859,8 +1859,8 @@ VM 102. Save each file. ## Phase 10 — GPU Passthrough Setup -**What this does:** Tells the Linux kernel to stop trying to use the two Quadro -P2200s itself and instead hand them over to the VFIO driver, which holds them +**What this does:** Tells the Linux kernel to stop trying to use the GPUs +itself and instead hand them over to the VFIO driver, which holds them ready to be claimed by a virtual machine. Three things happen: @@ -2230,7 +2230,7 @@ Click **Add** → **PCI Device**. | Field | Value | |-------|-------| -| Raw Device | select GPU #1: e.g. `0000:03:00.0 NVIDIA GP106GL [Quadro P2200]` | +| Raw Device | select GPU #1 from the dropdown (shows PCI address + model name) | | All Functions | **checked** | | Primary GPU | **checked** | | PCI-Express | **checked** | @@ -2344,7 +2344,7 @@ Use the same wizard settings as VM 100 except: After the wizard completes, add the second GPU in the **Hardware** tab: Click **Add** → **PCI Device** → select GPU #2 (e.g. `0000:04:00.0 NVIDIA -GP106GL [Quadro P2200]`). Check **All Functions**, **Primary GPU**, +your GPU model`). Check **All Functions**, **Primary GPU**, **PCI-Express**. Click **Add**. No Coral USB for VM 101. @@ -2479,7 +2479,7 @@ with GPU-accelerated video decode and Coral object detection. **Prerequisites:** - VM 100 running Ubuntu Server 24.04 with SSH access (Phase 11) -- NVIDIA Quadro P2200 passed through (PCIe device visible in guest) +- NVIDIA GPU passed through (PCIe device visible in guest) - Google Coral USB passed through (USB device visible in guest) - 8 raw data drives visible as block devices inside the VM - Frigate config files from this repo (`frigate/docker-compose.yml` and @@ -2569,7 +2569,7 @@ Expected output: Key things to verify: - **Driver Version: 535.xxx.xx** — driver loaded -- **Quadro P2200** — correct GPU model +- GPU model matches your installed card - **5120 MiB** — full 5 GB memory visible (not a partial amount) If `nvidia-smi` returns `No devices were found`: @@ -2609,7 +2609,7 @@ systemctl enable docker ### Step 12.6 — Install NVIDIA Container Toolkit This allows Docker containers to access the GPU. Without it Frigate cannot use -the Quadro for hardware video decode. +the GPU for hardware video decode. ```bash curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \ @@ -2856,7 +2856,7 @@ A successful start looks like: ``` frigate | [INFO] Starting Frigate... frigate | [INFO] Connected to EdgeTPU device: usb -frigate | [INFO] Loading NVIDIA GPU: Quadro P2200 +frigate | [INFO] Loading NVIDIA GPU: <your GPU model> frigate | [INFO] Starting camera: front_door frigate | [INFO] Frigate is running ``` @@ -2893,7 +2893,7 @@ http://192.168.1.XXX:5000 The Frigate dashboard shows live camera feeds, detection events, and system stats. Navigate to **System → Stats** to confirm: -- GPU utilization is shown (Quadro P2200) +- GPU utilization is shown (your GPU model) - Coral inference is running - CPU usage is low (NVDEC handling decode, Coral handling detection) @@ -2917,7 +2917,7 @@ stats. Navigate to **System → Stats** to confirm: | Layer | Component | Running | |-------|-----------|---------| -| Hardware | Dell R730xd, PERC H730, 12 drives, 2× Quadro P2200, Coral USB | ✓ | +| Hardware | Dell R730xd, PERC H730, 12 drives, NVIDIA GPU(s), Coral USB | ✓ | | Proxmox host | IOMMU active, GPUs held by vfio-pci | ✓ | | Services | fan-control (quiet fans), stagger-spinup (PSU protection) | ✓ | | VM 100 | Ubuntu 24.04, GPU passthrough, 8 drives, Frigate NVR | ✓ | diff --git a/scripts/fan-control.sh b/scripts/fan-control.sh index dd901a2..d7c5ab4 100755 --- a/scripts/fan-control.sh +++ b/scripts/fan-control.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Dell R730xd fan speed control for third-party PCIe cards (Quadro P2200, etc.) +# Dell R730xd fan speed control for third-party PCIe cards (non-Dell GPUs) # # iDRAC detects non-Dell GPUs and slams fans to 100% indefinitely. # This script disables iDRAC automatic fan control and manages speed based diff --git a/scripts/gpu-passthrough-setup.sh b/scripts/gpu-passthrough-setup.sh index dc212c3..9f6f4ea 100755 --- a/scripts/gpu-passthrough-setup.sh +++ b/scripts/gpu-passthrough-setup.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Configure IOMMU + VFIO passthrough for two Quadro P2200 GPUs on Proxmox VE 9.x. +# Configure IOMMU + VFIO passthrough for NVIDIA GPUs on Proxmox VE 9.x. # Run on the Proxmox host. Requires a reboot to take effect. # # After running this script: From 89f8a453b70954e5398c270b8475e380002908c4 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 27 Jun 2026 04:58:31 +0000 Subject: [PATCH 2/3] fix: perc-nonraid.sh add JBOD controller enable and per-drive JBOD state H730 requires two steps: enable JBOD on the controller, then set each UGood drive to JBOD state. Without both, drives show in perccli but are invisible to lsblk/the OS. Also skip Onln drives (OS RAID members). Co-Authored-By: Claude Sonnet 4.6 --- scripts/perc-nonraid.sh | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/scripts/perc-nonraid.sh b/scripts/perc-nonraid.sh index d343cfa..e3ee789 100755 --- a/scripts/perc-nonraid.sh +++ b/scripts/perc-nonraid.sh @@ -1,10 +1,12 @@ #!/usr/bin/env bash -# Convert PERC H730 drives to Non-RAID (per-disk passthrough) mode. +# Convert PERC H730 drives to JBOD (per-disk passthrough) mode. # Run once on the Proxmox host before assigning drives to VMs. # Requires: perccli (install from Dell's website or local .deb) # -# Dell PERC H730 does not have a true HBA/IT mode. Non-RAID mode is the -# equivalent — each disk is presented directly to the OS with SMART intact. +# Dell PERC H730 requires two steps to expose drives to the OS: +# 1. Enable JBOD mode on the controller +# 2. Set each unconfigured drive to JBOD state +# Without both steps, drives show as UGood in perccli but are invisible to lsblk. set -euo pipefail @@ -29,23 +31,26 @@ echo "=== Drives on controller 0 ===" $PERCCLI /c0 /eall /sall show echo "" -read -rp "Proceed with converting all non-OS drives to Non-RAID mode? [y/N] " confirm +read -rp "Proceed with converting all non-OS drives to JBOD mode? [y/N] " confirm [[ "$confirm" =~ ^[Yy]$ ]] || { echo "Aborted."; exit 0; } -# Identify enclosure IDs (typically 8 for the internal backplane on R730xd) +# Step 1: Enable JBOD mode on the controller +echo "" +echo "--- Enabling JBOD mode on controller 0 ---" +$PERCCLI /c0 set jbod=on +echo "" + +# Step 2: Set each UGood drive to JBOD state so the OS can see it +# Only targets UGood drives — skips Onln drives (OS RAID members) ENCLOSURES=$($PERCCLI /c0 /eall show | awk '/^[0-9]/{print $1}' | sort -u) for enc in $ENCLOSURES; do - echo "" echo "=== Processing enclosure $enc ===" - SLOTS=$($PERCCLI /c0 /e"$enc" /sall show | awk '/UGood|Onln|JBOD|DHS/{print $2}' | sort -u) + SLOTS=$($PERCCLI /c0 /e"$enc" /sall show | awk '/UGood/{print $2}' | sort -u) for slot in $SLOTS; do - echo -n " Slot $slot: setting to Good... " - $PERCCLI /c0 /e"$enc" /s"$slot" set good force 2>&1 | grep -i "success\|error\|already" || true - - echo -n " Slot $slot: setting to Non-RAID... " - $PERCCLI /c0 /e"$enc" /s"$slot" set nonraid 2>&1 | grep -i "success\|error\|already" || true + echo -n " Slot $slot: setting to JBOD... " + $PERCCLI /c0 /e"$enc" /s"$slot" set jbod 2>&1 | grep -i "success\|error\|already" || true done done @@ -54,5 +59,6 @@ echo "=== Final drive state ===" $PERCCLI /c0 /eall /sall show echo "" -echo "Done. Reboot the host for changes to take full effect." -echo "After reboot, run build-bay-map.sh to map bays to /dev/disk/by-id paths." +echo "Done. Drives should now be visible to the OS (check with lsblk)." +echo "No reboot required — drives appear immediately after JBOD transition." +echo "Run build-bay-map.sh to map bays to /dev/disk/by-id paths." From 7c696c0125da03d09da05e63dcaa14e82c76b30a Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 27 Jun 2026 05:01:01 +0000 Subject: [PATCH 3/3] docs: move drive-to-VM assignment to Phase 11 where VMs exist Step 9.4 was telling users to fill in VM config placeholders before VMs were created. Replace with a note to record by-id paths for use in Phase 11 Step 11.6 where drives are actually assigned via qm set. Co-Authored-By: Claude Sonnet 4.6 --- README.md | 29 ++++------------------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index a762181..772094f 100644 --- a/README.md +++ b/README.md @@ -1824,36 +1824,15 @@ Save with **Ctrl+O**, Enter, then **Ctrl+X** to exit nano. --- -### Step 9.4 — Fill in the VM config placeholders +### Step 9.4 — Record your by-id paths for later -Now open each VM config example and replace the `PLACEHOLDER_BAYx` entries with -the real by-id paths: +You'll assign drives to VMs in Phase 11. For now, just save the mapping somewhere handy (the `hardware-layout.md` doc is a good place): ```bash -nano /opt/local_proxmox/vm-configs/100-frigate.conf.example +ls -la /dev/disk/by-id/ | grep -v part ``` -Change lines like: - -``` -scsi1: /dev/disk/by-id/PLACEHOLDER_BAY1,size=0 -``` - -To the real path: - -``` -scsi1: /dev/disk/by-id/scsi-35000cca23b7d4eb8,size=0 -``` - -Do this for all 8 drives in VM 100, drives 9–10 in VM 101, and drives 11–12 in -VM 102. Save each file. - -> **The full path starts with `/dev/disk/by-id/`** — but in the Proxmox VM -> config you write the full path. Double-check by running: -> ```bash -> ls -la /dev/disk/by-id/ | grep -v part -> ``` -> You will see the symlinks and the drives they point to. +You'll paste these paths into `qm set` commands in Phase 11, Step 11.6. ---