NetApp FAS8200 控制器启动报错-PCIe device missing
下面是近期遇到的一个case,我们销售的一个NetApp FAS8200控制器在客户现场运行了一段时间,又挂了。试图boot_ontap 重启操作系统,报 PCIe device missing error detected. Abort AUTOBOOT。翻译成人话,就是有个PCIe的设备找不到了,然后就中断启动了。下面是具体的报错信息:

遇到这个问题,下面是故障处理的思路:
- 查看是那个PCIe设备找不到了,这个通过前面的报错信息或者loader下的命令 show device都可以查到。在我们这个报错中的设备是 PCI NTB for HA。
- 如果这个设备是板载的,就是主板上的,可以做的就是放电重启控制器看是否可以复位,如果不行这个控制器就废了。如果这个设备是外界的PCIe的扩展卡,把这个卡换了问题就解决了。
- 还有一个方案,如果这个设备不是很重要的设备,比如测试设备,其实是可以在loader的环境变量中添加不检查PCIE的设置,这样就可以正常启动了。
其实写这个文章的更重要的目的是介绍一下PCIe的概念,理解这个概念,对于不管是存储系统还是服务器,看日志,做troubleshooting故障诊断都非常有帮助。
老规矩,码字不易,欢迎点赞、关注、添加V:StorageExpert,下次更新不迷路。
什么是 PCIe?
在现代电脑、服务器和企业级存储设备中,PCIe是一个极其重要但又经常被忽视的关键技术,PCIe(Peripheral Component Interconnect Express),这个直接翻译过来就是“外围设备高速互连总线”。
无论是你插的显卡、GPU、NVMe 固态硬盘、网卡,还是存储系统(比如 Dell EMC、NetApp、Isilon、PowerStore)中的 SAS HBA、NVRAM 卡、FC 光纤卡,它们都通过 PCIe 与 CPU 进行高速通信。PCIe 是连接系统内部所有功能模块的 高速立体交通体系。
来看看PCIe的定义?PCIe 是一种高速点对点通信架构,用于连接 CPU 与各种扩展设备,是现代计算机内部的高速公路系统。
它负责连接所有高速外设,包括:
- 显卡
- NVMe SSD
- 网卡(Ethernet、RDMA、RoCE)
- 光纤卡(Qlogic/Emulex)
- SAS HBA、RAID 控制器
- FPGA、AI 加速卡
- 存储系统中的 NVRAM、NVMe Cache、BMC(NetApp有些叫做SP)
PCIe 就是这些设备与 CPU 沟通的唯一“高速通道”。
PCIe 的三大核心优势:
1. 点对点通信(每个设备独占通道)
老式 PCI 是“共享总线”,带宽会被瓜分。
PCIe 则是每个设备有自己的专用高速通道。
就像旧时代的公交车变成了每辆车独占高速车道。
2. 高度可扩展(x1 / x4 / x8 / x16)
你可以根据设备需求决定车道数量:
- NVMe:x4
- 显卡:x16
- HBA / NIC:x8
车道越多,带宽越高,非常灵活。
3. 多代速度提升巨大(每代翻倍)
代数 | 每 Lane 单向带宽 |
PCIe Gen1 | 250 MB/s |
PCIe Gen2 | 500 MB/s |
PCIe Gen3 | 1 GB/s |
PCIe Gen4 | 2 GB/s |
PCIe Gen5 | 4 GB/s |
PCIe Gen6 | 8 GB/s(未来方向) |
NVMe SSD 之所以快,就是因为它直接跑 PCIe 通道。
PCIe 中的重要概念
这个很重要呀,如果要做故障诊断,看log,经常会看到这些方面的报错或者information。
PCIe 的结构是 树状结构(Tree Topology)。
理解这三者,你就彻底理解 PCIe。
① Root Complex(RC)——CPU 内部的“交通枢纽 + 行政中心”
Root Complex 是 CPU 内部的一块逻辑模块,负责:
- 分配 PCIe 地址(BDF:Bus/Device/Function)
- 枚举整个 PCIe 树
- 管控 PCIe 链路速度和 Lane 数量
- 建立 PCIe 设备与内存之间的映射(DMA)
- 管理 AER(高级错误报告)
一套系统,只有一个RC,就是Root Complex,它是整个 PCIe 世界的“起点”和“管理核心”。
② Root Port——从 CPU 伸出的“物理 PCIe 端口”
Root Port 是 Root Complex 下的实际 PCIe 通道。
比如:
- Root Port #1(x16)→ 给显卡
- Root Port #2(x8) → 给 SAS HBA
- Root Port #3(x4) → 给 NVMe SSD
Root Port 决定了设备链路的物理能力。
③ Endpoint——最终设备(显卡、网卡、NVMe…)
所有能够“接收” PCIe 信号的设备都叫 Endpoint。
它们是 PCIe 的“树叶”,例如:
- 显卡
- NVMe SSD
- 25Gb/100Gb 网卡
- SAS HBA
- RAID 卡
- FPGA
- AI 加速器
- 存储控制器中的 NVRAM / Journaling 卡
④ PCIe Switch(PLX/SwitchTec)——“扩展树干”
当 Root Port 数量不足时,需要 PCIe Switch 来“扩张 PCIe 网络”。
它能做到:
- 把 x16 分成多个 x8/x4/x2 链路
- 同时连接很多 PCIe 设备
- 保证带宽几乎不损失(非阻塞)
在存储控制器(PowerStore / NetApp AFF / Unity XT)中非常常见。这个更多的是用来管理磁盘的,如NVMe磁盘等,所以看log的时候,经常会看到PLX的字样出来。
PCIe 的链路和地址是怎么分配的?什么是 BDF?
每个 PCIe 设备在系统启动时都会被分配一个唯一的地址:
Bus : Device . Function (简称 BDF)
03:00.0 → NVMe SSD(Bus 3,设备号0,功能0)
65:00.1 → 双口 NIC 的第二个端口
这个过程叫 PCIe 枚举(Enumeration),由 Root Complex 完成。
重启后 BDF 会改变吗?
这个问题困扰过我,就是怎么找到PCIe的地址,如果实在没有官方的文档,我一般都是拿一台正常的机器的各种log和有问题的去对比,然后找故障点。这样问题就来了,不同的设备,甚至同一台设备如果重启后,这些PCIe的地址是否会发生变化呢?
要回答这个问题,要从下面的两个角度来回答。对于存储控制器,PCIe的设备可以分为两大来,一类是控制器板子上的,焊死的,改变不了。还有一类是可以通过模块来扩展的。
板载设备(Onboard)
BDF 基本不会改变。
原因:
- 线路焊死在主板上
- Root Port 分配固化
- BIOS 初始化顺序稳定
可扩展设备(Add-in Card)
这个就是通过IO module来扩展的,几乎所有的存储设备都有这个。当然入门级的一般都是通过daughter card,就是mezzaline卡的方式来实现的。高端存储设备就有很多的扩展口。
这种设备的BDF 有可能改变,只是有可能,大部分情况还是不变的。
改变来自:
- 插拔设备
- 换卡(不同功能数量)
- 改变 BIOS 设置(Above 4G、SR-IOV、bifurcation)
- 服务器 NVMe 背板热插拔
- PCIe Switch(PLX)下机插槽变化
- BIOS 更新导致根端口初始化顺序改变
总结一下:板载设备是稳定、扩展的PCIe设备是有可能变化的。
PCIe 在服务器与存储系统中的真实应用
PCIe 不只是电脑里的“显卡插槽”,在专业设备中它更重要:
在服务器中
PCIe 连接:
- 40Gb/100Gb NIC
- HBA / RAID
- NVMe SSD
- GPU
- FPGA、DPU
- 板载 BMC(通过 PCIe-USB 桥)
在企业级存储系统中
PCIe 是整个系统的数据血管:
- SAS / NVMe 后端链路
- 前端多端口高速网络
- 负载均衡 ASIC / FPGA
- NVRAM(写入日志)
- 缓存加速卡
- RAID 算法引擎
- PCIe Switch(PLX)用于扩展几十个设备
整个存储控制器的性能几乎完全依赖 PCIe 架构的合理布局。
写在最后
PCIe的概念非常重要,是现代计算机与存储系统内部最重要的高速通信架构。要理解Root Complex 是根,Root Port 是枝干,Switch 是树干扩展,Endpoint 是树叶这些PCIe的概念,要理解PCIe的地址BDF。有了这些概念,您看log日志的时候就能看明白哪里报错,哪里出现问题。然后根据日志有针对性的去给出解决方案。
