在低功耗 Homelab 界,畅网 N5105 软路由因其性价比和多网口设计成为热门选择。但在 PVE(Proxmox VE)虚拟化环境下,很多玩家在尝试将 NVMe 固态硬盘直通给群晖(DSM)虚拟机时,会遭遇两个痛点:
- 功耗飙升:一旦开启 PCIe 直通,主机的 ASPM(活动状态电源管理)往往失效,导致 CPU 无法进入深层 C 状态(C6/C10),整机待机功耗从 7W-8W 飙升至 15W 以上。
- 群晖无法识别:直通后的 NVMe 无法直接在群晖中创建存储空间,或者在 DSM 升级后丢失。
本文将提供一套完整的实操方案,帮助你在 PVE 8.x 下,既实现 NVMe 固态硬盘的物理直通(非虚拟盘映射),又完美保持 ASPM 节能特性的开启。
核心准备工作与逻辑
要实现“直通”与“节能”共存,必须遵循以下技术路径:
- 物理层:BIOS 中必须开启 PCIe ASPM 相关的全部控制权。
- 系统层(PVE):开启 IOMMU 支持,强制接管 PCIe 链路的电源管理。
- VM 层(群晖):采用 PCIe 物理设备直通,而非
qm set虚拟磁盘映射,确保 NVMe 控制器由群晖内核直接驱动。
第一阶段:主板 BIOS 关键设置
畅网 N5105 等工控主板的 BIOS 选项非常繁杂,必须确保以下开关打开。
- 开启虚拟化与直通:
- 进入
Advanced->CPU Configuration,将Intel (VMX) Virtualization Technology(即 VT-x)设为 Enabled。 - 进入
System Agent (SA) Configuration,将VT-d设为 Enabled。
- 进入
- 开启 ASPM 节能:
- 进入
Advanced->PCI Express Configuration。 - 将
ASPM或Active State Power Management设为 Auto 或 Enabled(建议选择 L1 或 L1.1/L1.2 Substates,若有)。 - 将
DMI Link ASPM Control设为 Enabled。 - 将
PEG ASPM设为 Enabled。
- 进入
保存并重启。
第二阶段:PVE 主机配置(开启 IOMMU 与强制 ASPM)
由于 N5105 平台的 PCIe 链路在设备直通(VFIO-PCI)时,PVE 默认内核策略可能会关闭该链路的 ASPM。我们需要通过内核参数强制开启。
1. 修改 GRUB / systemd-boot 配置文件
根据你的 PVE 安装模式,修改对应的引导文件。
若为 GRUB 引导(大多数默认安装):
nano /etc/default/grub
找到 GRUB_CMDLINE_LINUX_DEFAULT 这一行,修改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_aspm=force"
注意:
pcie_aspm=force是强制开启 ASPM 的核心参数,即使设备声称不支持,内核也会尝试配置。
保存退出后,更新 GRUB:
update-grub
若为 systemd-boot 引导(UEFI 且使用 ZFS 安装):
nano /etc/kernel/cmdline
在末尾追加:
intel_iommu=on iommu=pt pcie_aspm=force
保存后执行更新:
proxmox-boot-tool refresh
2. 加载直通内核模块
编辑内核模块配置文件:
nano /etc/modules
在文件末尾添加以下四行,确保 VFIO 驱动正常加载:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
保存并重启 PVE 主机。
第三阶段:将 NVMe 绑定给 VFIO 防止 PVE 抢占
在直通给群晖之前,必须阻止 PVE 主机驱动加载该 NVMe。
查找 NVMe 的 PCI 地址:
运行命令:lspci -nn | grep -i nvme输出类似于:
01:00.0 Non-Volatile memory controller [0108]: Kingston Technology Company, Inc. NV2 SSD [144d:a80a] (rev 01)这里的
01:00.0是 PCIe 地址,144d:a80a是设备的 Vendor ID 和 Device ID。绑定到 vfio-pci:
创建或修改/etc/modprobe.d/vfio.conf:nano /etc/modprobe.d/vfio.conf写入以下内容(替换为你自己的硬件 ID):
options vfio-pci ids=144d:a80a更新 initramfs:
update-initramfs -u -k all再次重启 PVE。
第四阶段:群晖 VM 配置与直通
为了获得最佳的稳定性和 ASPM 表现,群晖虚拟机(建议使用基于 SA6400 或 DS920+ 引导的 DSM 7.2+)必须采用 q35 架构。
- VM 硬件基础设置:
- 机型(Machine):选择
q35。 - BIOS:选择
OVMF (UEFI)。
- 机型(Machine):选择
- 添加 PCIe 设备:
- 点击 添加 (Add) -> PCI 设备 (PCI Device)。
- 选择你之前查看到的 NVMe 控制器(例如
01:00.0)。 - 勾选 所有功能 (All Functions)。
- 勾选 PCI-Express(核心步骤:只有勾选此项,虚拟机构架才会以 PCIe 协议向客户机呈现,ASPM 的状态协调才不会被 PVE 截断)。
第五阶段:ASPM 状态深度验证(避坑关键)
完成上述设置后,我们需要在 PVE 宿主机和群晖 VM 中,验证 ASPM 是否真正生效,以及整机功耗是否下降。
1. 验证 PVE 宿主机的 ASPM 状态
在 PVE Shell 中运行以下命令,查看 NVMe 所在的 PCIe 根端口及设备本身的 ASPM 开启情况:
lspci -vvv | grep -i -A 10 "aspm"
在输出的大量信息中,寻找你的 NVMe 设备(如 01:00.0)和其上游桥接设备(Root Port,如 00:1c.0)。
- 合格状态:
若看到LnkCap: Port #0, Speed 8GT/s, Width x4, ASPM L1, Exit Latency L1 <64us且LnkCtl: ASPM L1 Enabled;,说明 L1 节能已成功开启。 - 不合格状态:
若显示LnkCtl: ASPM Disabled,说明节能未生效。此时需检查 BIOS 中OS Controlled ASPM是否开启,以及pcie_aspm=force是否正确加载。
2. 通过 PowerTOP 查看 CPU 运行状态
安装电源管理工具:
apt install powertop -y
powertop
切换到 Idle stats 选项卡。观察 Package 的 C-states。
- 如果 CPU 能够进入 C6 甚至 C8/C10 状态,且占比在 50% 以上,说明 ASPM 链条没有断,整机待机功耗应在 6W - 9W 之间(取决于外部接了几路网线和 SATA 硬盘)。
- 如果 CPU 锁死在 C2 或 C3 状态,说明有直通设备的 PCIe 链路阻碍了 CPU 降频,需重新检查 NVMe 设备的直通属性是否勾选了
PCI-Express。
第六阶段:群晖 DSM 内的 NVMe 存储池建立
直通成功后,进入群晖 DSM 系统。
打开 存储空间管理员,你应该能在 HDD/SSD 页面直接看到这块直通的 NVMe 固态硬盘(显示为插在 PCIe 插槽上,带有完整的 S.M.A.R.T 信息)。
解除群晖非官方硬盘限制(针对 DSM 7.2 及以上):
如果群晖提示“非官方支持的固态硬盘”而不允许创建存储池,可通过 SSH 连接到群晖,运行第三方经典脚本syno_hdd_db解决。SSH 登录群晖后切换到 root:
sudo -i wget https://github.com/007revad/Synology_HDD_db/archive/refs/heads/main.zip unzip main.zip cd Synology_HDD_db-main synouser --run-as-root bash syno_hdd_db.sh -u执行完成后,无需重启,刷新群晖网页端,即可完美在直通的 NVMe 固态硬盘上创建“存储空间”,享受接近原生的读写性能。
总结与避坑指南
- 固态硬盘选型:部分国产联联(Maxio)主控的 NVMe 固态硬盘对 ASPM 支持极差,直通后可能导致 PVE 宿主机直接紫屏或死机。推荐在 N5105 平台上使用三星(如 970 EVO Plus)、致态(TiPlus5000)等对 ASPM 兼容性较好的企业级或大厂消费级固态。
- 温控监测:直通群晖后,PVE 将无法监控该 SSD 的温度。建议在群晖中配置好温度预警,防止软路由紧凑空间内固态硬盘过热掉盘。