非天池机型服务器,RAID卡下接了华为的SATA盘,按天池SEU适配后无硬盘归属及信息,根据日志定位到代码判断硬盘在位需要点灯,将代码修改成遍历硬盘之后就有硬盘归属及信息了
请问该点灯接口操作的是点灯的SMC命令字吗?如果是的话针对该机型无点硬盘灯SMC命令字的情况该怎么处理这个问题,不知道这个临时规避方案是否合适?
非天池机型服务器,RAID卡下接了华为的SATA盘,按天池SEU适配后无硬盘归属及信息,根据日志定位到代码判断硬盘在位需要点灯,将代码修改成遍历硬盘之后就有硬盘归属及信息了
请问该点灯接口操作的是点灯的SMC命令字吗?如果是的话针对该机型无点硬盘灯SMC命令字的情况该怎么处理这个问题,不知道这个临时规避方案是否合适?
1.你的代码修改前:
是不是只打印了:
log:notic(‘%s locate’, pd.key)
和
log:info(‘locate %s failed’, pd.key) —把log:info改成log:notice
如果打印了log:info(‘locate %s failed’, pd.key) 那就表示点灯了,没有检测到硬盘有灯被点亮。
被你注释掉的代码:
只是用于检测环境是否有灯被点亮,如果没有那就提前退出下面的流程。
2.你说带内点灯,没有返回错误码,建议近端看一下,是不是有灯在亮
上文截图日志是修改代码前的日志,log:notic(‘%s locate’, pd.key)有打印,log:info(‘locate %s failed’, pd.key) 无打印;
查看过,硬盘上没看到有灯;
恢复代码,并加入日志打印查看:
![]()
如我上文修改代码截图,关键在于if self:locate_pd(pd, drive) then这一部分导致定位失败,我当时定位到这里的问题后,就直接使用了locate_pd里使用的函数map_pd_to_drive,跳过if not self:map_allowed(pd, drive) then判断,快速验证是否这里影响
没有再去跟踪map_allowed的问题
继续跟踪map_allowed函数,添加日志
日志报错:
[map_allowed] loop 1: drive:is_presence()=true, pd:is_valid()=true, drive:is_being_located()=false
最终还是跟踪到硬盘点灯相关
天池机型该代码是没问题的,且据我观察天池机型上,不管是raid连硬盘,还是nvme直通,前者raid点灯,后者通过smc点灯,实际点的是硬盘背板上的灯,而不是硬盘上的灯。所以在非天池机型没有硬盘背板等各种板,没有硬盘Locate灯的情况下,是否应该修改这部分代码呢?
按照你不点灯,来了就映射的修改,应该也可以,第一次先遍历哪个pd和drive就映射上,通过函数update_identified_data持久化映射信息,后续bmc复位后,应该可以通过identify_pd_by_persistence_data函数建立映射。