Last active 2 hours ago

Adjust Nvidia Passthrough Device to Secondary Card

secondary_vm.sh Raw
1#!/bin/bash
2
3# Set a secondary VM to use second NVIDIA card as PCI Passthrough
4# And the bottom USB card. And REMOVE those 2 PCI devices from any other VM
5# mReschke 2025-03-16
6
7# Input
8secondary_vmid="$1"
9#primary=109
10
11# Validate
12if [ "$secondary_vmid" == "" ]; then
13 echo "You must provide a VMID you want to be the seconday"
14 exit 1
15fi
16
17# Validate secondary is NOT our primary VM
18#if [ "$secondary_vmid" == "$primary" ]; then
19# echo "You cannot use 109 as a secondary VM, that is your primary"
20# exit 1
21#fi
22
23
24# Define PCI devices to add/remove
25hostpci0="0000:01:00,pcie=1,x-vga=1"
26hostpci1="0000:82:00,pcie=1"
27
28# Get all VMID from qm list
29vmids=($(qm list | tail -n +2 | cut -d\ -f8))
30
31# Loop each VM and remove our pci devices if exist
32found_secondary=0
33for vmid in "${vmids[@]}"
34do
35 echo "Analyzing VMID $vmid"
36 if [ "$vmid" == "$secondary_vmid" ]; then
37 found_secondary=1
38 fi
39
40 # TODO check status
41 # qm status 102 | cut -d: -f2 | xargs
42 # will be running or stopped
43 # if running and PCI device exist, do NOT remove it
44 # and if I can't remove it, do NOT add it second VM
45
46 # Remove hostpci0 if matches our desired device
47 if result=$(qm config $vmid | grep $hostpci0); then
48 echo " VMID $vmid has option $result"
49 qm set $vmid --delete hostpci0
50 echo " VMID $vmid removed hostpci0"
51 fi
52
53 # Remove hostpci1 is matches our desired device
54 if result=$(qm config $vmid | grep $hostpci1); then
55 echo " VMID $vmid has option $result"
56 qm set $vmid --delete hostpci1
57 echo " VMID $vmid removed hostpci1"
58 fi
59
60done
61
62# Finally add our PIC devices to the desired VMID
63if [ "$found_secondary" == 1 ]; then
64 echo
65 echo "Setting secondary VM to $secondary_vmid"
66 qm set $secondary_vmid -hostpci0 $hostpci0
67 qm set $secondary_vmid -hostpci1 $hostpci1
68else
69 echo "The secondary VMID $secondary_vmid was not found in qm list, not setting secondary"
70 exit 1
71fi
72
73
74#root@dynepyc:/usr/local/bin# qm config 107|grep hostpci
75#hostpci0: 0000:01:00,pcie=1,x-vga=1
76#hostpci1: 0000:82:00,pcie=1