Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

pve磁盘直通

一、概述

磁盘直通可以归纳为三种方式:

1、RDM (裸磁盘映射)

RDM是引用于VMware的裸磁盘映射。将单个硬盘或者分区,通过qemu进行映射到虚拟机。通过这种方式,硬盘会在虚拟机内会认为是一个qemu-hdd。

2、磁盘控制器直通

在DAS架构中,硬盘都是连接到硬盘控制器(Nvme除外),由硬盘控制器管理。因此直通了磁盘控制器,就会让磁盘控制器下的所有硬盘间接直通到虚拟机。通过这种方式,硬盘会在虚拟机内会认为是一个物理磁盘,具有smart属性。

3、nvme直通

Nvme作为一个PCIe设备,那么只需要安装PCIe方式进行直通。开启iommu,再去虚拟机-硬件添加即可。

二、具体操作方法

1、RDM磁盘直通(不推荐)

注:不需要开启iommu。只能在PVE命令行中添加。

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

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

如下面的例子

total 0
drwxr-xr-x 2 root root 500 Jan  1 10:49 .
drwxr-xr-x 7 root root 140 Jan  1 10:46 ..
lrwxrwxrwx 1 root root  13 Jan  1 10:46 nvme-GLOWAY_YCT4TNVMe-M.2_80_T23110801290 -> ../../nvme1n1
lrwxrwxrwx 1 root root  13 Jan  1 10:46 nvme-GLOWAY_YCT4TNVMe-M.2_80_T23110801290_1 -> ../../nvme1n1
lrwxrwxrwx 1 root root  13 Jan  1 10:46 nvme-nvme.1e4b-505342483633343130353033333035-5072656461746f722053534420474d37204d2e3220345442-00000001 -> ../../nvme0n1
lrwxrwxrwx 1 root root  13 Jan  1 10:46 nvme-nvme.1e4b-543233313130383031323930-474c4f5741592059435434544e564d652d4d2e322f3830-00000001 -> ../../nvme1n1
lrwxrwxrwx 1 root root  13 Jan  1 10:46 nvme-Predator_SSD_GM7_M.2_4TB_PSBH63410503305 -> ../../nvme0n1
lrwxrwxrwx 1 root root  13 Jan  1 10:46 nvme-Predator_SSD_GM7_M.2_4TB_PSBH63410503305_1 -> ../../nvme0n1
lrwxrwxrwx 1 root root   9 Jan  1 10:46 usb-Generic_MassStorageClass_000000001621-0:0 -> ../../sdb

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

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

例如你有一个虚拟机,虚拟机的vmid是101,–scsiX,这里的X是整数

你打算直通intel的一个nvme硬盘,那么你可以使用下面命令qm set 101 --scsi1 /dev/disk/by-id/nvme-Predator_SSD_GM7_M.2_4TB_PSBH63410503305

执行之后,就可以在硬件页面中看到这个硬盘。

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

qm set 101 --sata1 /dev/disk/by-id/nvme-Predator_SSD_GM7_M.2_4TB_PSBH63410503305

qm set 101 --ide1 /dev/disk/by-id/nvme-Predator_SSD_GM7_M.2_4TB_PSBH63410503305

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

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

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

如果需要取消直通,可以使用命令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、 磁盘控制器直通(推荐)

查看硬盘所属硬盘控制器

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

total 0
drwxr-xr-x 2 root root 0 Jan  1 13:30 .
drwxr-xr-x 4 root root 0 Jan  1 13:30 ..
lrwxrwxrwx 1 root root 0 Jan  1 13:30 259:0 -> ../../devices/pci0000:00/0000:00:1b.0/0000:03:00.0/nvme/nvme1/nvme1n1
lrwxrwxrwx 1 root root 0 Jan  1 13:30 259:1 -> ../../devices/pci0000:00/0000:00:1b.0/0000:03:00.0/nvme/nvme1/nvme1n1/nvme1n1p1
lrwxrwxrwx 1 root root 0 Jan  1 13:30 259:2 -> ../../devices/pci0000:00/0000:00:1b.0/0000:03:00.0/nvme/nvme1/nvme1n1/nvme1n1p2
lrwxrwxrwx 1 root root 0 Jan  1 13:30 259:3 -> ../../devices/pci0000:00/0000:00:1b.0/0000:03:00.0/nvme/nvme1/nvme1n1/nvme1n1p3
lrwxrwxrwx 1 root root 0 Jan  1 13:30 259:4 -> ../../devices/pci0000:00/0000:00:01.2/0000:02:00.0/nvme/nvme0/nvme0n1
lrwxrwxrwx 1 root root 0 Jan  1 13:30 8:0 -> ../../devices/pci0000:00/0000:00:17.0/ata2/host1/target1:0:0/1:0:0:0/block/sda
lrwxrwxrwx 1 root root 0 Jan  1 13:30 8:1 -> ../../devices/pci0000:00/0000:00:17.0/ata2/host1/target1:0:0/1:0:0:0/block/sda/sda1
lrwxrwxrwx 1 root root 0 Jan  1 13:30 8:16 -> ../../devices/pci0000:00/0000:00:14.0/usb2/2-6/2-6:1.0/host8/target8:0:0/8:0:0:0/block/sdb
lrwxrwxrwx 1 root root 0 Jan  1 13:30 8:2 -> ../../devices/pci0000:00/0000:00:17.0/ata2/host1/target1:0:0/1:0:0:0/block/sda/sda2
lrwxrwxrwx 1 root root 0 Jan  1 13:30 8:3 -> ../../devices/pci0000:00/0000:00:17.0/ata2/host1/target1:0:0/1:0:0:0/block/sda/sda3

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

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

root@pve:~# lsblk
NAME                         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                            8:0    0  1.8T  0 disk 
├─sda1                         8:1    0    8G  0 part 
├─sda2                         8:2    0    2G  0 part 
└─sda3                         8:3    0  1.8T  0 part 
sdb                            8:16   1    0B  0 disk 
nvme1n1                      259:0    0  3.7T  0 disk 
├─nvme1n1p1                  259:1    0 1007K  0 part 
├─nvme1n1p2                  259:2    0    1G  0 part /boot/efi
└─nvme1n1p3                  259:3    0  3.7T  0 part 
  ├─pve-swap                 252:0    0    8G  0 lvm  [SWAP]
  ├─pve-root                 252:1    0   96G  0 lvm  /
  ├─pve-data_tmeta           252:2    0 15.9G  0 lvm  
  │ └─pve-data-tpool         252:4    0  3.6T  0 lvm  
  │   ├─pve-data             252:5    0  3.6T  1 lvm  
  │   └─pve-vm--100--disk--0 252:6    0    4G  0 lvm  
  └─pve-data_tdata           252:3    0  3.6T  0 lvm  
    └─pve-data-tpool         252:4    0  3.6T  0 lvm  
      ├─pve-data             252:5    0  3.6T  1 lvm  
      └─pve-vm--100--disk--0 252:6    0    4G  0 lvm  
nvme0n1                      259:4    0  3.7T  0 disk 

根据返回结果,我的pve系统是安装在nvme1n1上,所以切勿直通sdb nvme1n1,避免pve系统崩溃,本次安装nas,我直通sda,这是一块SATA固态 。

具体直通流程很简单,首先开启硬件直通功能后,然后在硬件页面上添加PCI设备即可。如何开启直通功能,参考

然后在硬件页面添加pci设备,并且点击高级,勾选PCIe设备

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

三:Nvme直通(推荐)

Nvme作为一个PCIe设备,那么只需要安装PCIe方式进行直通。开启iommu,再去面板上添加即可。

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

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