PVE教程

Proxmox VE (PVE) All-in-One 搭建教程

最近整了一个 N100 的小主机,准备搞个 PVE 试试。这篇文章记录从安装宿主机,到部署爱快、iStoreOS/OpenWrt,再到换源、PCI 直通和核显 SR-IOV 的完整过程。

2026-10-01 更新:补全原教程中的存储调整、订阅提示处理、温度显示、软件源和 SR-IOV 安装与卸载步骤,同时区分新旧版本。当前 PVE 9.2 基于 Debian 13.5 “Trixie”,默认稳定内核为 Linux 7.0;旧节点不要直接套用新版仓库或驱动命令。版本信息参考 PVE 9.2 官方发布说明。

阅读前先确认环境

本文命令在 PVE 宿主机的 Shell/SSH 中执行,除非特别注明“在虚拟机内执行”。代码块中的 IP、虚拟机 ID、文件名和 PCI 地址都是示例,需要按实际环境替换;text 代码块是配置文件内容,不能当作 Shell 命令运行。

先记录节点版本和存储状态:

1
2
3
4
5
6
pveversion -v
uname -r
cat /etc/os-release
pvesm status
lsblk -f
lvs -a
PVE 主版本 Debian 基础系统 软件源代号 配置说明
PVE 9 Debian 13 trixie 优先使用 deb822 .sources 格式
PVE 8 Debian 12 bookworm 常见为 .list,不能混入 trixie
PVE 7 Debian 11 bullseye 本文保留历史配置,不作为新安装方案
PVE 6 Debian 10 buster 本文保留历史配置,不作为新安装方案

开始前准备好来宾备份、配置备份和本地显示器/键盘。尤其是软路由 All-in-One:PVE 关机或路由虚拟机启动失败时,家里网络也可能中断;不要让恢复过程完全依赖这台虚拟机提供的网络。

一、安装 Proxmox VE

1. 硬件与系统准备

以下是 N100 家用实验环境的参考配置,并非 Proxmox 的官方最低要求:

  • CPU:支持 Intel VT-x/AMD-V 的 64 位处理器;PCI 直通还需要 VT-d/AMD IOMMU。
  • 内存:至少 8GB,运行多台虚拟机时建议 16GB 或更多。
  • 存储:至少 120GB SSD;系统、虚拟磁盘、下载文件和备份尽量分开规划。
  • 网络:至少一个网口;主路由用途建议有独立 WAN/LAN 网口,并保留宿主机管理通道。

从 Proxmox VE 官方下载页 获取 ISO,按下载页提供的校验值核对。N100 使用 x86-64 镜像,不要选 ARM64 镜像。

使用 Rufus 或 BalenaEtcher 制作启动 U 盘。写入会清空 U 盘,先确认设备选对。

2. 安装与网络设置

  1. 进入 BIOS/UEFI,开启 CPU 虚拟化;需要直通时同时开启 VT-d/IOMMU。启动菜单按键因主板而异,常见为 Delete、F2 或 F12。
  2. 从 U 盘启动,进入 Proxmox VE 安装器,同意许可协议。
  3. 选择目标磁盘与文件系统。安装会清空目标盘;本文后面的 pve/data 调整只针对默认 LVM/LVM-thin 布局,不适用于 ZFS。
  4. 设置国家、时区、键盘布局、root 密码和管理员邮箱。
  5. 配置管理网卡、主机名、静态 IP、网关及 DNS。

本文统一使用以下网络示例,实际使用时替换为自己的网段:

设备/用途 示例地址 说明
主路由 LAN 192.168.1.1/24 可以是现有路由器,或之后的爱快虚拟机
PVE 宿主机 192.168.1.100/24 管理地址,避免与 DHCP 地址池冲突
iStoreOS/OpenWrt 旁路由 192.168.1.2/24 与主路由、PVE 不重复
PVE/旁路由默认网关 192.168.1.1 指向主路由,不指向自己

主机名可设置为 pve.lab;DNS 可先使用能够访问的本地 DNS 或公共 DNS,例如 223.5.5.5、119.29.29.29。安装阶段先让 PVE 接入现有正常联网的路由器,等路由虚拟机配置完成后再切换网络。

安装完成后拔出 U 盘并重启。在同网段电脑打开 https://192.168.1.100:8006,选择 Linux PAM standard authentication,使用 root 登录。默认自签名证书会触发浏览器警告,确认访问的确实是自己的节点后再继续。

3. 更新系统与仓库

先在“节点 → 更新 → 软件源(Repositories)”确认现有条目:

  • 有有效订阅:使用企业仓库。
  • 无订阅的家庭实验室:停用企业仓库,启用 pve-no-subscription;该仓库不是企业仓库的同等稳定性替代。
  • Debian 基础仓库不能删除;Ceph 仓库是否启用取决于是否实际部署 Ceph。

PVE 9 在 /etc/apt/sources.list.d/proxmox.sources 中使用如下官方无订阅仓库,已存在等价条目时不要重复添加:

1
2
3
4
5
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg

对于没有订阅的节点,可在软件源界面禁用企业条目;手工编辑企业 .sources 时可在对应 stanza 中加入 Enabled: no。国内镜像和 PVE 8 的具体配置见后面的“软件源与模板下载源”一节。

源配置完成后分步更新,先处理 apt update 报错,再决定是否升级:

1
2
3
apt update
apt list --upgradable
apt dist-upgrade

不建议首次操作就加 -y 自动确认。内核更新后可能需要重启,使用 DG1、核显 SR-IOV 或其他 DKMS 模块的节点,还要先确认驱动与目标内核兼容。参考 Proxmox 系统管理文档。

4. 调整 local/local-lvm 存储(可选)

原教程所谓“给 PVE 扩容”,实际是:**删除默认的 LVM-thin 池 pve/data,把释放的空间交给根分区 pve/root**。这不是增加物理硬盘容量,也不是无损合并存储。

存储 默认用途 调整后的变化
local /var/lib/vz,通常放 ISO、模板、备份 根分区扩大后,该目录可使用更多空间
local-lvm pve/data 中的虚拟机磁盘和容器磁盘 删除薄池后,这个存储不能继续使用

仅适合确认没有任何来宾磁盘、没有其他用途的新装空节点。lvremove pve/data 会删除整个薄池及其中数据,不能靠重新添加存储条目恢复。已有虚拟机/容器时,先备份并迁移,通常保留 local-lvm 更省事。ZFS、独立数据盘、自定义 LVM 布局不要套用以下命令。

先在 PVE 界面检查所有虚拟机和容器的磁盘位置,再查看:

1
2
3
pvesm list local-lvm
lvs -a -o lv_name,vg_name,lv_size,lv_attr,data_percent,metadata_percent
findmnt /

确认薄池为空、根卷确为 pve/root,并理解删除后果后,依次执行;不要一次性粘贴两条跳过检查:

1
lvremove pve/data

按提示确认删除成功后,再将该卷组的剩余空闲空间扩给根卷,并同步扩文件系统:

1
lvextend -l +100%FREE -r pve/root

+100%FREE 表示分配卷组里全部剩余空闲空间;希望预留 LVM 空间时不要使用这个参数。

然后在 Web 界面:

  1. “数据中心 → 存储 → local-lvm → 移除”,删除已经失效的配置条目。
  2. 编辑 local,保留 ISO、容器模板、备份等已有用途;需要在这里存放虚拟机或容器磁盘时,再勾选“磁盘映像”和“容器”。
  3. 查看节点磁盘空间,确认后续创建虚拟机时选择的是实际存在的存储。

不必把所有内容类型都勾上。LVM-thin 支持的快照、克隆和稀疏置备方式,与目录存储不同;目录存储中的 qcow2 虚拟磁盘仍可支持部分快照操作,不能简单理解为“移除 local-lvm 后所有快照都不能用”。存储规划参考 PVE 存储文档。

5. 无有效订阅提示(可选、旧版方法)

这个提示不妨碍家庭实验室正常使用。切换到无订阅仓库与隐藏提示是两件事;下面的修改只改变前端提示,不会获得订阅或企业仓库授权。

原教程的两组命令保留如下,仅作为对应旧版的可选记录,不保证适用于当前补丁版本,更不要直接用于 PVE 9。它们修改安装包文件,升级后可能被覆盖;重复运行还可能覆盖旧备份。

展开 PVE 6.3~8 的历史提示处理方法

操作前先单独保存一份原文件,确认备份名尚未使用;已有备份时换一个文件名,不要覆盖:

1
cp -a /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.before-popup

PVE 6.3~7.x 原方法:

1
2
sed -Ezi.bak "s/(Ext.Msg.show\(\{\s+title: gettext\('No valid sub)/void\(\{ \/\/\1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy.service

PVE 8.x 原方法:

1
2
sed -i.backup -z "s/res === null || res === undefined || \!res || res\n\t\t\t.data.status.toLowerCase() \!== 'active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy.service

两种方法只选适用的一种。服务重启会短暂影响 Web 访问;刷新浏览器缓存后查看页面。如果页面异常且期间未升级这个软件包,用自己操作前的备份恢复:

1
2
cp -a /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.before-popup /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy.service

如果期间已经升级,不要把旧版 JavaScript 覆盖回新版;应恢复与当前软件包版本对应的文件。生产环境建议购买订阅,而不是维护前端补丁。

6. 开启 PCI 直通(可选)

直通前先在 BIOS/UEFI 开启 VT-d/AMD IOMMU,保留本地控制台和管理网卡。宿主机唯一的管理网卡、系统盘控制器不能直接交给虚拟机。同一个设备也不能同时被宿主机和虚拟机占用。

6.1 识别实际引导方式

不能只根据“用了 UEFI”判断是否使用 GRUB;先查看:

1
2
efibootmgr -v
proxmox-boot-tool status

EFI 启动项要结合 BootCurrent 判断:grubx64.efi 或 shimx64.efi 通常对应 GRUB,systemd-bootx64.efi 对应 systemd-boot;传统 BIOS 安装一般使用 GRUB。proxmox-boot-tool status 可辅助了解启动分区,但不能单独证明当前引导器类型。

6.2 配置 IOMMU 参数

GRUB 节点:

1
2
cp -a /etc/default/grub /etc/default/grub.before-passthrough
nano /etc/default/grub

把需要的参数合并到现有 GRUB_CMDLINE_LINUX_DEFAULT,不要用 sed 覆盖整行,避免丢失原有参数。以下是只有 quiet 时的示例,Intel 与 AMD 二选一:

1
2
3
4
5
# Intel
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

# AMD
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"

保存后执行:

1
update-grub

systemd-boot 节点:

1
2
cp -a /etc/kernel/cmdline /etc/kernel/cmdline.before-passthrough
nano /etc/kernel/cmdline

这个文件的参数放在同一行,保留原有 root=、ZFS 等内容,只追加 Intel 的 intel_iommu=on iommu=pt 或 AMD 的 amd_iommu=on iommu=pt。保存后执行:

1
proxmox-boot-tool refresh

原教程中的 pcie_acs_override=downstream 不再默认加入。它可能让分组看似被拆开,却不能提供真实硬件隔离;只有明确理解设备和隔离风险时才考虑,不要用它掩盖不适合直通的 IOMMU Group。

6.3 加载 VFIO 模块

备份并编辑 /etc/modules,已有模块不要重复添加:

1
2
cp -a /etc/modules /etc/modules.before-passthrough
nano /etc/modules

加入:

1
2
3
vfio
vfio_iommu_type1
vfio_pci

原教程的 vfio_virqfd 在新内核中已并入 VFIO;PVE 8/9 的新内核不要继续添加。仍使用旧内核时先确认模块是否存在。

更新 initramfs,再安排重启:

1
2
update-initramfs -u -k all
reboot

6.4 查看分组并添加设备

重启后在宿主机查看:

1
2
3
4
cat /proc/cmdline
dmesg | grep -Ei 'DMAR|IOMMU'
find /sys/kernel/iommu_groups/ -type l
lspci -nnk

确认 IOMMU 生效、设备与必须保留给宿主机的设备没有不可分离的分组关系。关闭目标虚拟机,在“硬件 → 添加 → PCI 设备”中按 PCI 地址选择网卡/显卡等设备;启用 PCI-Express 时通常需要 q35 机型,具体按设备及官方文档调整。

部分设备需要提前绑定 vfio-pci。不要在不了解影响时给所有同型号网卡统一绑定同一个 vendor/device ID,否则管理网卡也可能被一起接管。绑定、复位和设备专有参数参考 Proxmox PCI(e) Passthrough。

如果配置导致无法启动,可从引导菜单临时移除新增参数,进入系统后恢复自己保存的配置,并按引导方式重新生成配置和 initramfs。

二、安装路由虚拟机

1. 安装 iKuai(爱快,主路由)

从 爱快官方下载页 下载 x86-64 ISO。以下按原教程使用的 3.x 系列说明;官方已提供其他主版本,安装与升级前阅读对应说明,不要默认跨主版本可以降级。

  1. 在 PVE 的 local 存储中上传 ISO,创建虚拟机并挂载镜像。
  2. CPU、内存和硬盘按固件要求及流量规模分配;官方 64 位版本页面要求至少 4GB 内存。首次安装先使用兼容的虚拟硬件。
  3. 给虚拟机配置 WAN/LAN 两侧网络。可以直通独立网卡,也可以使用连接不同物理网口的独立桥接;WAN 与 LAN 不要误接到同一个无 VLAN 隔离的二层网络。
  4. 从 ISO 启动,按爱快安装界面完成写盘,关机后移除安装光盘,再从虚拟硬盘启动。
  5. 在控制台确认网卡编号和物理端口对应关系,设置 LAN 为 192.168.1.1/24。官方 3.x 下载页列出的初始管理地址为 192.168.9.1,与本文示例不同,需要先调整。
  6. 浏览器打开 LAN 管理地址。3.x 默认用户名/密码为 admin/admin,首次登录后立即修改。
  7. WAN 根据实际接入方式选择 PPPoE、DHCP 或静态地址;静态 WAN 的网关是上游网关,不能笼统设成自己的 LAN 地址。DNS 可用 223.5.5.5、119.29.29.29。

PVE 管理桥应接 LAN 一侧,保留管理 IP 192.168.1.100。不要把唯一承载 PVE 管理连接的物理网卡直接直通走。

网络排查可以从 PVE Shell 或支持 ping 的来宾控制台分开检查 IP 连通与 DNS:

1
2
ping -c 4 223.5.5.5
ping -c 4 baidu.com

能 ping IP、不能解析域名时先查 DNS;两者都不通时先查 WAN、网关和桥接。路由可用后,再设置虚拟机“开机自启动”和启动顺序,给依赖网络的其他来宾留出启动等待时间。

2. 安装 iStoreOS/OpenWrt(旁路由)

N100 选择 x86-64 镜像。combined-efi.img 应配 OVMF/UEFI,普通 BIOS 镜像通常配 SeaBIOS;虚拟机的启动方式要与镜像匹配。不要把用于已有系统升级的文件误当作首次安装的整盘镜像。

2.1 创建空虚拟机并导入磁盘

  1. 创建一台空虚拟机,例如 VMID 102;不挂载 ISO,删除创建向导自动添加的空硬盘,避免后面误从空盘启动。
  2. 按镜像选择 BIOS/UEFI;使用 OVMF 时按需添加 EFI 磁盘,并确认 Secure Boot 设置与固件兼容。
  3. 添加连接 LAN 桥的虚拟网卡,分配 CPU/内存。
  4. 将镜像上传到 PVE,例如 /root/istoreos.img.gz;.gz 文件先解压,再导入。
1
2
# 保留压缩包,将解压后的 .img 留在同目录
gzip -dk /root/istoreos.img.gz

使用 local-lvm 存放磁盘时:

1
qm disk import 102 /root/istoreos.img local-lvm

如果前面删除了 local-lvm,且已经给 local 开启“磁盘映像”内容类型,可改为目录存储:

1
qm disk import 102 /root/istoreos.img local --format qcow2

以上二选一,不能两条都执行。qm importdisk 是原教程的同用途命令别名;local-lvm 是完整存储名称,不是给导入命令追加 -lvm 参数。文件名不是 istoreos.img 时,替换为实际解压后的完整路径。

导入成功后还有两步:

  1. 回到“虚拟机 → 硬件”,双击“未使用的磁盘(Unused Disk)”,选择固件支持的 SATA/SCSI/VirtIO 总线并添加;不确定时先按对应固件的虚拟机指南选兼容方式。
  2. 在“选项 → 引导顺序”中启用并优先选择这块磁盘,再启动虚拟机。

只运行导入命令并不会自动挂载磁盘或设置启动顺序。操作说明参考 Proxmox 虚拟机迁移与磁盘导入。

2.2 配置管理地址和旁路由

iStoreOS:在来宾控制台内使用原教程的配置工具,而不是在 PVE 宿主机运行:

1
quickstart

根据向导调整 LAN 地址;也可以从 Web 界面的网络向导选择旁路由模式。常见官方固件初始用户为 root、密码为 password,不是 admin;实际仍以下载版本说明为准,登录后立即改密码。设备版本的默认地址不尽相同,可先从来宾控制台或主路由 DHCP 列表确认。

原版 OpenWrt:没有通用的 quickstart 命令。初始用户为 root,通常没有初始密码;先设置密码,再通过 LuCI 或 UCI 修改 LAN。初始 LAN 地址常为 192.168.1.1,会与本文主路由冲突,首次启动时先隔离配置,再接入现有 LAN。参考 OpenWrt 首次登录说明。

以旁路由 192.168.1.2/24 为例:

  • 旁路由自身默认网关设置为主路由 192.168.1.1,DNS 使用能正常工作的服务器。
  • 由主路由提供 DHCP 时,关闭旁路由 DHCP,避免同网段两台设备争抢地址分配。
  • 需要经过旁路由处理的客户端,将网关/DNS 按具体方案指向旁路由;只配置旁路由自身网关,并不会让所有客户端自动经过它。
  • 主路由与旁路由不能把默认路由互相指向对方,避免环路;IPv6 也要按所选方案单独规划。

原教程的 iStoreOS 插件目录 保留作为第三方资源。优先使用官方 iStore,第三方包要匹配固件架构、发行版本和依赖;不要在不同 OpenWrt/iStoreOS 版本间混装。

三、软件源与模板下载源

换源前先让 PVE 正常联网。更换镜像地址、更新软件包、升级 PVE 主版本是三个不同操作,不要把它们当成一个步骤执行。

原教程提醒 DG1 直通用户谨慎更新,这一点保留:单纯改镜像域名通常不会改变驱动,但后续内核、固件、Mesa 或 DKMS 更新可能影响 DG1/核显硬解。保存能正常工作的内核和配置,确认目标版本兼容后再升级。

可参考镜像站自己的帮助页,清华与中科大选择一个即可:

1. 备份现有 APT 配置

保存当前 Debian、PVE 和 Ceph 源,备份目录使用时间戳,避免覆盖上次备份:

1
2
3
4
5
6
apt_backup="/root/apt-sources-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$apt_backup"
cp -a /etc/apt/sources.list.d "$apt_backup/"
if [ -f /etc/apt/sources.list ]; then
cp -a /etc/apt/sources.list "$apt_backup/"
fi

确认自己修改的是哪个文件,不要在 sources.list、.list、.sources 中重复启用相同仓库,也不要把企业和无订阅源同时当作默认方案。

2. PVE 9 / Debian 13

2.1 Debian 基础源

编辑现有 /etc/apt/sources.list.d/debian.sources,清华镜像示例如下。保留实际节点需要的组件,不要另外创建重复源:

1
2
3
4
5
6
7
8
9
10
11
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/debian
Suites: trixie trixie-updates
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/debian-security
Suites: trixie-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

如选择中科大,仅将上面两处镜像域名换为 mirrors.ustc.edu.cn。Debian 安全更新条目不可漏掉,也不要为了换源随手启用 backports。

2.2 PVE 无订阅源

编辑 /etc/apt/sources.list.d/proxmox.sources:

1
2
3
4
5
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg

中科大的等价 URI 为 https://mirrors.ustc.edu.cn/proxmox/debian/pve,只替换 URI,不要同时添加第二份。密钥使用 PVE 已安装的官方归档密钥,不能用 trusted=yes 或关闭签名检查来绕过错误。

没有订阅时,禁用对应企业 .sources 条目;不要把 PVE 8 的 pve-enterprise.list 当作所有 PVE 9 节点的固定文件名。

2.3 Ceph 源与 401 错误

遇到 401 Unauthorized,先看报错 URL 属于 PVE 企业源还是 Ceph 企业源,再处理对应文件:

  • 没有使用 Ceph:可以在软件源界面禁用不需要的 Ceph 企业仓库。
  • 已经使用 Ceph:选择与当前 Ceph 版本匹配的仓库,不能把源全部关掉后继续升级。
  • 有订阅:排查订阅有效性和仓库配置,不应直接替换为无订阅源。

PVE 9.2 的 Ceph 选项包含 Tentacle 20.2 和 Squid 19.2;本文不提供通用“一键切 Ceph 版本”命令。使用 Ceph 的节点先查看 ceph --version,按官方升级路径及镜像站说明配置对应 release,不能沿用旧版 ceph-quincy bookworm。

3. PVE 8 / Debian 12

以下适合仍在维护的 PVE 8 节点,不是把 PVE 9 降级的办法。

编辑 /etc/apt/sources.list,将原条目注释或替换为同一套镜像。清华示例:

1
2
3
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware

中科大示例,二选一:

1
2
3
deb https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware

原教程还列出 bookworm-backports;只有明确需要其中的软件包时才添加相同镜像的 bookworm-backports 条目,不是 PVE 更新的必需源。

无订阅时,编辑 /etc/apt/sources.list.d/pve-enterprise.list,在企业源的 deb 行前加 #。再编辑或创建 /etc/apt/sources.list.d/pve-no-subscription.list,填写一种:

1
2
3
4
5
6
7
8
# 官方
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription

# 或清华
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bookworm pve-no-subscription

# 或中科大
deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bookworm pve-no-subscription

只保留一个有效的 deb 行,其他示例删除或注释。使用 nano 时,Ctrl+O 保存、回车确认文件名,Ctrl+X 退出。

原教程通过编辑 /etc/apt/sources.list.d/ceph.list 处理 Ceph 企业源 401,这个入口保留,但仓库内容要匹配实际版本。原来的这一行仅对应旧的 Quincy/Bookworm 环境:

1
deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription

不能将它作为所有 PVE 8 节点的通用修复;已运行 Reef/Squid 等版本时,查对应文档,不要退回 Quincy 仓库。未使用 Ceph 的节点可以禁用不需要的条目。

4. PVE 6/7 历史换源记录

这部分用于对照原教程和旧节点配置。旧发行版仓库可能归档或不再提供安全更新,镜像可用性以帮助页为准;新安装不要选择这些版本。以下每个代码块都是文件内容。

展开 PVE 6 / Buster 的原镜像记录

原文件备份与编辑入口:

1
2
cp -a /etc/apt/sources.list /etc/apt/sources.list_bak
nano /etc/apt/sources.list

备份文件已存在时先换名称。原清华配置如下,PVE 条目沿用旧镜像路径,仅供辨认历史配置:

1
2
3
4
5
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian buster pve-no-subscription

如果在线镜像已不提供这些条目,应按归档说明处理并规划迁移,不要把代号改成 trixie 强行升级。

展开 PVE 7 / Bullseye 的镜像配置

清华:

1
2
3
4
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bullseye pve-no-subscription

中科大,二选一:

1
2
3
4
deb https://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free
deb https://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free
deb https://mirrors.ustc.edu.cn/debian-security bullseye-security main contrib non-free
deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bullseye pve-no-subscription

原教程的 PVE 条目使用 /proxmox/debian 旧路径,现按镜像帮助页使用 /proxmox/debian/pve。原先的 bullseye-backports 不再作为默认条目;维护旧节点前检查其归档状态。

5. 更新与重启

完成所用版本的源配置后:

1
2
3
apt update
apt list --upgradable
apt dist-upgrade

先读报错再继续。出现 401 查订阅仓库,404 查路径与发行代号,签名错误查官方密钥与系统时间;不要用关闭安全检查或盲目注释基础源来掩盖问题。

如果更新了内核,确认直通/DKMS 驱动准备好后,再安排重启。软路由节点提前考虑重启期间的断网和管理入口。

6. LXC 容器模板下载换源(可选)

原教程的 APLInfo.pm 方法可以保留,但它是修改软件包文件,不是稳定的官方配置接口。清华和中科大帮助页仍提供这种模板下载源调整方法;只有文件存在、内容与示例匹配时才操作。

先查看源地址并备份,备份名称不要与旧文件冲突:

1
2
grep -n 'download.proxmox.com' /usr/share/perl5/PVE/APLInfo.pm
cp -a /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back

二选一替换:

1
2
# 清华
sed -i 's|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
1
2
# 或中科大
sed -i 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm

如果文件里的原地址已改变,不要照搬替换表达式,应按当前镜像帮助页处理。重启服务并刷新模板列表:

1
2
3
systemctl restart pvedaemon.service
pveam update
pveam available

通常无需为此专门重启整个 PVE。pve-manager 升级可能覆盖该修改;需要回退且期间没有升级时,恢复本次备份并重启服务:

1
2
cp -a /usr/share/perl5/PVE/APLInfo.pm_back /usr/share/perl5/PVE/APLInfo.pm
systemctl restart pvedaemon.service

7. CPU、主板和硬盘温度显示(可选)

原教程的温度美化来自 恩山分享帖,使用 PVE-manager-status 项目,可显示 CPU 频率、温度及 NVMe/其他硬盘信息;具体能显示哪些传感器取决于硬件与驱动。

如果只想查看温度,可以先用命令行,不必修改 Web 界面:

1
2
apt install lm-sensors
sensors

原脚本会修改 Nodes.pm、pvemanagerlib.js、proxmoxlib.js。当前源码中的脚本版本标记为 2023.9.5,不能据此认定已兼容 PVE 9;只在确认适配自己节点的版本后使用。不要把网络脚本直接交给 root 执行,先下载和审阅:

1
2
curl -fL -o /tmp/pve-showtempcpufreq.sh https://raw.githubusercontent.com/a904055262/PVE-manager-status/main/showtempcpufreq.sh
less /tmp/pve-showtempcpufreq.sh

明确接受其修改、确认版本兼容,并单独备份上述三个文件后,才使用原教程的重新修改模式:

1
2
chmod +x /tmp/pve-showtempcpufreq.sh
/tmp/pve-showtempcpufreq.sh remod

原先的 mirror.ghproxy.com 备用下载不再写进自动执行链;访问失败时从项目源码页获取可信文件,不要随便更换转发站。

该脚本还提供恢复入口:

1
/tmp/pve-showtempcpufreq.sh restore

恢复依赖脚本保存的版本备份,升级后不能保证仍可回退;保留手工备份,且不要向新版软件包覆盖旧版文件。页面异常时先恢复再排查,并刷新浏览器缓存。

四、开启核显 SR-IOV(可选)

项目地址:strongtz/i915-sriov-dkms。

SR-IOV 将受支持的核显划分成多个虚拟功能(VF),供不同虚拟机使用。它与“把整块核显直通给一台虚拟机”不同,也不是所有 Intel 核显都支持。N100 等机器仍要核对实际设备 ID、项目支持情况和驱动版本。

这是社区维护的高度实验性内核模块,并非 Intel 或 Proxmox 官方组件。错误的内核/驱动组合可能造成黑屏、无法启动或宿主机不稳定。操作前备份来宾与配置,保留旧内核、SSH 和本地控制台;不要在唯一承担家庭联网的节点上无回退地尝试。

以下以 i915 路线为例。项目同时支持部分 xe 路线,但参数与适用设备不同,不能把两套配置混用。

1. 选择与运行内核匹配的驱动

先记录:

1
2
3
4
pveversion -v
uname -r
lspci -Dnn | grep -Ei 'VGA|Display'
dkms status

截至 2026-10-01,项目 README 给出的版本范围为:

正在运行的内核 项目提供的选择
6.18~7.2 2026.09.16
6.12~6.19 2026.03.05.7
6.8~6.12 2025.07.22
6.1~6.7 intel-lts-v6.1 分支

范围重叠时,不仅看内核数字,也要读对应 release 的设备支持与已知问题。后续版本以 项目 README 和 Releases 为准;不能只根据“PVE 8/PVE 9”猜驱动版本。

安装编译依赖及当前运行内核的头文件:

1
2
3
apt update
apt install build-essential dkms git sysfsutils
apt install "proxmox-headers-$(uname -r)"

部分旧 PVE 内核的头文件包名使用 pve-headers-$(uname -r);先查询与 uname -r 完全匹配的包。找不到头文件时先解决仓库/内核问题,不能拿另一内核的 headers 凑数。

原教程安装 proxmox-kernel-$(uname -r)、最新版主分支和 build-* 的写法不再照搬:已有运行内核不需要为编译模块重复安装同名内核包,依赖使用明确的 build-essential。升级默认内核是单独的维护决策,不应藏在驱动依赖安装步骤里。

2. 安装驱动:软件包或源码二选一

2.1 从 Release 安装 .deb

下面是运行内核符合 2026.09.16 范围时的具体示例,旧内核先改选兼容发布版:

1
2
3
wget -O /tmp/i915-sriov-dkms_2026.09.16_amd64.deb "https://github.com/strongtz/i915-sriov-dkms/releases/download/2026.09.16/i915-sriov-dkms_2026.09.16_amd64.deb"
dpkg -i /tmp/i915-sriov-dkms_2026.09.16_amd64.deb
dkms status

如果依赖或编译失败,先处理第一处有效错误;不能安装报错后仍继续改启动参数。完整流程参考 项目 PVE 宿主机安装指南。

Secure Boot 开启时,外部 DKMS 模块可能需要签名及注册密钥,按 项目 Secure Boot 文档 操作;不要把关闭所有安全检查作为通用修复。

2.2 保留原教程的源码安装方法

适合需要固定源码版本或旧内核分支的情况。不要与 .deb 方法重复安装同一个模块,也不要直接 clone 不断变化的主分支后猜版本。

以下同样以 2026.09.16 为例,使用一个尚不存在的工作目录:

1
2
3
4
5
6
7
cd /root
git clone --branch 2026.09.16 --depth 1 https://github.com/strongtz/i915-sriov-dkms.git i915-sriov-dkms-2026.09.16
cd /root/i915-sriov-dkms-2026.09.16
grep -E 'PACKAGE_NAME|PACKAGE_VERSION' dkms.conf
dkms add .
dkms install -m i915-sriov-dkms -v 2026.09.16
dkms status

这里的版本号必须与 dkms.conf 和 dkms add 输出一致。原记录中的 2025.02.03 只是当时的示例,不能继续写死,也不需要默认加 --force。

编译需要一些时间。如果失败,可查看对应版本在 /var/lib/dkms/i915-sriov-dkms/ 下的编译日志;先确认 headers、编译错误与设备支持,再考虑是否更换版本。参考 项目手动安装指南。

原教程还提到 gitee.com/ifwwww/i915-sriov-dkms 镜像;这里保留这条资源说明,但不再默认使用。它不是项目的上游仓库,只有确认提交内容和所需 release 一致时才考虑,不能因为下载快就认定可信或兼容。

3. 配置启动参数

按前文识别的引导方式编辑对应文件,并保存单独备份。i915 路线的核心参数为:

1
intel_iommu=on i915.enable_guc=3 i915.max_vfs=7 module_blacklist=xe
  • intel_iommu=on:开启 Intel IOMMU。
  • i915.enable_guc=3:启用项目所需的 GuC 功能。
  • i915.max_vfs=7:设置最多可创建的 VF 数量,实际启用数量在下一步配置。
  • module_blacklist=xe:此处选择 i915 路线,避免被 xe 接管。已有 blacklist 参数时合并列表,不要创建互相冲突的重复参数。

GRUB:编辑 /etc/default/grub,合并到原有参数。例如原来只有 quiet 和 iommu=pt 时:

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt intel_iommu=on i915.enable_guc=3 i915.max_vfs=7 module_blacklist=xe"
1
2
update-grub
update-initramfs -u -k all

systemd-boot:在 /etc/kernel/cmdline 的原有同一行后追加参数,保留 root= 等内容,然后:

1
2
update-initramfs -u -k all
proxmox-boot-tool refresh

完成后重启到准备好的内核:

1
reboot

启动后确认实际参数、模块路径和 DKMS 状态:

1
2
3
4
5
cat /proc/cmdline
dkms status
modinfo -n i915
lspci -Dnnk -s 0000:00:02.0
dmesg | grep -Ei 'i915|GuC|SR-IOV'

0000:00:02.0 是示例,实际核显地址以 lspci 为准。不能只看到 VGA 设备名称就认定 SR-IOV 已完成。

从 2026.09.16 起,部分 Xe_LP(如 TGL/ADL/RPL)设备的 CCS 默认设置发生变化;如果 Windows VF 来宾遇到项目文档描述的 CCS 问题,按对应 release 考虑 i915.xelp_enable_ccs=1,而不是无条件给所有机器加上。

4. 创建并持久化 VF

以下假设核显 PF 确为 0000:00:02.0。先检查支持的总数与当前数量:

1
2
cat /sys/bus/pci/devices/0000:00:02.0/sriov_totalvfs
cat /sys/bus/pci/devices/0000:00:02.0/sriov_numvfs

在没有 VF 被虚拟机使用、当前数量为 0 时,临时创建 3 个 VF:

1
2
echo 3 > /sys/bus/pci/devices/0000:00:02.0/sriov_numvfs
lspci -Dnn | grep -Ei 'VGA|Display'

如果文件不存在、写入报错或支持数量不足,停下来查模块加载及设备支持,不要直接写持久化配置。变更已有 VF 数量前必须停掉使用它们的来宾,不能在线销毁正在使用的 VF。

确认临时创建成功后,备份并编辑 /etc/sysfs.conf,不要像旧教程一样用 > 覆盖整个文件:

1
2
cp -a /etc/sysfs.conf /etc/sysfs.conf.before-sriov
nano /etc/sysfs.conf

仅添加一条对应设备的配置,已有同一设备配置时修改原条目:

1
devices/pci0000:00/0000:00:02.0/sriov_numvfs = 3

如果核显位于其他 PCI 总线,整条 sysfs 路径也要按实际设备路径修改,不能只改最后的设备名。VF 数量不能超过 sriov_totalvfs 或前面 i915.max_vfs 设置的上限;多个 VF 共享物理核显资源,并不会变出多块独立 GPU 的性能。

安排重启后,再检查 sriov_numvfs 和设备列表。启用 3 个 VF 的示意输出:

1
2
3
4
0000:00:02.0 VGA compatible controller: Intel Corporation ...  # PF
0000:00:02.1 VGA compatible controller: Intel Corporation ... # VF 1
0000:00:02.2 VGA compatible controller: Intel Corporation ... # VF 2
0000:00:02.3 VGA compatible controller: Intel Corporation ... # VF 3

设备名称、类别和后缀按硬件及驱动变化,不要求与示例逐字一致。

5. 分配给虚拟机并安装来宾驱动

  1. 停止目标虚拟机。
  2. “硬件 → 添加 → PCI 设备”,只选择一个 VF,例如 0000:00:02.1。
  3. 不要选 PF 0000:00:02.0,也不要勾选会把 PF 和所有 VF 一起带走的“全部功能(All Functions)”。PF 被直通可能导致所有 VF 失效。
  4. 启动来宾,在来宾内安装相容的驱动,再检查硬解/计算应用是否识别设备。

宿主机出现 VF 只是第一步,不等于来宾已经能硬解。Linux 来宾需要按项目指南安装相容模块,Windows 来宾使用对应的 Intel 驱动和项目配置:

如果后续添加物理核显或 VF 的自动 VFIO 绑定规则,要按项目 VF 绑定说明 区分 PF/VF,避免把宿主机用于创建 VF 的 PF 一起绑定走。

6. 卸载与回退

6.1 先撤掉来宾分配和 VF 配置

先停止使用 VF 的虚拟机,从硬件配置中移除 VF,删除 /etc/sysfs.conf 中自己添加的那一条配置。没有 VF 被占用时可临时关闭:

1
echo 0 > /sys/bus/pci/devices/0000:00:02.0/sriov_numvfs

按实际地址执行;系统尚未创建 VF 时不必执行。不要直接恢复整份旧 sysfs.conf 覆盖之后新增的其他配置。

6.2 按安装方式卸载

通过 .deb 安装:

1
dpkg -P i915-sriov-dkms

通过源码手动注册 DKMS:

1
2
3
dkms status
# 版本号替换为实际安装版本;--all 移除该版本在所有内核上的构建
dkms remove -m i915-sriov-dkms -v 2026.09.16 --all

安装了多个手工版本时分别清理对应版本。dpkg -P 不能替代纯源码安装的卸载。原教程中的 pacman -R i915-sriov-dkms 属于 Arch Linux,不适用于 Debian/PVE,不能在宿主机使用。

6.3 移除参数并更新启动配置

从对应启动配置移除自己添加的 i915.enable_guc、i915.max_vfs、module_blacklist=xe 及可选 CCS 参数;如果还需要其他设备直通,可保留 intel_iommu=on 和 iommu=pt。

GRUB 节点:

1
2
3
update-grub
update-initramfs -u -k all
reboot

systemd-boot 节点:

1
2
3
update-initramfs -u -k all
proxmox-boot-tool refresh
reboot

6.4 无法正常启动时

优先在引导菜单选择之前可用的内核。如果所有可选内核都受模块影响,可临时追加 module_blacklist=i915,xe 启动(已有该参数时合并列表),进入系统后再卸载并修复配置。

GRUB 通常按 e 编辑启动项、Ctrl+X 或 F10 临时启动;systemd-boot 在允许编辑的环境下按 e 修改、回车启动。临时修改不会自动保存为永久配置。黑名单导致本地显示输出不可用时,通过预留的 SSH/管理通道处理;若仍不能进入系统,则需要救援介质,不能只依赖网页管理。

参考资料

本文保留原教程的实践路线和资源链接,涉及仓库、启动方式及驱动版本时以对应项目的现行说明为准:

  1. 波仔分享:PVE 安装教程
  2. 番茄科技:原教程参考文章
  3. Proxmox VE 9.2 发布说明
  4. Proxmox 系统管理与软件源
  5. Proxmox PCI(e) Passthrough
  6. 清华 Proxmox 镜像帮助
  7. 中科大 Proxmox 镜像帮助
  8. i915-sriov-dkms 项目与 PVE 安装指南

感谢原作者和各项目维护者的分享!