在Linux中重新枚举并使用PCIe SSD而无需关闭

时间:2016-03-15 21:05:07

标签: linux disk ssd

美好的一天,

我目前正在开展一个项目,其中PCIe SSD不断被换出并通过VDBench和Iometer等基准程序进行测试。我现在遇到的问题,只是在Linux端(在Windows上运行正常),如果驱动器在初始启动时没有打开,它们永远不会出现在GParted或Disks下。这就是我所做的:

冷启动,PCIe附加卡SSD已关闭。然后通过逻辑控制的直通卡上电,确保电源和短路不成问题。

我打开设备,然后运行:

sudo sh -c "echo 1 > /sys/bus/pci/rescan"

执行

lspci -tv

设备显示树中没有问题。但是,当我在磁盘下检查时,它不存在。

我尝试过一系列不同的命令,但没有一个命令可以帮助我。我试过了

partprobe

哪个没做任何事。和

sudo sh -c "echo 1 > /sys/bus/pci/devices/0000:82:00.0/remove"

跟进另一个重新扫描:

sudo sh -c "echo 1 > /sys/bus/pci/rescan"

以及:

sudo sh -c "echo 1 > /sys/bus/pci/devices/0000:82:00.0/enable"

仍然没有。还跑了:

dmesg

其中包括:

[   68.128778] pci 0000:82:00.0: [8086:0953] type 00 class 0x010802
[   68.128797] pci 0000:82:00.0: reg 0x10: [mem 0x00000000-0x00003fff 64bit]
[   68.128820] pci 0000:82:00.0: reg 0x30: [mem 0x00000000-0x0000ffff pref]
[   68.133398] pci 0000:84:00.0: [1c58:0003] type 00 class 0x010802
..............................

[   68.141751] nvme 0000:82:00.0: enabling device (0100 -> 0102)
..............................

我确实在dmesg中看到很多其他地址失败,例如:

[ 1264.718446] pcieport 0000:03:04.0: BAR 14: no space for [mem size     0x00400000]
[ 1264.718448] pcieport 0000:03:04.0: BAR 14: failed to assign [mem size 0x00400000]
[ 1264.718451] pcieport 0000:03:04.0: BAR 13: no space for [io  size 0x1000]
[ 1264.718453] pcieport 0000:03:04.0: BAR 13: failed to assign [io  size 0x1000]

虽然我觉得那些与我正在做的事情无关,但我很高兴有人证明我错了。

因此,在所有这些尝试之后,是否有人知道是否有方法(或者甚至可能)扫描此PCIe附加NVMe SSD并且能够在不重新启动的情况下使用它?我还看了一些针对基于sata的驱动器引用重新扫描的其他硬盘驱动器的一些线程,但这不是那个,因此引用它也不会有帮助。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我尝试这样做是为了节省重启时使用的时间。那时的PCI设备驱动程序最好是 dodgy ,关于成功重新扫描并连续获取所有鸭子。该设备是一个FPGA,为我正在开发的设备驱动程序提供专有的接口设备。这是内核2.6.30-在2014年3月左右尝试过。我的(不合标准但可接受的)解决方案是重启系统。