mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-02 19:02:31 +00:00
docs: review GPU and Coral guides in all seven translations
This commit is contained in:
@@ -149,96 +149,6 @@ export default async function GpuVmPassthroughPage({
|
||||
<h2 className="text-2xl font-semibold mt-10 mb-4 text-gray-900">{t("howRuns.heading")}</h2>
|
||||
<p className="mb-4 text-gray-800 leading-relaxed">{t("howRuns.body")}</p>
|
||||
|
||||
<pre className="bg-gray-100 text-gray-800 p-4 rounded-md overflow-x-auto text-sm my-4 border border-gray-200 leading-snug">
|
||||
{`┌─────────────────────────────────────────────┐
|
||||
│ PHASE 1 — Gather info, validate, confirm │
|
||||
│ (nothing touched yet) │
|
||||
└──────────────────┬──────────────────────────┘
|
||||
▼
|
||||
┌────────────┴────────────┐
|
||||
▼ ▼
|
||||
lspci detects IOMMU enabled?
|
||||
GPUs (Intel/AMD/ ├─ No → offer to add
|
||||
NVIDIA) │ intel_iommu=on /
|
||||
│ │ amd_iommu=on
|
||||
▼ └─ Yes → continue
|
||||
User selects GPU
|
||||
│
|
||||
▼
|
||||
Pre-flight checks
|
||||
├─ Not in SR-IOV
|
||||
├─ Not D3cold (AMD)
|
||||
├─ Has FLR or equivalent reset
|
||||
├─ Not on the block-list (Intel Arc, Apollo Lake)
|
||||
├─ Warn if single-GPU host
|
||||
└─ Resolve IOMMU group
|
||||
│
|
||||
▼
|
||||
User selects VM
|
||||
│
|
||||
▼
|
||||
VM is q35? ── No → abort
|
||||
│
|
||||
Yes
|
||||
▼
|
||||
GPU already assigned elsewhere?
|
||||
│
|
||||
├─ To LXC → menu: keep + disable onboot
|
||||
│ OR remove GPU lines + keep onboot
|
||||
├─ To other VM (running) → abort
|
||||
├─ To other VM (stopped) → menu: keep + disable onboot
|
||||
│ OR remove GPU lines + keep onboot
|
||||
│ (fast-path: already vfio-pci → no
|
||||
│ host reconfig, no reboot needed)
|
||||
└─ Free → continue
|
||||
│
|
||||
▼
|
||||
Audio companion
|
||||
├─ Has .1 sibling? (dGPU: NVIDIA/AMD HDMI)
|
||||
│ → auto-include (never used by host)
|
||||
└─ No .1 sibling? (Intel iGPU, split audio)
|
||||
→ checklist of host audio controllers,
|
||||
default = none (user opts in)
|
||||
│
|
||||
▼
|
||||
Show confirmation summary
|
||||
(GPU + IOMMU siblings + audio + target VM)
|
||||
│
|
||||
┌─────── Cancel OR Confirm ────┐
|
||||
▼ ▼
|
||||
exit, nothing ┌─────────────┴──────────────┐
|
||||
was changed │ PHASE 2 — Apply changes │
|
||||
└─────────────┬──────────────┘
|
||||
▼
|
||||
Host:
|
||||
├─ /etc/modules (vfio_*)
|
||||
├─ /etc/modprobe.d/vfio.conf (ids=... disable_vga=1)
|
||||
├─ /etc/modprobe.d/blacklist.conf (vendor drivers only)
|
||||
├─ kernel cmdline (IOMMU if missing)
|
||||
├─ NVIDIA: per-BDF udev rule at
|
||||
│ 10-proxmenux-vfio-bind.rules
|
||||
│ + BDF state at vfio-bind.bdfs
|
||||
│ (blacklist nvidia only when
|
||||
│ every NVIDIA GPU is in VFIO)
|
||||
├─ AMD: dump ROM → vbios_<vendor>_<device>.bin
|
||||
└─ update-initramfs -u -k all
|
||||
+ proxmox-boot-tool refresh
|
||||
|
||||
VM config (qm set <vmid>):
|
||||
├─ hostpci0 = GPU (x-vga=1 unless Intel iGPU)
|
||||
├─ hostpci1..n = IOMMU group siblings
|
||||
├─ hostpci<last> = audio function(s)
|
||||
├─ vga = std
|
||||
└─ NVIDIA: cpu=host,hidden=1
|
||||
args=... hv_vendor_id=NV43FIX
|
||||
│
|
||||
▼
|
||||
┌───────────────┴───────────────┐
|
||||
│ PHASE 3 — Summary + reboot │
|
||||
└───────────────────────────────┘
|
||||
Show what changed. If host config
|
||||
touched → prompt reboot.`}
|
||||
</pre>
|
||||
|
||||
<h2 className="text-2xl font-semibold mt-10 mb-4 text-gray-900">{t("walkthrough.heading")}</h2>
|
||||
|
||||
@@ -394,18 +304,17 @@ args: -cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=NV43FIX,kvm=off'`}
|
||||
<h2 className="text-2xl font-semibold mt-10 mb-4 text-gray-900">{t("verification.heading")}</h2>
|
||||
|
||||
<CopyableCode
|
||||
code={`# After reboot, confirm the GPU is bound to vfio-pci (not to the vendor driver)
|
||||
lspci -nnk -d <vendor:device>
|
||||
# Expect: "Kernel driver in use: vfio-pci"
|
||||
code={`# Replace PCI_ADDRESS and VMID with the actual values.
|
||||
# Verify the exact PCI address, especially with identical GPU models.
|
||||
lspci -nnk -s PCI_ADDRESS
|
||||
# Expected driver: vfio-pci
|
||||
|
||||
# Start the VM and watch for successful binding
|
||||
qm start <vmid>
|
||||
journalctl -u qemu-server@<vmid>.service -f
|
||||
|
||||
# Inside the guest, drivers install normally and the GPU works as if it were physical.
|
||||
# NVIDIA: verify with nvidia-smi inside the VM.
|
||||
# AMD: verify with Windows Device Manager / DXDiag.
|
||||
# Intel: verify display output / intel_gpu_top inside the VM.`}
|
||||
qm config VMID
|
||||
qm start VMID
|
||||
qm status VMID
|
||||
# Inspect the start task in Proxmox Tasks if startup fails.
|
||||
# Inside the guest, install a compatible GPU driver and test the application.
|
||||
# NVIDIA: nvidia-smi; AMD/Intel: the guest driver and application diagnostics.`}
|
||||
className="my-4"
|
||||
/>
|
||||
|
||||
@@ -428,17 +337,14 @@ journalctl -u qemu-server@<vmid>.service -f
|
||||
</Callout>
|
||||
|
||||
<CopyableCode
|
||||
code={`# Rescue — remove passthrough
|
||||
# Remove hostpciN lines from the VM config
|
||||
sed -i '/^hostpci[0-9]*:/d' /etc/pve/qemu-server/<vmid>.conf
|
||||
|
||||
# Unblacklist the host driver
|
||||
rm -f /etc/modprobe.d/blacklist.conf /etc/modprobe.d/vfio.conf
|
||||
# (if NVIDIA was involved)
|
||||
mv /etc/udev/rules.d/70-nvidia.rules.proxmenux-disabled /etc/udev/rules.d/70-nvidia.rules 2>/dev/null
|
||||
|
||||
update-initramfs -u -k all
|
||||
reboot`}
|
||||
code={`# Inspect from a recovered Proxmox host; replace the placeholders.
|
||||
qm config VMID
|
||||
lspci -nnk -s PCI_ADDRESS
|
||||
cat /etc/proxmenux/vfio-bind.bdfs 2>/dev/null
|
||||
# Review the affected PCI assignments and driver-binding configuration.
|
||||
# Do not remove entire shared blacklist.conf or vfio.conf files.
|
||||
# Use ProxMenux Switch GPU Mode to return a GPU to the host driver.
|
||||
# Review its affected guests and follow the indicated reboot procedure.`}
|
||||
className="my-4"
|
||||
/>
|
||||
|
||||
@@ -449,26 +355,13 @@ reboot`}
|
||||
<h2 className="text-2xl font-semibold mt-10 mb-4 text-gray-900">{t("revert.heading")}</h2>
|
||||
<p className="mb-4 text-gray-800 leading-relaxed">{t("revert.intro")}</p>
|
||||
<CopyableCode
|
||||
code={`# Remove hostpci lines from the VM
|
||||
qm set <vmid> --delete hostpci0
|
||||
# (repeat for hostpci1, hostpci2, ... if multiple were added)
|
||||
|
||||
# ─── OPTIONAL — not required ──────────────────────────────────────
|
||||
# The steps above already free the VM from the GPU. The lines below
|
||||
# are only needed if you also want the host to use the GPU again
|
||||
# (e.g. for LXC sharing or host-side transcoding). Skip this block
|
||||
# if you simply want to stop passing the GPU to the VM.
|
||||
# ──────────────────────────────────────────────────────────────────
|
||||
|
||||
# Release the GPU back to the host driver:
|
||||
rm -f /etc/modprobe.d/vfio.conf
|
||||
rm -f /etc/modprobe.d/blacklist.conf # careful — this file may have other blacklists
|
||||
# NVIDIA only — re-enable the udev rule + drop the all-NVIDIA-in-VFIO blacklist (if present)
|
||||
mv /etc/udev/rules.d/70-nvidia.rules.proxmenux-disabled /etc/udev/rules.d/70-nvidia.rules 2>/dev/null
|
||||
rm -f /etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf
|
||||
|
||||
update-initramfs -u -k all
|
||||
reboot`}
|
||||
code={`# Replace VMID. Inspect the actual assignment index first.
|
||||
qm config VMID
|
||||
# With the VM stopped, remove ONLY the intended entry (hostpci0 is an example).
|
||||
qm set VMID --delete hostpci0
|
||||
qm config VMID
|
||||
# Repeat only for the associated PCI entries you intend to remove.
|
||||
# This does not change the host's VFIO/native-driver binding.`}
|
||||
className="my-4"
|
||||
/>
|
||||
|
||||
|
||||
@@ -146,88 +146,6 @@ export default async function AddGpuToLxcPage({
|
||||
<h2 className="text-2xl font-semibold mt-10 mb-4 text-gray-900">{t("howRuns.heading")}</h2>
|
||||
<p className="mb-4 text-gray-800 leading-relaxed">{t("howRuns.body")}</p>
|
||||
|
||||
<pre className="bg-gray-100 text-gray-800 p-4 rounded-md overflow-x-auto text-sm my-4 border border-gray-200 leading-snug">
|
||||
{`┌─────────────────────────────────────────────┐
|
||||
│ PHASE 1 — Detect, select, validate │
|
||||
│ (nothing touched yet) │
|
||||
└──────────────────┬──────────────────────────┘
|
||||
▼
|
||||
lspci detects Intel / AMD / NVIDIA GPU(s)
|
||||
(NVIDIA: also check nvidia module loaded +
|
||||
nvidia-smi, capture host driver version)
|
||||
│
|
||||
▼
|
||||
User picks LXC container from the list
|
||||
│
|
||||
▼
|
||||
User selects which GPU(s) to add
|
||||
(checklist; auto-selects if only one)
|
||||
│
|
||||
▼
|
||||
Pre-flight checks
|
||||
├─ Not in SR-IOV (VF / active PF) → block
|
||||
├─ Bound to vfio-pci? → offer Switch Mode, exit
|
||||
└─ Already configured in this CT? → filter out
|
||||
(skip duplicates, warn if partial)
|
||||
│
|
||||
┌─────── Cancel OR Confirm ────┐
|
||||
▼ ▼
|
||||
Exit, nothing ┌──────────────────┴──────────────────┐
|
||||
was changed │ PHASE 2 — Configure + install │
|
||||
└──────────────────┬──────────────────┘
|
||||
▼
|
||||
Stop container (if running)
|
||||
│
|
||||
▼
|
||||
Write LXC config (/etc/pve/lxc/<ctid>.conf):
|
||||
├─ Intel / AMD iGPU:
|
||||
│ dev<N>: /dev/dri/card* gid=video
|
||||
│ dev<N>: /dev/dri/renderD* gid=render
|
||||
├─ AMD with ROCm (if /dev/kfd):
|
||||
│ dev<N>: /dev/kfd gid=render
|
||||
└─ NVIDIA:
|
||||
dev<N>: /dev/nvidia0..N
|
||||
dev<N>: /dev/nvidiactl · nvidia-uvm*
|
||||
dev<N>: /dev/nvidia-modeset
|
||||
dev<N>: /dev/nvidia-caps/* (if exists)
|
||||
│
|
||||
▼
|
||||
Install GPU guard hookscript
|
||||
(same one used by VM passthrough, if
|
||||
available — prevents conflicts on start/stop)
|
||||
│
|
||||
▼
|
||||
Start container + wait for readiness
|
||||
(pct exec — true, up to ~30 s)
|
||||
│
|
||||
▼
|
||||
Install userspace drivers inside CT
|
||||
(distro auto-detected)
|
||||
├─ Intel → apk/pacman/apt
|
||||
│ (intel-media-driver,
|
||||
│ libva-utils, opencl-icd)
|
||||
├─ AMD → Mesa VA drivers
|
||||
│ (mesa-va-drivers, libva)
|
||||
└─ NVIDIA →
|
||||
├─ Alpine: apk add nvidia-utils
|
||||
├─ Arch: pacman -S nvidia-utils
|
||||
└─ Debian/Ubuntu/others:
|
||||
host .run is pre-extracted, packed,
|
||||
pct push'd into the container, run
|
||||
with --no-kernel-modules --no-dkms
|
||||
│
|
||||
▼
|
||||
Align GIDs in /etc/group inside CT
|
||||
(video=44, render=104 to match host)
|
||||
│
|
||||
▼
|
||||
Restore container state
|
||||
(stop if it was stopped before)
|
||||
│
|
||||
▼
|
||||
Show summary + nvidia-smi output
|
||||
(if NVIDIA) + log path`}
|
||||
</pre>
|
||||
|
||||
<h2 className="text-2xl font-semibold mt-10 mb-4 text-gray-900">{t("walkthrough.heading")}</h2>
|
||||
|
||||
|
||||
@@ -166,20 +166,6 @@ export default async function InstallCoralTPUHostPage({
|
||||
<h2 className="text-2xl font-semibold mt-10 mb-4 text-gray-900">{t("howRuns.heading")}</h2>
|
||||
<p className="mb-4 text-gray-800 leading-relaxed">{t("howRuns.body")}</p>
|
||||
|
||||
<pre className="bg-gray-100 text-gray-800 p-4 rounded-md overflow-x-auto text-sm my-4 border border-gray-200 leading-snug">
|
||||
{`Detect Coral hardware
|
||||
│
|
||||
├─ PCIe / M.2 detected ──► build gasket + apex with DKMS
|
||||
│ └─ reboot recommended
|
||||
│
|
||||
├─ USB detected ─────────► install libedgetpu runtime
|
||||
│ └─ no reboot required
|
||||
│
|
||||
└─ no PCIe / M.2 detected
|
||||
├─ no legacy gasket-dkms state ─► no PCIe changes
|
||||
└─ legacy gasket-dkms state ────► offer optional cleanup
|
||||
└─ USB runtime untouched`}
|
||||
</pre>
|
||||
|
||||
<h2 className="text-2xl font-semibold mt-10 mb-4 text-gray-900">{t("walkthrough.heading")}</h2>
|
||||
|
||||
@@ -362,6 +348,7 @@ rm -rf gasket-driver
|
||||
git clone --depth=1 https://github.com/feranick/gasket-driver.git
|
||||
|
||||
# Stage under /usr/src for DKMS
|
||||
mkdir -p /usr/src/gasket-1.0
|
||||
cp -a /tmp/gasket-driver/src/. /usr/src/gasket-1.0/
|
||||
|
||||
# Tell DKMS what it is
|
||||
|
||||
@@ -138,102 +138,7 @@ export default async function NvidiaHostPage({
|
||||
<h2 className="text-2xl font-semibold mt-10 mb-4 text-gray-900">{t("howRuns.heading")}</h2>
|
||||
<p className="mb-4 text-gray-800 leading-relaxed">{t("howRuns.body")}</p>
|
||||
|
||||
<pre className="bg-gray-100 text-gray-800 p-4 rounded-md overflow-x-auto text-sm my-4 border border-gray-200 leading-snug">
|
||||
{`┌─────────────────────────────────────────────┐
|
||||
│ PHASE 1 — Detect, validate, pick version │
|
||||
│ (nothing touched yet) │
|
||||
└──────────────────┬──────────────────────────┘
|
||||
▼
|
||||
┌────────────┴────────────┐
|
||||
▼ ▼
|
||||
lspci detects GPU bound to
|
||||
NVIDIA GPU(s) vfio-pci? ──→ Abort
|
||||
│ │ (remove VM
|
||||
│ No passthrough first)
|
||||
▼
|
||||
nvidia-smi: driver already installed?
|
||||
│
|
||||
├─ No → continue (fresh install)
|
||||
└─ Yes → ask: Reinstall/Update OR Remove
|
||||
│
|
||||
├─ Remove → complete uninstall
|
||||
│ + reboot prompt
|
||||
└─ Reinstall → continue
|
||||
│
|
||||
▼
|
||||
Show install overview
|
||||
(GPU list + current driver +
|
||||
LXC containers with NVIDIA passthrough)
|
||||
│
|
||||
▼
|
||||
Kernel-compat filter:
|
||||
├─ Kernel 6.17+ → driver 580.82.07+
|
||||
├─ Kernel 6.8–16 → driver 550+
|
||||
├─ Kernel 6.2–7 → driver 535+
|
||||
└─ Kernel 5.15+ → driver 470+
|
||||
│
|
||||
▼
|
||||
User picks version (or "Latest")
|
||||
│
|
||||
┌─────── Cancel OR Confirm ────┐
|
||||
▼ ▼
|
||||
Exit, nothing ┌─────────────┴──────────────┐
|
||||
was changed │ PHASE 2 — Install driver │
|
||||
└─────────────┬──────────────┘
|
||||
▼
|
||||
Prepare host:
|
||||
├─ Install pve-headers-$(uname -r)
|
||||
├─ Install build-essential + dkms
|
||||
├─ Blacklist nouveau + unload
|
||||
│ └ /etc/modprobe.d/nouveau-blacklist.conf
|
||||
├─ Write modules-load config
|
||||
│ └ /etc/modules-load.d/nvidia-vfio.conf
|
||||
├─ Stop/disable nvidia services
|
||||
└─ Unload residual nvidia modules
|
||||
|
||||
If different version already present:
|
||||
└─ clean uninstall first (apt purge,
|
||||
remove DKMS entries)
|
||||
│
|
||||
▼
|
||||
Download NVIDIA .run installer
|
||||
to /opt/nvidia (validate size +
|
||||
executable signature)
|
||||
│
|
||||
▼
|
||||
Run installer with --dkms
|
||||
--disable-nouveau --no-nouveau-check
|
||||
│
|
||||
▼
|
||||
Install udev rules
|
||||
└─ /etc/udev/rules.d/70-nvidia.rules
|
||||
+ clone NVIDIA/nvidia-persistenced
|
||||
│
|
||||
▼
|
||||
update-initramfs -u -k all
|
||||
│
|
||||
▼
|
||||
nvidia-smi — verify driver loaded
|
||||
│
|
||||
┌───────────────┴───────────────┐
|
||||
│ PHASE 3 — Optional extras │
|
||||
└───────────────┬───────────────┘
|
||||
▼
|
||||
LXC containers with NVIDIA?
|
||||
├─ Yes → offer driver propagation
|
||||
│ (Alpine: apk · Arch: pacman ·
|
||||
│ Debian/others: extract .run)
|
||||
└─ No → skip
|
||||
│
|
||||
▼
|
||||
keylase/nvidia-patch (NVENC limit)?
|
||||
├─ Yes → clone + apply
|
||||
└─ No → skip
|
||||
│
|
||||
▼
|
||||
Reboot prompt — required to finalize
|
||||
nouveau blacklist + load new module`}
|
||||
</pre>
|
||||
|
||||
<Steps>
|
||||
<Steps.Step title={t("walkthrough.detect.title")}>
|
||||
@@ -282,7 +187,7 @@ export default async function NvidiaHostPage({
|
||||
<p className="mb-3 text-gray-800">{t.rich("walkthrough.download.body", { code })}</p>
|
||||
<CopyableCode
|
||||
code={`# What ProxMenux runs under the hood (you don't have to type this):
|
||||
sh NVIDIA-Linux-x86_64-<version>.run \\
|
||||
sh NVIDIA-Linux-x86_64-VERSION.run \\
|
||||
--no-questions \\
|
||||
--ui=none \\
|
||||
--disable-nouveau \\
|
||||
|
||||
@@ -336,29 +336,12 @@ export default async function SwitchGpuModePage({
|
||||
{t.rich("manual.intro", { strong, code })}
|
||||
</p>
|
||||
<CopyableCode
|
||||
code={`# Drop the vendor:device from vfio.conf — keep other GPUs intact
|
||||
sed -i 's/10de:2204,//; s/,10de:2204//; s/=10de:2204 /=/' /etc/modprobe.d/vfio.conf
|
||||
code={`# Inspect this example GPU; replace the ID with your card
|
||||
lspci -nnk -d 10de:2204
|
||||
|
||||
# Remove the NVIDIA hard-blacklist and nouveau blacklist
|
||||
sed -i '/^blacklist nouveau$/d; /^blacklist nvidia$/d; /^blacklist nvidia_drm$/d; /^blacklist nvidia_modeset$/d; /^blacklist nvidia_uvm$/d; /^blacklist nvidiafb$/d' /etc/modprobe.d/blacklist.conf
|
||||
rm -f /etc/modprobe.d/nvidia-blacklist.conf
|
||||
|
||||
# Re-enable NVIDIA udev rule + modules-load config (if disabled by VM-mode switch)
|
||||
[ -f /etc/udev/rules.d/70-nvidia.rules.proxmenux-disabled-vfio ] && \\
|
||||
mv /etc/udev/rules.d/70-nvidia.rules.proxmenux-disabled-vfio \\
|
||||
/etc/udev/rules.d/70-nvidia.rules
|
||||
[ -f /etc/modules-load.d/nvidia-vfio.conf.proxmenux-disabled-vfio ] && \\
|
||||
mv /etc/modules-load.d/nvidia-vfio.conf.proxmenux-disabled-vfio \\
|
||||
/etc/modules-load.d/nvidia-vfio.conf
|
||||
|
||||
# Clean up the VM config — precise BDF regex, no substring collisions
|
||||
# (replace 0000:01:00 with your GPU's slot)
|
||||
sed -E -i '/^hostpci[0-9]+:[[:space:]]*(0000:)?01:00\\.[0-7]([,[:space:]]|$)/d' \\
|
||||
/etc/pve/qemu-server/<vmid>.conf
|
||||
|
||||
# Rebuild initramfs and reboot
|
||||
update-initramfs -u -k all
|
||||
reboot`}
|
||||
# Inspect the persistent per-BDF NVIDIA policy
|
||||
cat /etc/proxmenux/vfio-bind.bdfs
|
||||
cat /etc/udev/rules.d/10-proxmenux-vfio-bind.rules`}
|
||||
className="my-4"
|
||||
/>
|
||||
|
||||
@@ -366,28 +349,12 @@ reboot`}
|
||||
{t.rich("manual.lxcToVm", { strong })}
|
||||
</p>
|
||||
<CopyableCode
|
||||
code={`# Add the vendor:device to vfio.conf (create the line if missing)
|
||||
grep -q '^options vfio-pci ids=' /etc/modprobe.d/vfio.conf && \\
|
||||
sed -i '/^options vfio-pci ids=/ s/$/,10de:2204/' /etc/modprobe.d/vfio.conf || \\
|
||||
echo 'options vfio-pci ids=10de:2204 disable_vga=1' >> /etc/modprobe.d/vfio.conf
|
||||
code={`# Replace this example PCI address with your selected GPU
|
||||
lspci -nnk -s 0000:01:00.0
|
||||
readlink /sys/bus/pci/devices/0000:01:00.0/iommu_group
|
||||
|
||||
# Blacklist the native driver so vfio-pci can claim the card
|
||||
cat >> /etc/modprobe.d/blacklist.conf <<'EOF'
|
||||
blacklist nouveau
|
||||
blacklist nvidia
|
||||
blacklist nvidia_drm
|
||||
blacklist nvidia_modeset
|
||||
blacklist nvidia_uvm
|
||||
blacklist nvidiafb
|
||||
options nouveau modeset=0
|
||||
EOF
|
||||
|
||||
# Make sure vfio-pci loads at boot
|
||||
grep -q '^vfio-pci$' /etc/modules || echo 'vfio-pci' >> /etc/modules
|
||||
|
||||
# Rebuild initramfs and reboot
|
||||
update-initramfs -u -k all
|
||||
reboot`}
|
||||
# List all group members and review them before assignment
|
||||
find /sys/kernel/iommu_groups/ -type l | sort -V`}
|
||||
className="my-4"
|
||||
/>
|
||||
|
||||
@@ -397,17 +364,13 @@ reboot`}
|
||||
|
||||
<h2 className="text-2xl font-semibold mt-10 mb-4 text-gray-900">{t("verification.heading")}</h2>
|
||||
<CopyableCode
|
||||
code={`# Confirm the GPU is bound to the driver you expect
|
||||
lspci -nnk -d <vendor:device>
|
||||
# Expected (LXC mode): "Kernel driver in use: nvidia" (or amdgpu, i915)
|
||||
# Expected (VM mode): "Kernel driver in use: vfio-pci"
|
||||
code={`# Inspect the selected PCI address (replace this example)
|
||||
lspci -nnk -s 0000:01:00.0
|
||||
# LXC mode: the supported native driver should own the card
|
||||
# VM mode: vfio-pci should own the card
|
||||
|
||||
# LXC mode — is the host tool happy?
|
||||
nvidia-smi # if NVIDIA
|
||||
intel_gpu_top # if Intel iGPU
|
||||
|
||||
# VM mode — ready to be claimed by a VM start
|
||||
lsmod | grep vfio`}
|
||||
# NVIDIA userspace/module consistency check
|
||||
nvidia-smi`}
|
||||
className="my-4"
|
||||
/>
|
||||
|
||||
@@ -421,9 +384,10 @@ lsmod | grep vfio`}
|
||||
{t.rich("troubleshoot.vmFailBody", { code, em })}
|
||||
</Callout>
|
||||
<CopyableCode
|
||||
code={`# Delete every hostpci line for the GPU slot
|
||||
sed -E -i '/^hostpci[0-9]+:[[:space:]]*(0000:)?<slot>\\.[0-7]([,[:space:]]|$)/d' \\
|
||||
/etc/pve/qemu-server/<vmid>.conf`}
|
||||
code={`# Inspect the VM configuration; replace VMID with the numeric ID
|
||||
qm config VMID
|
||||
# With the VM stopped, remove only the obsolete PCI assignment
|
||||
# in the Proxmox Hardware panel, after identifying its hostpci entry`}
|
||||
className="my-4"
|
||||
/>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user