使用PVE有时为了方便,需要将硬盘直通, PVE系统直通硬盘有两种方式,方法一命令操作,直通单块硬盘 Raw Device Mapping (RDM);方法二添加 PCI设备,直通 SATA Controller(SATA 控制器)。

其中裸磁盘映射 Raw Device Mapping (RDM) 是将单个硬盘或者分区,通过qemu进行映射到虚拟机,通过这种方式,硬盘会在虚拟机内会认为是一个qemu-hdd。

磁盘控制器直通会让磁盘控制器下的所有硬盘间接直通到虚拟机,通过这种方式,硬盘会在虚拟机内会认为是一个物理磁盘,具有smart属性。

RDM磁盘直通

RDM磁盘直通,不需要开启iommu,只能在PVE命令行中添加。

进入Proxmox VE(PVE)系统的SSH,或直接进入PVE管理网页Shell,我们可以通过下面命令,列出当前的硬盘列表:

ls -la /dev/disk/by-id/

 

例如:

lrwxrwxrwx 1 root root  9 Jun 12 09:36 ata-GALAX_TA1D0240A_305D0********0279966 -> ../../sda
lrwxrwxrwx 1 root root 10 Jun 12 09:36 ata-GALAX_TA1D0240A_305D0********0279966-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jun 12 09:36 ata-GALAX_TA1D0240A_305D0********0279966-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Jun 12 09:36 ata-GALAX_TA1D0240A_305D0********0279966-part3 -> ../../sda3
lrwxrwxrwx 1 root root  9 Jun 12 09:58 ata-ST1000DM003-1****2_W********7 -> ../../sdb
lrwxrwxrwx 1 root root 10 Jun 12 09:36 dm-name-pve-root -> ../../dm-1
lrwxrwxrwx 1 root root 10 Jun 12 09:36 dm-name-pve-swap -> ../../dm-0
lrwxrwxrwx 1 root root 10 Jun 12 09:36 dm-name-pve-vm--100--disk--0 -> ../../dm-8
lrwxrwxrwx 1 root root 10 Jun 12 09:36 dm-name-pve-vm--101--disk--0 -> ../../dm-7
lrwxrwxrwx 1 root root 10 Jun 12 09:36 dm-name-pve-vm--105--disk--0 -> ../../dm-6
lrwxrwxrwx 1 root root 10 Jun 12 09:36 dm-name-pve-vm--200--disk--0 -> ../../dm-9
lrwxrwxrwx 1 root root 10 Jun 12 09:36 dm-uuid-LVM-ezreio8tLBAyf5iIBYW5HS*********ZgzGBJxLqknLHZ05EUcCM0h3lWV -> ../../dm-1
lrwxrwxrwx 1 root root 10 Jun 12 09:36 dm-uuid-LVM-ezreio8tLBAyf5iIBYW5HS*********nbQKEmdsTHkKIe8j2Ou0mfRwXNL -> ../../dm-7
lrwxrwxrwx 1 root root 10 Jun 12 09:36 dm-uuid-LVM-ezreio8tLBAyf5iIBYW5HS*********OS0i5zs3870PzzgRxluMPy9qALl -> ../../dm-8
lrwxrwxrwx 1 root root 10 Jun 12 09:36 dm-uuid-LVM-ezreio8tLBAyf5iIBYW5HS*********SUJ1HHzTaROYIrVWHsoN9fZ4XiM -> ../../dm-9
lrwxrwxrwx 1 root root 10 Jun 12 09:36 dm-uuid-LVM-ezreio8tLBAyf5iIBYW5HS*********FE8hXy66BHq4Hf0HjxNMkUgqXnb -> ../../dm-0
lrwxrwxrwx 1 root root 10 Jun 12 09:36 dm-uuid-LVM-ezreio8tLBAyf5iIBYW5HS*********4PcYIkPqUFwmS91bfMSRwlA9vxR -> ../../dm-6
lrwxrwxrwx 1 root root 10 Jun 12 09:36 lvm-pv-uuid-2oucQP-****-****-****-****-****-gm99Po -> ../../sda3
lrwxrwxrwx 1 root root 13 Apr 28 16:39 nvme-eui.01000000010000005cd2e431fee65251 -> ../../nvme2n1
lrwxrwxrwx 1 root root 13 Mar 3 15:52 nvme-eui.334843304aa010020025385800000004 -> ../../nvme1n1
lrwxrwxrwx 1 root root 13 Apr 28 17:36 nvme-eui.334843304ab005400025385800000004 -> ../../nvme0n1
lrwxrwxrwx 1 root root 13 Apr 28 16:39 nvme-INTEL_SSDPE2KX020T8_BTLJ039307142P0BGN -> ../../nvme2n1
lrwxrwxrwx 1 root root 13 Mar 3 15:52 nvme-SAMSUNG_MZWLL800HEHP-00003_S3HCNX0JA01002 -> ../../nvme1n1
lrwxrwxrwx 1 root root 13 Apr 28 17:36 nvme-SAMSUNG_MZWLL800HEHP-00003_S3HCNX0JB00540 -> ../../nvme0n1
lrwxrwxrwx 1 root root 9 Mar 3 15:52 scsi-35000c500474cd7eb -> ../../sda
lrwxrwxrwx 1 root root 9 Mar 3 15:52 wwn-0x5000c500474cd7eb -> ../../sda
lrwxrwxrwx 1 root root  9 Jun 12 09:58 wwn-0x500********f289 -> ../../sdb

 

ata、mmc等…表示接口方式,通常有ATA、SATA、SCS、NVME、eMMC和SASI等类型。nvme 开头的是 nvme 硬盘,IDE和SATA接口一般为“ata”,SCSI及SAS接口一般为”scsi“。

这里必需选择的是整个硬盘(物理硬盘)而不是分区,比如 sda、sdb、sdc 对应的 id,而不是 sda1、sda2…

将物理磁盘直通给PVE系统下虚拟机中需要在shell下通过CLI的方式来添加,使用的工具为qm(Qemu/KVM虚拟机管理器),通过命令 set 来设置物理磁盘到虚拟机中:

qm set <vm_id> -<disk_type>[n] /dev/disk/by-id/<type>-$brand-$model_$serial_number

 

其中:

  • vm_id : 为创建虚拟机时指定的VM ID。
  • <disk_type>[n]: 磁盘的总线类型及其编号,总线类型可以选择IDE、SATA、VirtIO Block和SCSI类型,编号从0开始,最大值根据总线接口类型有所不同,IDE为3,SATA为5,VirTIO Block为15,SCSI为13。
  • “/dev/disk/by-id/-brand-brand−model_$serial_number” : 为磁盘ID的具体路径和名称。

以上方的硬盘数据 ata-ST1000DM003-1****2_W****7 为例,将此硬盘直通给VM ID编号为200的虚拟机下,总线类型接口为sata0,命令如下:

qm set 200 -sata0 /dev/disk/by-id/ata-ST1000DM003-1****2_W********7

 

配置成功完成后,返回:

update VM 200: -sata0 /dev/disk/by-id/ata-ST1000DM003-1****2_W********7

 

同样,如果打算直通一个 nvme 硬盘,那么可以使用下面的命令:

qm set 200 --scsi1 /dev/disk/by-id/nvme-INTEL_SSDPE2KX020T8_BTLJ039307142P0BGN

 

当然,也可以使用ide或者sata形式直通硬盘,如下:

qm set 200 --sata1 /dev/disk/by-id/nvme-INTEL_SSDPE2KX020T8_BTLJ039307142P0BGN

qm set 200 --ide1 /dev/disk/by-id/nvme-INTEL_SSDPE2KX020T8_BTLJ039307142P0BGN

 

执行之后,可以进入 PVE 虚拟机管理网页,检查是否挂载成功:

建议为 scsi 设备,这样性能理论上是最优秀的。

需要注意的是,scsi 会有序号,如 scsi1,scsi0。在操作之前,应该要知道哪些 scsi 号是空的。对于 pve 来说,sata 最多有6个设备。如果要使用 sata 类型直通,请勿超过 sata5。

如果需要取消直通,可以使用命令:qm set <vmid> --delete scsiX

如上面的例子,命令为:

root@pve:~# qm set 101 --delete scsi1
update VM 101: -delete scsi1

 

直通 SATA Controller/PCI-E 阵列卡

Proxmox VE(PVE)系统直通SATA Controller(SATA 控制器),会把整个sata总线全部直通过去,就是直接将南桥或者直接把北桥连接的sata总线直通,那么有些主板sata接口就会全部被直通。

注意:如果您的PVE系统是安装在SATA的硬盘中,会导致PVE系统无法启动,所以在直通 SATA Controller(SATA 控制器),之前请先确认自己的PVE系统安装位置,或者直接将系统安装在 NVMe 硬盘中。
在开始之前开启IOMMU硬件直通功能(需要CPU支持VT-D),执行下一步添加 SATA Controller(SATA 控制器)/PCI-E 阵列卡操作。

选择需要设置的PVE系统,点击 硬件 > 添加 > PCI设备 > 选择 SATA Controller(SATA 控制器),最后点击“添加”把 SATA Controller(SATA 控制器)添加给相应的系统后,完成重启,PVE硬件直通的设置就生效了。

References

Proxmox VE直通硬盘:https://optimus-xs.github.io/posts/passthrough-hard-drive-in-proxmox-ve/

Proxmox VE pve硬盘直通:https://foxi.buduanwang.vip/virtualization/1754.html/

Proxmox VE 直通硬盘
https://ailitonia.com/archives/proxmox-ve-%e7%9b%b4%e9%80%9a%e7%a1%ac%e7%9b%98/
本文被阅读了:1,625次
作者
Ailitonia
发布于
2025年11月22日
许可协议
版权声明

作者头像
关于 @Ailitonia
正因站在了巨人的肩膀上,才越发觉得自己渺小。不求成为巨人,但求与其同行。 把自己所见所闻,记录下来。
→查看所有由Ailitonia发布的文章