Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
磁盘直通可以归纳为三种方式:
RDM是引用于VMware的裸磁盘映射。将单个硬盘或者分区,通过qemu进行映射到虚拟机。通过这种方式,硬盘会在虚拟机内会认为是一个qemu-hdd。
在DAS架构中,硬盘都是连接到硬盘控制器(Nvme除外),由硬盘控制器管理。因此直通了磁盘控制器,就会让磁盘控制器下的所有硬盘间接直通到虚拟机。通过这种方式,硬盘会在虚拟机内会认为是一个物理磁盘,具有smart属性。
Nvme作为一个PCIe设备,那么只需要安装PCIe方式进行直通。开启iommu,再去虚拟机-硬件添加即可。
注:不需要开启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系统安装在非需要直通的硬盘控制器上,否则会将系统直通给虚拟机,导致系统崩溃。
查看硬盘所属硬盘控制器
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作为一个PCIe设备,那么只需要安装PCIe方式进行直通。开启iommu,再去面板上添加即可。
同时也要记得勾选PCIe设备。
在虚拟机内,也能正常识别。