问题复现
爱国者P7000Z(以及所有使用MAXIO 1602主控的PCIe4.0固态)有个坑,两块以上只认一块。 经分析发现,是联芸MAP1602主控的共性问题。 给官方Linux内核提出了patch,内核6.4版本开始会集成进来。
解决方法
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -3424,6 +3424,8 @@ static const struct pci_device_id nvme_id_table[] = {
.driver_data = NVME_QUIRK_BOGUS_NID, },
{ PCI_DEVICE(0x1e4B, 0x1202), /* MAXIO MAP1202 */
.driver_data = NVME_QUIRK_BOGUS_NID, },
+ { PCI_DEVICE(0x1e4B, 0x1602), /* MAXIO MAP1602 */
+ .driver_data = NVME_QUIRK_BOGUS_NID, },
{ PCI_DEVICE(0x1cc1, 0x5350), /* ADATA XPG GAMMIX S50 */
.driver_data = NVME_QUIRK_BOGUS_NID, },
{ PCI_DEVICE(0x1dbe, 0x5236), /* ADATA XPG GAMMIX S70 */
PVE 8.0 beta最新,内核是6.2.16-1-pve,所以目前不支持联芸MAP1602主控的多块NVMe同时使用。 现在需要使用的,修改不难, 下载源码,找到代码中drivers/nvme/host/pci.c添加这两行
{ PCI_DEVICE(0x1e4B, 0x1602), /* MAXIO MAP1602 */
.driver_data = NVME_QUIRK_BOGUS_NID, },
重新编译安装,就好了。
20230616 分享编译好的内核,直接用就好,基于PVE 8.0beta源码6.2.16-1修改: 链接: https://pan.baidu.com/s/1qdF8AVyjUOX_gL8Fxe9g6A?pwd=CHH1 提取码: CHH1
20230708 分享编译好的内核,直接用就好,基于PVE 8.0正式版源码6.2.16-3修改: 链接: https://pan.baidu.com/s/1juvlOR6uA7G53eiCJTAzGw?pwd=CHH2
20230712 分享编译好的内核,直接用就好,基于PVE 8.0正式版源码6.2.16-4修改: 链接: https://pan.baidu.com/s/1xHShA5LBaVl2uWH4cIUHGg?pwd=CHH3 提取码: CHH3
20230713 分享基于PVE 8.0正式版源码6.2.16-4修改的4TB未验证测试版,按114楼增加了延时属性。 链接: https://pan.baidu.com/s/1Wgbva1awvubtBFdxhx0vaA?pwd=CHH4 提取码: CHH4
20230908 分享基于PVE 8.0正式版源码6.2.16-12修改的4TB未验证测试版,增加延时属性及初始化延迟。 链接: https://pan.baidu.com/s/1D-0qjzBop9d_tOcRu7bs3Q?pwd=CHH5 提取码: CHH5
安装方法: 上传文件至PVE,登录PVE执行:
dpkg -i *.deb
重启即可。