HOOOS

畅网N5105软路由PVE系统下,NVMe固态硬盘直通群晖VM与ASPM节能完美共存指南

0 12 极客Homelab PVE直通软路由节能黑群晖NVMe
Apple

在低功耗 Homelab 界,畅网 N5105 软路由因其性价比和多网口设计成为热门选择。但在 PVE(Proxmox VE)虚拟化环境下,很多玩家在尝试将 NVMe 固态硬盘直通给群晖(DSM)虚拟机时,会遭遇两个痛点:

  1. 功耗飙升:一旦开启 PCIe 直通,主机的 ASPM(活动状态电源管理)往往失效,导致 CPU 无法进入深层 C 状态(C6/C10),整机待机功耗从 7W-8W 飙升至 15W 以上。
  2. 群晖无法识别:直通后的 NVMe 无法直接在群晖中创建存储空间,或者在 DSM 升级后丢失。

本文将提供一套完整的实操方案,帮助你在 PVE 8.x 下,既实现 NVMe 固态硬盘的物理直通(非虚拟盘映射),又完美保持 ASPM 节能特性的开启。


核心准备工作与逻辑

要实现“直通”与“节能”共存,必须遵循以下技术路径:

  • 物理层:BIOS 中必须开启 PCIe ASPM 相关的全部控制权。
  • 系统层(PVE):开启 IOMMU 支持,强制接管 PCIe 链路的电源管理。
  • VM 层(群晖):采用 PCIe 物理设备直通,而非 qm set 虚拟磁盘映射,确保 NVMe 控制器由群晖内核直接驱动。

第一阶段:主板 BIOS 关键设置

畅网 N5105 等工控主板的 BIOS 选项非常繁杂,必须确保以下开关打开。

  1. 开启虚拟化与直通
    • 进入 Advanced -> CPU Configuration,将 Intel (VMX) Virtualization Technology(即 VT-x)设为 Enabled
    • 进入 System Agent (SA) Configuration,将 VT-d 设为 Enabled
  2. 开启 ASPM 节能
    • 进入 Advanced -> PCI Express Configuration
    • ASPMActive State Power Management 设为 AutoEnabled(建议选择 L1L1.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。

  1. 查找 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。

  2. 绑定到 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 架构。

  1. VM 硬件基础设置
    • 机型(Machine):选择 q35
    • BIOS:选择 OVMF (UEFI)
  2. 添加 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 <64usLnkCtl: 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 锁死在 C2C3 状态,说明有直通设备的 PCIe 链路阻碍了 CPU 降频,需重新检查 NVMe 设备的直通属性是否勾选了 PCI-Express

第六阶段:群晖 DSM 内的 NVMe 存储池建立

直通成功后,进入群晖 DSM 系统。

  1. 打开 存储空间管理员,你应该能在 HDD/SSD 页面直接看到这块直通的 NVMe 固态硬盘(显示为插在 PCIe 插槽上,带有完整的 S.M.A.R.T 信息)。

  2. 解除群晖非官方硬盘限制(针对 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 固态硬盘上创建“存储空间”,享受接近原生的读写性能。


总结与避坑指南

  1. 固态硬盘选型:部分国产联联(Maxio)主控的 NVMe 固态硬盘对 ASPM 支持极差,直通后可能导致 PVE 宿主机直接紫屏或死机。推荐在 N5105 平台上使用三星(如 970 EVO Plus)、致态(TiPlus5000)等对 ASPM 兼容性较好的企业级或大厂消费级固态。
  2. 温控监测:直通群晖后,PVE 将无法监控该 SSD 的温度。建议在群晖中配置好温度预警,防止软路由紧凑空间内固态硬盘过热掉盘。

点评评价

captcha
健康