Proxmox VE (PVE) USB 硬盘直通完全指南:两种方法详解
在虚拟化平台 Proxmox VE (PVE) 中,我们经常需要将物理硬件直接分配给虚拟机使用,这个过程称为“直通”(Passthrough)。其中,USB 硬盘直通是一个非常普遍的需求,无论是为了搭建家庭 NAS(如 TrueNAS, OpenMediaVault),还是想让某个虚拟机独占一块数据盘。
本文将详细介绍在 PVE 中直通 USB 硬盘的两种主流方法,并分析它们的优缺点和适用场景,帮助你选择最适合自己的方案。
方法一:通过 PVE Web 界面直通 USB 设备 (最简单)
这是最直接、最简单的方法。它将 USB 设备本身(作为一个 USB 设备)传递给虚拟机。虚拟机能感知到这是一个 USB 设备,并且支持热插拔。
优点
- 操作简单:全程在 Web UI 中完成,无需命令行。
- 支持热插拔:可以在虚拟机运行时动态添加或移除设备。
- 通用性好:适用于 U 盘、移动硬盘、USB 读卡器等各种 USB 设备。
缺点
- 性能损耗:存在 USB 虚拟化层,性能相比物理直通略有损失。
- 不支持 S.M.A.R.T.:虚拟机通常无法读取硬盘的 S.M.A.R.T. 健康信息。
- 不推荐用于 ZFS:像 TrueNAS 这样的系统使用 ZFS 文件系统,对磁盘直接访问要求很高,不推荐此方法。
操作步骤
-
物理连接并识别设备
- 将 USB 硬盘连接到 PVE 主机的 USB 端口。
- 登录 PVE 主机的 Shell(可以通过 Web 界面的
节点
->>_ Shell
,或 SSH 登录)。 - 执行
lsusb
命令查看所有 USB 设备。
# lsusb Bus 002 Device 003: ID 1058:25a2 Western Digital Technologies, Inc. Elements 25A2
- 找到你的硬盘,并记下其
ID xxxx:xxxx
,这分别是 Vendor ID 和 Product ID。
-
在 PVE Web 界面添加 USB 设备
- 在 PVE 管理界面,选中目标虚拟机,进入 硬件 (Hardware) 标签页。
- 点击 添加 (Add) 按钮,在菜单中选择 USB 设备 (USB Device)。
-
配置 USB 设备直通
- 在弹出的配置窗口中,选择 使用 Vendor/Device ID (Use USB Vendor/Device ID)。
- 在下拉列表中选择你的设备,然后点击 添加 (Add)。
-
启动并验证
- 启动虚拟机。在虚拟机操作系统内,你应该能看到一个新的 USB 存储设备被识别。
方法二:通过磁盘 ID 直通整个硬盘 (性能更佳)
这种方法将 USB 硬盘作为一个块设备(Block Device)直接映射给虚拟机。虚拟机把它识别为一个标准的 SCSI 或 SATA 硬盘,性能接近原生,并且可以读取 S.M.A.R.T. 信息。这是搭建 NAS 系统(如 TrueNAS)的首选方案。
优点
- 性能卓越:几乎无性能损失,接近原生速度。
- 支持 S.M.A.R.T.:虚拟机可以读取硬盘的健康状态。
- 稳定性高:使用唯一的磁盘 ID 进行挂载,不受重启或插拔顺序影响。
- 兼容性好:对 ZFS 等文件系统支持完美。
缺点
- 操作稍复杂:需要使用命令行。
- 不支持热插拔:必须在虚拟机关闭状态下添加或移除硬盘。
操作步骤
-
物理连接并识别磁盘 ID
- 将 USB 硬盘连接到 PVE 主机,并登录 Shell。
- 强烈推荐使用
/dev/disk/by-id/
路径来查找设备,因为它具有唯一性。
# ls -l /dev/disk/by-id/
- 输出结果类似如下,找到你的 USB 硬盘(通常包含
usb-
标识):
lrwxrwxrwx 1 root root 9 Oct 26 10:45 usb-WD_Elements_25A2_575831314139305A4B4A-0:0 -> ../../sdb
- 复制这个完整的设备路径:
/dev/disk/by-id/usb-WD_Elements_25A2_575831314139305A4B4A-0:0
。
-
使用命令行添加直通硬盘
- 假设你的虚拟机 ID 是
101
,你想把它作为第二个 SCSI 硬盘添加进去,执行以下命令:
qm set 101 -scsi1 /dev/disk/by-id/usb-WD_Elements_25A2_575831314139305A4B4A-0:0
提示: 为了最好的性能,我们使用了
-scsi
。如果你的虚拟机是 Linux,通常可以直接识别。如果你的虚拟机是 Windows,请继续阅读下方的常见问题解决方法。 - 假设你的虚拟机 ID 是
-
启动并验证
- 启动虚拟机。Linux 系统可以直接在
lsblk
中看到新硬盘。 - 对于 Windows 系统,你可能会发现硬盘没有出现,别担心,请看下一步。
- 启动虚拟机。Linux 系统可以直接在
常见问题:Windows 10/11 虚拟机不识别 SCSI 硬盘怎么办?
这是一个非常经典的问题。原因是 Windows 的默认安装镜像中不包含 VirtIO 驱动程序。当你使用 PVE 高性能的 VirtIO SCSI
控制器时,Windows 无法识别它,也就看不到挂载在上面的硬盘。
解决方案就是:为 Windows 安装 VirtIO 驱动。
步骤 1: 下载并上传驱动 ISO
- 从 Fedora 官方项目下载最新的稳定版 VirtIO 驱动 ISO 文件:
- 将下载好的
virtio-win.iso
文件上传到 PVE 的 ISO 镜像存储区(例如local (pve)
->ISO 镜像
)。
步骤 2: 为 Windows 虚拟机挂载并安装驱动
- 关闭你的 Windows 虚拟机。
- 在 PVE 界面,选择该虚拟机 -> 硬件 -> CD/DVD 驱动器。点击
编辑
,在镜像
下拉菜单中选择你刚刚上传的virtio-win.iso
文件。 - 启动 Windows 虚拟机。
- 进入系统后,右键点击“开始”菜单,选择 设备管理器。
- 在列表中找到一个带黄色感叹号的 "SCSI 控制器" (或在“其他设备”下的未知设备)。
- 右键点击它,选择 更新驱动程序 -> “浏览我的计算机以查找驱动程序”。
- 点击 “浏览”,选择 VirtIO 驱动光盘(通常是 D: 盘),然后定位到
viostor\w10\amd64
目录。viostor
: VirtIO 存储驱动w10
: 适用于 Windows 10/11amd64
: 适用于 64 位系统
- 确保勾选 “包括子文件夹”,然后点击
下一步
。Windows 会自动安装驱动。
步骤 3: 初始化硬盘
- 驱动安装完成后,右键点击“开始”菜单,选择 磁盘管理。
- 你现在应该能看到新硬盘了!它可能显示为“脱机”或“未初始化”。
- 右键点击该磁盘,先选择 联机,然后再右键选择 初始化磁盘 (选择 GPT 或 MBR),之后就可以新建分区并格式化使用了。
备选方案:使用 SATA 总线
如果你不想安装驱动,可以换一种更简单的方式,但性能理论上稍低(对 USB 硬盘影响不大):
- 关闭虚拟机。
- 在 PVE 界面双击你直通的那个硬盘。
- 在
总线/设备
选项中,将SCSI
改为SATA
并保存。 - 启动 Windows,它会自动识别 SATA 硬盘,无需任何额外驱动。
方法对比与最终建议
特性 | 方法一 (USB 设备直通) | 方法二 (磁盘 ID 直通) |
---|---|---|
推荐场景 | 临时使用、需要热插拔的通用场景 | NAS 系统 (TrueNAS/OMV)、数据库等高性能场景 |
性能 | 一般,有虚拟化开销 | 优秀,接近原生磁盘性能 |
S.M.A.R.T. 支持 | 通常不支持 | 支持 |
热插拔 | 支持 | 不支持 (需在 VM 关机状态下操作) |
虚拟机内识别为 | USB 设备 | SATA / SCSI 硬盘 |
稳定性 | 良好 | 极佳 (使用 disk-by-id ) |
总结建议
- 临时用盘,选方法一:如果你只是想临时挂载 U 盘或移动硬盘来拷贝一下文件,方法一无疑是最方便快捷的。
- 长期用盘,选方法二:如果你打算将这个 USB 硬盘作为虚拟机的主要存储,特别是用于搭建 7×24 小时运行的 NAS 或存放重要数据,强烈推荐使用方法二。它能为你提供更好的性能、稳定性和数据健康监控能力。
希望这篇更新后的教程能帮助你彻底解决 PVE USB 硬盘直通的所有问题!