Press "Enter" to skip to content

Proxmox VE (PVE) USB 硬盘直通完全指南

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 文件系统,对磁盘直接访问要求很高,不推荐此方法。

操作步骤

  1. 物理连接并识别设备

    • 将 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 IDProduct ID
  2. 在 PVE Web 界面添加 USB 设备

    • 在 PVE 管理界面,选中目标虚拟机,进入 硬件 (Hardware) 标签页。
    • 点击 添加 (Add) 按钮,在菜单中选择 USB 设备 (USB Device)
  3. 配置 USB 设备直通

    • 在弹出的配置窗口中,选择 使用 Vendor/Device ID (Use USB Vendor/Device ID)
    • 在下拉列表中选择你的设备,然后点击 添加 (Add)
  4. 启动并验证

    • 启动虚拟机。在虚拟机操作系统内,你应该能看到一个新的 USB 存储设备被识别。

方法二:通过磁盘 ID 直通整个硬盘 (性能更佳)

这种方法将 USB 硬盘作为一个块设备(Block Device)直接映射给虚拟机。虚拟机把它识别为一个标准的 SCSI 或 SATA 硬盘,性能接近原生,并且可以读取 S.M.A.R.T. 信息。这是搭建 NAS 系统(如 TrueNAS)的首选方案

优点

  • 性能卓越:几乎无性能损失,接近原生速度。
  • 支持 S.M.A.R.T.:虚拟机可以读取硬盘的健康状态。
  • 稳定性高:使用唯一的磁盘 ID 进行挂载,不受重启或插拔顺序影响。
  • 兼容性好:对 ZFS 等文件系统支持完美。

缺点

  • 操作稍复杂:需要使用命令行。
  • 不支持热插拔:必须在虚拟机关闭状态下添加或移除硬盘。

操作步骤

  1. 物理连接并识别磁盘 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
  2. 使用命令行添加直通硬盘

    • 假设你的虚拟机 ID 是 101,你想把它作为第二个 SCSI 硬盘添加进去,执行以下命令:
    qm set 101 -scsi1 /dev/disk/by-id/usb-WD_Elements_25A2_575831314139305A4B4A-0:0
    

    提示: 为了最好的性能,我们使用了 -scsi。如果你的虚拟机是 Linux,通常可以直接识别。如果你的虚拟机是 Windows,请继续阅读下方的常见问题解决方法。

  3. 启动并验证

    • 启动虚拟机。Linux 系统可以直接在 lsblk 中看到新硬盘。
    • 对于 Windows 系统,你可能会发现硬盘没有出现,别担心,请看下一步。

常见问题:Windows 10/11 虚拟机不识别 SCSI 硬盘怎么办?

这是一个非常经典的问题。原因是 Windows 的默认安装镜像中不包含 VirtIO 驱动程序。当你使用 PVE 高性能的 VirtIO SCSI 控制器时,Windows 无法识别它,也就看不到挂载在上面的硬盘。

解决方案就是:为 Windows 安装 VirtIO 驱动。

步骤 1: 下载并上传驱动 ISO

  1. 从 Fedora 官方项目下载最新的稳定版 VirtIO 驱动 ISO 文件:
  2. 将下载好的 virtio-win.iso 文件上传到 PVE 的 ISO 镜像存储区(例如 local (pve) -> ISO 镜像)。

步骤 2: 为 Windows 虚拟机挂载并安装驱动

  1. 关闭你的 Windows 虚拟机。
  2. 在 PVE 界面,选择该虚拟机 -> 硬件 -> CD/DVD 驱动器。点击 编辑,在 镜像 下拉菜单中选择你刚刚上传的 virtio-win.iso 文件。
  3. 启动 Windows 虚拟机。
  4. 进入系统后,右键点击“开始”菜单,选择 设备管理器
  5. 在列表中找到一个带黄色感叹号的 "SCSI 控制器" (或在“其他设备”下的未知设备)。
  6. 右键点击它,选择 更新驱动程序 -> “浏览我的计算机以查找驱动程序”
  7. 点击 “浏览”,选择 VirtIO 驱动光盘(通常是 D: 盘),然后定位到 viostor\w10\amd64 目录。
    • viostor: VirtIO 存储驱动
    • w10: 适用于 Windows 10/11
    • amd64: 适用于 64 位系统
  8. 确保勾选 “包括子文件夹”,然后点击 下一步。Windows 会自动安装驱动。

步骤 3: 初始化硬盘

  1. 驱动安装完成后,右键点击“开始”菜单,选择 磁盘管理
  2. 你现在应该能看到新硬盘了!它可能显示为“脱机”或“未初始化”。
  3. 右键点击该磁盘,先选择 联机,然后再右键选择 初始化磁盘 (选择 GPT 或 MBR),之后就可以新建分区并格式化使用了。

备选方案:使用 SATA 总线

如果你不想安装驱动,可以换一种更简单的方式,但性能理论上稍低(对 USB 硬盘影响不大):

  1. 关闭虚拟机。
  2. 在 PVE 界面双击你直通的那个硬盘。
  3. 总线/设备 选项中,将 SCSI 改为 SATA 并保存。
  4. 启动 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 硬盘直通的所有问题!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注