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 直通方法

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

[postcard type="list"]561[/postcard]

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

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

 

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

三:Nvme直通

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

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

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

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

[postcard type="list"]1152[/postcard]

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

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的教程。

https://foxi.buduanwang.vip/windows/574.html/

 

 

 

 

https://foxi.buduanwang.vip/virtualization/1754.html/

评论

  1. lloyd
    Windows Chrome 123.0.0.0
    1月前
    2024-3-28 8:57:54

    你好,请问我直通硬盘安装了truenas,后来因为重装,误删了虚拟机,直通的硬盘无法找到,这个怎么找回?
    谢谢

  2. hlz_07
    Windows Chrome 94.0.4606.71
    5月前
    2023-11-30 10:04:39

    在虚拟机conf文件中,添加
    args: -set device.hostpciX.x-msix-relocation=bar2
    请问博主,pve虚拟机的conf文件在哪个目录呀,直接在文件最后加上这行代码就行是吗(改X)

  3. nds
    Windows Edge 118.0.2088.57
    6月前
    2023-10-22 19:00:46

    pve直通到omv里硬盘序列号就改成 QEMU HARDDIS QM00007 这样的了。怎么能知道那个对应那个呀???
    如果omv里硬盘出问题就不知道对应的是那个物理硬盘
    现在我只能一次直通一个然后记住一个对应的序号。
    有什么更好的方法吗??

    • 佛西 博主
      Macintosh Safari 17.0
      6月前
      2023-10-23 11:13:39

      通过在2个系统上,使用blkid 查看part uuid,一样的盘一样

  4. 钱雨
    Windows Chrome 102.0.0.0
    8月前
    2023-8-28 17:41:47

    PVE下使用RDM直通方式的话,sata硬盘是只能映射为sata吗?为了破除sata6个硬盘的限制,我分别试了把sata硬盘映射为virto和scsi,群晖都识别不到硬盘,只有映射为sata才行,郁闷。。

  5. 惊云
    Windows Chrome 115.0.0.0
    9月前
    2023-8-06 12:01:01

    你好,请教个问题,主板插了两块nvme盘,一块装pve,一块直通给虚拟win10,安装系统、重启这些都正常,但是一旦虚拟机关机,pve就死机了,就得按主板复位键重启才行,不管用什么方法关虚拟机,pve必死机。

  6. xh
    Windows Chrome 114.0.0.0
    11月前
    2023-6-10 23:36:16

    想请教个问题, RDM磁盘直通方式,硬盘如果转移, 还能够识别吗?
    比如pve中安装TrueNAS, 失用RDM的方式直通了sdc, sdd, 两块盘, 之后把这两块盘安装到其他实体truenas上, 可以导入存储池吗

    • 佛西 博主
      Macintosh Safari 16.5
      10月前
      2023-6-18 12:06:39

      可以

  7. 雨天
    Windows Edge 112.0.1722.48
    1年前
    2023-4-22 17:56:28

    请问我直通了nvme转的sata控制器以后,启动群晖后找不到硬盘怎么办啊?说是什么软重置命令失败

  8. montaro
    Windows Chrome 110.0.0.0
    1年前
    2023-2-27 8:52:39

    软直通是不是在群晖里面看到的温度是假的?一直是31度,软直通有没有办法解决这个温度问题

    • 佛西 博主
      Windows Chrome 110.0.0.0
      1年前
      2023-2-28 12:03:38

      没有

  9. sunshe35
    Windows Chrome 106.0.0.0
    1年前
    2022-11-16 22:22:12

    有个问题啊,我直通usb的机械硬盘,通过pcie 的usb或单个usb设备直通,结果耗电量都会大增,会多耗电20w。如果弹出usb机械硬盘(通过群晖弹出),功率会立刻降下来。这个咋回事儿,我靠。

  10. 月亮
    Windows Chrome 103.0.0.0
    2年前
    2022-8-27 0:03:43

    感谢分享如此详细的教程!再请教一下,如果直通两块nvme硬盘,虚拟机conf文件,args参数应该是什么样的格式呢

  11. ccc
    Windows Edge 102.0.1245.33
    2年前
    2022-6-07 22:43:38

    你好,问下企业机械盘不挂载可以睡眠,挂载了就不能睡眠了是什么问题?

  12. ccc
    Windows Edge 102.0.1245.33
    2年前
    2022-6-07 22:43:19

    你好,问下企业机械盘不挂载可以睡眠,挂载了就不能睡眠了是什么问题

  13. JMGutiH
    Macintosh Chrome 101.0.4951.64
    2年前
    2022-5-13 23:53:19

    赞赞赞,这是我见到最详细的一篇pve直通硬盘教程了。我最开始直通了00:17:00 sata控制器给黑群,里面6块硬盘完全正常;中间某次更新手贱更新BIOS,然后一启动直通了黑群虚拟机就会导致pve宿主机死机,可能是直通的硬件有冲突?但网上搜不到这样的例子。

    重装pve也解决不了问题,只能改为直通里面每块sata硬盘,但是这导致黑群下无法正确识别ssd缓存盘.... 尴了个大尬的...
    11
    机器是i3 8100T + 豆希B365 ITX + 16G内存 + 6sata & 1nvme,PCIe空闲中打算网卡到货了组2.5G内网,保险起见还是不直通了,反正CPU用不完。。。

    • 佛西 博主
      Windows Edge 101.0.1210.47
      2年前
      2022-5-15 12:11:51

      对于PVE直通出现死机的问题,最好的方法是,接上显示器,从显示器获得死机的内核trace。不然就得安装kdump。

  14. lurker325
    Windows Chrome 100.0.4896.75
    2年前
    2022-5-08 11:16:04

    写的很详细,包括注意事项都讲的很全。


Deprecated: preg_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /www/wwwroot/foxi.buduanwang.vip_80/wwwroot/wp-content/themes/argon-theme-master/functions.php on line 1383

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇