Proxmox VE(PVE)直通硬盘教程:整盘直通给虚拟机

适用场景:把 一整块物理硬盘(HDD/SSD/NVMe)直接交给某台虚拟机使用(例如 TrueNAS / OpenMediaVault / 黑群晖 / Windows 盘等)。

核心原则:优先用 /dev/disk/by-id/ 这种“稳定设备标识”来直通,避免因为 /dev/sdX 变动导致直通错盘。


0. 重要提醒(务必先看)

  1. 整盘直通后,PVE 宿主机不要再对这块盘做任何分区/挂载/ZFS/LVM 操作
  2. 不要直通系统盘(安装 PVE 的那块盘),否则高风险翻车。
  3. 直通前建议你在 PVE WebUI 里确认磁盘序列号/容量,避免选错盘。
  4. 如果你是存储系统(TrueNAS/群晖)用途:更推荐“直通整块盘”或“直通 HBA 控制器”,不要直通分区。

1. 找到要直通的硬盘(强烈建议用 by-id)

1.1 查看系统识别到的磁盘

在 PVE Shell 执行:

1
lsblk -o NAME,SIZE,MODEL,SERIAL,TYPE,MOUNTPOINT

你会看到类似:

  • sda/sdb/...(SATA/SAS 硬盘)
  • nvme0n1/nvme1n1/...(NVMe)

1.2 获取稳定的磁盘路径(by-id)

1
ls -la /dev/disk/by-id/ | sed -n '1,200p'

你要找的是指向整盘的那个链接,例如:

  • ata-WDC_WD80EFAX-... -> ../../sdb
  • nvme-SAMSUNG_MZVL... -> ../../nvme1n1

小技巧:如果列表太多,可以按厂商/容量/序列号关键字过滤:

1
grep -i "WDC\|Seagate\|Samsung\|TOSHIBA" -n <(ls -la /dev/disk/by-id/)

2. 把整块硬盘直通给指定虚拟机

你需要知道虚拟机的 VMID,比如 101/102。

2.1 查询虚拟机 VMID

1
qm list

2.2 直通整块盘(推荐命令)

假设:

  • VMID 是 101
  • 磁盘 by-id 是:/dev/disk/by-id/ata-WDC_WD80EFAX-68LHPN0_WD-XXXXXXX

执行:

1
qm set 101 --scsi1 /dev/disk/by-id/ata-WDC_WD80EFAX-68LHPN0_WD-XXXXXXX

说明:

  • --scsi1 表示挂到该虚拟机的第 2 块 SCSI 盘(编号你可改 scsi0/scsi2/...,不要和现有磁盘冲突)。
  • 直通盘常用挂载口有 scsiXsataX

2.3(推荐)给直通盘配上 VirtIO SCSI 控制器

如果你的虚拟机还没启用 VirtIO SCSI 控制器,建议在 WebUI:

  • VM → Hardware → SCSI Controller
  • 选择:VirtIO SCSI single(常用推荐)

然后再添加直通盘。


3. 在 PVE 配置里确认直通是否生效

查看该 VM 配置:

1
qm config 101

你应该能看到类似:

1
scsi1: /dev/disk/by-id/xxx

4. 在虚拟机系统里确认硬盘已识别

启动虚拟机,在虚拟机内部执行:

1
lsblk

你会看到新增一块磁盘(例如 sdb / vdb / sdX 取决于虚拟机控制器)。

注意:虚拟机里看到的盘符可能和 PVE 宿主机不同,这是正常的。


5. 常见问题与排错

5.1 重启后直通盘“换盘”了

原因:使用了 /dev/sdX 这种不稳定路径。

解决:必须改成 /dev/disk/by-id/...

5.2 直通盘在虚拟机里读写异常 / 性能差

建议检查:

  • 虚拟机磁盘控制器是否为 VirtIO SCSI single
  • 是否启用了 I/O 线程(iothread)(看你的业务类型决定)
  • 宿主机和盘的连接方式(SATA/USB 转接不稳定)

5.3 直通盘是 NVMe,by-id 看不懂

NVMe 的 by-id 一般长这样:

  • nvme-<厂商>_<型号>_<序列号>

同样原则:直通 by-id 指向整盘的那个链接


6. 其他直通方式(简单带过)

6.1 直通“硬盘分区”

不推荐。因为分区层面的变动、宿主机误挂载、以及某些存储系统(TrueNAS/群晖)对裸盘的需求,会让风险变大。

6.2 直通 PCIe 控制器(HBA/整卡直通)

对 TrueNAS 等存储虚拟机来说这是“最干净”的方式:把整张 SATA/HBA 卡直通给虚拟机,让虚拟机直接管理其下所有硬盘。

缺点:需要硬件支持 IOMMU 分组良好,并且宿主机会失去对这张卡下磁盘的控制。