问题现象
BMC重启,Disk12会出现SN替换的SEL日志,实际上环境没有人动。
分析后发现,Disk12的信息先是Nvme盘的信息,后被替换成SATA盘。Disk12实质上是Nvme盘,但是因为get_pd_list获取到的有异常的pd对象,一直没有被绑定到实质的物理盘上。测试跑长时间之前触发了Nvme盘Web点灯,导致这个pd被绑定到Nvme上,进而刷新了Nvme盘的信息。
这里有两个解释不清楚的地方
1: 异常的pd对象是从哪里来的?为什么get_pd_list和compare没法消除掉;
2:异常的pd绑定到Nvme盘后,从哪里获取的SATA盘信息,刷新到了Nvme盘上?刷新出来的信息经过与测试对齐,是不在环境上的。
信息1:BMC时间+8对应自动化时间
信息2:Disk12是Nvme盘。
pcie_type读取出来一直是1(Nvme),而且对象加载次数与其它Nvme盘保持一致,非常稳定。这对BMC重启产生的概率性问题无影响,基本肯定是Nvme盘。

Nvme盘的信息:
“ModelNumber”: “SAMSUNG MZWL63T8HFLT-00B07”,
“SerialNumber”: “S7LZNG0Y200253”,
“FirmwareRev”: “LDD5902Q”,
“PCIVendorID”: “0x144d”,
“PCIVendorSubsystemID”: “0x144d”,
“IEEEOUIIdentifier”: “0x002538”,
“Manufacturer”: “Samsung”,
“SerialNumber”: “N/A”,
“Model”: “SAMSUNG MZWL63T8HFLT-00B07”,
Disk2(0:36:37:0)绑定的SATA盘的信息:
Device Name : Disk9
Manufacturer : TOSHIBA
Serial Number : 20G0A23MFDWG
Model : AL15SEB120N
Firmware Version : 0807
Health Status : Normal
Firmware State : ONLINE
Power State : Spun Up
Media Type : HDD
Interface Type : SAS
Capable Speed : 12.0 Gbps
Negotiated Speed : 12.0 Gbps
Drive Temperature : 36
Capacity : 1.092 TB
信息3:Nvme盘和误产生的SATA盘的信息如下:
异常的SN:20G0A23MFDWG,东芝盘
正常的SN:S7LZNG0Y200253,三星Nvme盘。
2026-06-09 19:35:32.128770 frudata NOTICE: sn_replace.lua(62): BoardSerialNumber changed from 20G0A23MFDWG to S7LZNG0Y200253
2026-06-09 19:36:14.175495 frudata NOTICE: sn_replace.lua(62): BoardSerialNumber changed from S7LZNG0Y200253 to 20G0A23MFDWG
基本上启动后30-40s后,信息先刷新成S7LZNG0Y,再刷新回20G0A23
ID : 12
Device Name : Disk12
Manufacturer : Samsung
Serial Number : 20G0A23MFDWG
Model : AL15SEB120N
Firmware Version : 0807
Media Type : HDD
Interface Type : SAS
ID : 13
Device Name : Disk13
Manufacturer : Samsung
Serial Number : S7LZNG0Y200253
Model : SAMSUNG MZWL63T8HFLT-00B07
Firmware Version : LDD5902Q
Media Type : SSD
Interface Type : PCIe
信息4:
: Nvme盘被RAID卡管理,也会通过SP686C刷新信息,不单单是VPD
load nvme-mi无一例外的走入了两次,入口只有
问题4:pd在热插拔以后会触发update_pd_list函数,变成del_pd然后设置pd invalid,为什么Nvme依然能够匹配上?
总结下来:pd绑定到Nvme的直接原因是Nvme在Web上的点灯;
pd绑定的间接原因是:pd 0:36:37:0,没有实际绑定的物理盘,但是pd:invalid没有被置位,导致pd对象点灯流程一直保留,从而在后续Nvme盘手动点灯的时候被触发。
那么 0:36:37:0到底是从哪来的?为什么没能成功点灯,是因为环境上有一块坏掉的物理盘吗?
大概脉络清楚了:未知原因保留了0:36:37:0这个pd,然后触发Web Nvme点灯,从而导致Nvme盘与0:36:37:0绑定,从RAID刷新信息。后续则不依赖于Nvme点灯,直接从缓存进行绑定。
- 0:36:37:0是怎么来的?为什么没有这块盘,会获取到这么一个逻辑盘对象?
- 这块SAS盘实际上根本不存在,怎么会能够刷新信息?
- Nvme是如何通过数据库,与0:36:37:0进行绑定的?就是Drive对象的一些属性值是怎么来的,是不是也有持久化,也从pd更新过来的?
调试命令
复位持久化数据库地址:/opt/bmc/pram/persistence/per_reset.db
查询命令:SELECT * FROM persist_table where table_name=‘t_storage_drive’;
删除命令:DELETE FROM persist_table WHERE table_name = ‘t_storage_drive’ AND prime_key = ‘Id:7’;
DELETE FROM persist_table WHERE table_name = ‘t_storage_drive’ AND prime_key = ‘Id:5’;
整体流程梳理
2026-06-08T12:53:47:整机AC
2026-06-09 02:02:19 BMC重启
2026-06-09 02:05:27.680629 pd 0:26:30:0 add,pd对象添加完毕,没有pd 0:36:37:0
2026-06-09 02:05:47 Disk2绑定到 0:5:2:0,
2026-06-09 02:05:50.170794 0:26:30:0绑定到 Disk30
2026-06-09 02:10:30.231450 pd_identify_service.lua(186): pd 0:36:37:0 add [repeated 6 times in 0s from 2026-06-09 02:05:27.680629,显示从pd 0:26:30:0 add开始重复了很多次?!难道这个跟0:26:30:0是同一个东西?
2026-06-09T06:00:21 OS重启
2026-06-09 06:19:20 Disk2拔出,06:20:27 Disk2插入(换盘)
2026-06-09 06:20:49:0:36:37:0 pd绑定到Disk2;
2026-06-09 07:55:52之前:20G0A23MFDWG(SAS)在Disk2上,S7LZNG0Y200253在Disk12上。
2026-06-09 07:55:52触发AC,信息全部清空。
2026-06-09T07:55:58.945032+00:00 2102315PGC10S1100002 om: 3,2026-06-09 07:55:52,Normal,0x1A00000D,Asserted,iBMC is restarted after AC power supply is restored.
2026-06-09T07:56:42.944385+00:00 2102315PGC10S1100002 om: 4,2026-06-09 07:56:41,Normal,0x12000005,Asserted,Chassis cover is open.
2026-06-09T07:57:20.643976+00:00 2102315PGC10S1100002 om: 5,2026-06-09 07:57:20,Normal,0x02000023,Asserted,The disk Disk2 is replaced from SN(20G0A23MFDWG) to SN(AN3SR8XN) (SN:AN3SR8XN).
2026-06-09 07:56:53 看门狗上报,差不多RAID卡识别与逻辑盘已缓存(?)
2026-06-09 07:56:47 获取到所有的pd对象列表,开始尝试点灯。
2026-06-09 07:57:15 Disk2绑定到0:21:2:0上。
2026-06-09 07:57:15.522616 storage NOTICE: drive_object.lua(872): drive identify, pd = 0:21:2:0, drive = Disk2
2026-06-09 07:57:15.529523 storage NOTICE: pd_identify_service.lua(476): update drive2 persistence data
2026-06-09 07:57:15.530625 storage NOTICE: pd_identify_service.lua(477): update info is 0, 2, 0
2026-06-09 07:57:20 Disk2替换为另一块SAS盘。 — 应该是匹配上以后从RAID获取信息,才打印的SN变更,实际盘更换时间应该在这之前。
2026-06-09T07:57:20.643976+00:00 2102315PGC10S1100002 om: 5,2026-06-09 07:57:20,Normal,0x02000023,Asserted,The disk Disk2 is replaced from SN(20G0A23MFDWG) to SN(AN3SR8XN) (SN:AN3SR8XN).
2026-06-09 11:06:35 Nvme12 触发点灯
2026-06-09 11:06:35 WEB,Administrator@192.168.109.77,storage,Start locating Disk12 successfully
2026-06-09 11:06:35.064405 storage NOTICE: rpc_service_drive.lua(59): [Storage]Start SetLocationIndicatorState of Disk12
2026-06-09 11:06:35.200959 storage NOTICE: rpc_service_drive.lua(78): [Storage]Successfully SetLocationIndicatorState of Disk12.
2026-06-09 11:06:44.259641 storage NOTICE: drive_object.lua(872): drive identify, pd = 0:36:37:0, drive = Disk12
2026-06-09 11:06:44.264548 storage NOTICE: pd_identify_service.lua(476): update drive12 persistence data
2026-06-09 11:06:44.264974 storage NOTICE: pd_identify_service.lua(477): update info is 0, 37, 0
2026-06-09 12:59:50 CLI,Administrator@192.168.109.77:63042,maca,Reset BMC start
如果说这次启动pd对象已经获取到值了,然后在重启BMC以前触发了Nvme盘点灯,并且属性值有复位持久化,那就很有可能在重启以后,数据保留原先的值。
怀疑点1:pd对象的值,是否在获取pd_list后,就能有值缓存在RAID卡里?不确定SP686C的机制;
怀疑点2:硬盘信息,复位是否会丢失?印象中自验证是会丢的,还需要确认。



