Proxmox VE pve硬盘直通

Proxmox VE直通硬盘相对简单。有2种方式的实现。

1、RDM (裸磁盘映射)

RDM是引用于VMware的裸磁盘映射。

参考https://kb.vmware.com/s/article/1017530?lang=zh_CN。

将单个硬盘或者分区,通过qemu进行映射到虚拟机。在KVM上没有找到类似技术的名词,所以用RDM代名。

通过这种方式,硬盘会在虚拟机内会认为是一个qemu-hdd。

2、磁盘控制器直通

在DAS架构中,硬盘都是连接到硬盘控制器(Nvme除外),由硬盘控制器管理。因此直通了磁盘控制器,就会让磁盘控制器下的所有硬盘间接直通到虚拟机。

通过这种方式,硬盘会在虚拟机内会认为是一个物理磁盘,具有smart属性。

关于这2种的性能比较,可以参考

Proxmox VE 磁盘直通性能测试

一:RDM磁盘直通

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

我们可以通过下面命令,列出当前的硬盘列表

ls -la /dev/disk/by-id/|grep -v dm|grep -v lvm|grep -v part

如下面的例子

root@pve:~# ls -la /dev/disk/by-id/|grep -v dm|grep -v lvm|grep -v part
total 0
drwxr-xr-x 2 root root 540 Apr 28 16:39 .
drwxr-xr-x 6 root root 120 Mar  3 15:52 ..
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

nvme开头的是nvme硬盘,ata开头是走sata或者ata通道的设备。,scsi是scsi设备-阵列卡raid或者是直通卡上的硬盘。

我们可以通过qm set <vmid> --scsiX /dev/disk/by-id/xxxxxxx 进行RDM直通

例如你有一个虚拟机,虚拟机的vmid是101,--scsiX,这里的X是整数,最多为如果你不清楚vmid这个是什么含义,你可以参考下面文章

认识虚拟机VMID的作用

你打算直通intel的一个nvme硬盘,那么你可以使用下面命令

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

执行之后,你可以在面板中看到下面这个硬盘。

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

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

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

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

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

如果想要了解什么最多6个sata,请参考

https://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/q35-chipset-brief.pdf

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

如上面的例子,你应该输入

qm set 101 --delete scsi1

出现update 即代表成功。可返回网页上查看。

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

 

二:磁盘控制器直通

 

磁盘控制器直通之后,虚拟机可以获得全部的磁盘属性。

需要注意的是,你需要多个磁盘控制器,且Proxmox VE系统安装在非需要直通的硬盘控制器上,否则会将系统直通给虚拟机,导致系统崩溃。

2.1 查找硬盘控制器

如何查询本机的硬盘控制器,可以通过lspci命令

root@pve1:~# lspci 
00:00.0 Host bridge: Intel Corporation 8th Gen Core Processor Host Bridge/DRAM Registers (rev 0a)
00:01.0 PCI bridge: Intel Corporation 6th-10th Gen Core Processor PCIe Controller (x16) (rev 0a)
00:02.0 VGA compatible controller: Intel Corporation CoffeeLake-H GT2 [UHD Graphics 630]
00:14.0 USB controller: Intel Corporation 100 Series/C230 Series Chipset Family USB 3.0 xHCI Controller (rev 31)
00:17.0 SATA controller: Intel Corporation Q170/Q150/B150/H170/H110/Z170/CM236 Chipset SATA Controller [AHCI Mode] (rev 31)
00:1c.0 PCI bridge: Intel Corporation 100 Series/C230 Series Chipset Family PCI Express Root Port #5 (rev f1)
00:1d.0 PCI bridge: Intel Corporation 100 Series/C230 Series Chipset Family PCI Express Root Port #9 (rev f1)
00:1d.2 PCI bridge: Intel Corporation 100 Series/C230 Series Chipset Family PCI Express Root Port #11 (rev f1)
00:1d.3 PCI bridge: Intel Corporation 100 Series/C230 Series Chipset Family PCI Express Root Port #12 (rev f1)
00:1f.0 ISA bridge: Intel Corporation B150 Chipset LPC/eSPI Controller (rev 31)
00:1f.2 Memory controller: Intel Corporation 100 Series/C230 Series Chipset Family Power Management Controller (rev 31)
00:1f.3 Audio device: Intel Corporation 100 Series/C230 Series Chipset Family HD Audio Controller (rev 31)
00:1f.4 SMBus: Intel Corporation 100 Series/C230 Series Chipset Family SMBus (rev 31)
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (2) I219-V (rev 31)
01:00.0 Ethernet controller: Mellanox Technologies MT27500 Family [ConnectX-3]
02:00.0 SCSI storage controller: Broadcom / LSI SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 03)
03:00.0 Non-Volatile memory controller: Intel Corporation SSD Pro 7600p/760p/E 6100p Series (rev 03)
04:00.0 PCI bridge: ASMedia Technology Inc. ASM1083/1085 PCIe to PCI Bridge (rev 04)
06:00.0 USB controller: ASMedia Technology Inc. ASM1142 USB 3.1 Host Controller

其中00:17是sata控制器,02:00是scsi 直通卡。一般来说,带SCSI SATA字样的都是磁盘控制器。

00:17.0 SATA controller: Intel Corporation Q170/Q150/B150/H170/H110/Z170/CM236 Chipset SATA Controller [AHCI Mode] (rev 31)
02:00.0 SCSI storage controller: Broadcom / LSI SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 03)

2.2 查看硬盘所属硬盘控制器

如果你有多块硬盘,且不知道硬盘属于哪个控制器,你可以通过下面命令查看。

ls -la /sys/dev/block/|grep -v loop |grep -v dm

root@pve1:~# ls -la /sys/dev/block/|grep -v  loop |grep -v dm
total 0
drwxr-xr-x 2 root root 0 May  6 16:08 .
drwxr-xr-x 4 root root 0 May  6 16:08 ..
lrwxrwxrwx 1 root root 0 May  6 16:08 8:80 -> ../../devices/pci0000:00/0000:00:17.0/ata3/host3/target3:0:0/3:0:0:0/block/sdf
lrwxrwxrwx 1 root root 0 May  6 16:08 8:81 -> ../../devices/pci0000:00/0000:00:17.0/ata3/host3/target3:0:0/3:0:0:0/block/sdf/sdf1
lrwxrwxrwx 1 root root 0 May  6 16:08 8:82 -> ../../devices/pci0000:00/0000:00:17.0/ata3/host3/target3:0:0/3:0:0:0/block/sdf/sdf2
lrwxrwxrwx 1 root root 0 May  6 16:08 8:83 -> ../../devices/pci0000:00/0000:00:17.0/ata3/host3/target3:0:0/3:0:0:0/block/sdf/sdf3

如上面所示,pci0000:00是Pci桥,0000:00:17.0就是硬盘控制器,后面是硬盘的盘号,sdf

如果不知道pve所在的硬盘。可以使用命令lsblk查看,有pve-root的,便是pve所在的硬盘

root@pve1:~# lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sdf            8:80   0 111.8G  0 disk 
├─sdf1         8:81   0  1007K  0 part 
├─sdf2         8:82   0   512M  0 part /boot/efi
└─sdf3         8:83   0 111.3G  0 part 
  ├─pve-swap 253:0    0     8G  0 lvm  [SWAP]
  └─pve-root 253:1    0 103.3G  0 lvm  /

如上面的例子,因为pve系统在控制器0000:00:17.0上,所以要直通硬盘,就必须直通02:00.0这个设备。那么你需要直通的硬盘,应该接到这个磁盘控制器下。

2.3 直通方法

在开启硬件直通功能后,在面板上添加即可。如何开启直通功能,参考

PVE开启网卡直通,显卡直通,USB直通。请务必看完此文章,再结合自己实际,操作,如果成功,请再下面评……
2020-05-25

磁盘控制器直通可以,如下,根据本文的例子,应该选择SAS卡,而不是sata控制器。因为sata控制器上安装了pve系统。

并且点击高级,勾选PCIe设备

 

之后虚拟机内,可以看到磁盘的信息

三:Nvme直通

Nvme作为一个PCIe设备,那么只需要安装PCIe方式进行直通。参考2.3的贴出来的教程文章,开启iommu,再去面板上添加即可。

同时也要记得勾选PCIe设备。

在虚拟机内,也能正常识别

有个注意点,通常OEM的Nvme设备控制器固件会比较低,无法进行PCIe直通,可以尝试升级固件,请参考下文

之前因为chia 入了9根intel 7600p固态。后来想用于ZFS的缓存,发现PVE直通的时候一直报错。 到处……
2021-07-04

如果无法升级,固件,且报错和上文链接一样,可以参考下面解决方案

https://bugzilla.kernel.org/show_bug.cgi?id=202055

在虚拟机conf文件中,添加

args: -set device.hostpciX.x-msix-relocation=bar2

注hostpciX这里的X是你nvme直通后的pcie号,

你需要和你虚拟机的配置相同才行,如是0,则参数应该是

args: -set device.hostpci0.x-msix-relocation=bar2

四:从直通的硬盘中引导系统

在某些场景下,用户期望虚拟机直接从直通的硬盘中启动。

对于Windows来说,

1、确定硬盘里的系统是UEFI系统还是legacy系统。

如果是UEFI系统,请将虚拟机配置为OVMF,如果是legacy系统,请将虚拟机配置为Seabios

2、请将虚拟机的SCSI控制器设置为LSI 53C895A。将RDM磁盘设置为sata通道(因为sata在windows下免驱,scsi需要驱动,会导致无法启动windows系统)。

3、在虚拟机选项中,修改引导顺序,引导顺序为你的硬盘号。

对于linux来说,和Windows一样。

对于Nvme硬盘,

直通之后,选择Nvme启动,可能也会因为驱动的原因,导致无法启动系统。建议RDM直通,设置为sata模式,参考Windows步骤。由于Nvme的性能高,用sata模式可能会产生性能问题,建议先用sata模式启动系统后,安装好virtio-scsi驱动,再将Nvme设置为scsi,最后启动顺序,并启动虚拟机。这部分可以借鉴PVE安装xp的教程。

PVE安装Windows XP教程(virtio驱动版)

 

 

 

 

版权声明:
作者:佛西
链接:https://foxi.buduanwang.vip/virtualization/1754.html/
文章版权归作者所有,未经允许请勿转载
如需获得支持,请点击网页右上角
THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录