Ubuntu无需重启PVE,解决PCIE直通后找不到硬盘的问题
Jan 6, 2024 · 3 min · PCIE
添加了一块固态硬盘,PCIE转M.2硬盘,挂在硬盘使用lsblk找不到对应硬盘,无法挂载。
1、查找驱动、卸载与绑定驱动
1. 确定设备ID以及当前驱动状态
lspci -k
...
04:00.0 Non-Volatile memory controller: Yangtze Memory Technologies Co.,Ltd Device 0081 (rev 01)
Subsystem: Yangtze Memory Technologies Co.,Ltd Device 0081
Kernel driver in use: vfio-pci
Kernel modules: nvme
...
这里的 81:00.0 是设备的ID,后面会用到。
同时可以发现当前驱动是 vfio-pci,这意味着设备仍然被 VFIO 保留,因此宿主机无法访问这个HBA卡下的硬盘。
在确定问题后,我们卸载这个驱动并重新绑定正确驱动。
2.卸载驱动及重新绑定
获取IOMMU组
使用上一步获取的设备ID,找到对应的IOMMU组。
shell
find /sys/kernel/iommu_groups/ -type l | grep "04:00.0"
# 输出如下
/sys/kernel/iommu_groups/92/devices/0000:04:00.0这里的 92 就是IOMMU组的ID,不过不用单独记录,
直接把输出的完整路径复制下来就行。
卸载 vfio 驱动
这里直接利用上一步获取的路径进行操作。
shell
echo "0000:04:00.0" | tee /sys/kernel/iommu_groups/92/devices/0000:04:00.0/driver/unbind正常输出设备ID。
shell
0000:04:00.0重新绑定驱动
路径中的 nvme 是驱动名, 注意根据你的实际情况自行调整。
shell
echo "0000:04:00.0" | tee /sys/bus/pci/drivers/nvme/bind正常输出设备ID
shell
0000:04:00.0再次查看设备驱动状态
lspci -k
可以发现之前的 vfio-pci 已经被替换为 nvme 了。
04:00.0 Non-Volatile memory controller: Yangtze Memory Technologies Co.,Ltd Device 0081 (rev 01)
Subsystem: Yangtze Memory Technologies Co.,Ltd Device 0081
Kernel driver in use: nvme
Kernel modules: nvme
重新扫描磁盘
已经正确实别到了硬盘,挂载硬盘以及控制台添加硬盘过程省略。
shell
lsblk
nvme1n1 259:5 0 3.6T 0 disk
└─nvme1n1p1 259:6 0 16M 0 part 2、Proxmox VE pve硬盘直通
当pve宿主机出现重启之后,配置没有保存,又会恢复到最开始的状态。
shell
# 加载对应的内核模块
echo vfio_virqfd >> /etc/modules