问题背景:在一个物理节点上,两个做成单盘raid0的osd数据盘:sdd、sde,直接拔掉两个数据盘交换插槽位置插入。发现系统无法识别到硬盘了。再把两个盘拔出,只将sdd插回它原先的插槽位置,发现sdd依然无法被系统识别到。
问题定位:登陆到发生该问题的物理节点环境,先使用如下命令查看raid卡上的所有物理硬盘设备情况:
/opt/MegaRAID/MegaCli/MegaCli64 -PDList -aAll
主要观察每一块物理硬盘的Firmware state属性,发现有一个插槽位置的硬盘Firmware state: Unconfigured(bad)。说明插入的硬盘已经被raid卡识别到了,需要重新进行配置,让该盘上线,才会被操作系统识别到。
问题解决:
- 1、使用如下命令将硬盘的Unconfigured(bad)-> Unconfigured(good):
/opt/MegaRAID/MegaCli/MegaCli64 -PDMakeGood -Physdrv "[252:3]" -a0
[252:3]:252为raid卡的Enclosure Device ID,3为硬盘的Slot Number,-a0表示物理节点上的第0号控制器。这三个参数都可以通过查看raid卡上的所有物理硬盘设备命令得到。
- 2、使用如下命令将硬盘的Foreign State:Foreign -> Foreign State:None,目的是清除硬盘的foreign状态,刚插入的盘会被标记为外来硬盘。
/opt/MegaRAID/MegaCli/MegaCli64 -cfgforeign -clear -a0
- 3、先查看raid卡的缓存是否还保留有之前因拔盘导致原先raid0信息的残留,使用如下命令查看:
/opt/MegaRAID/MegaCli/MegaCli64 -GetPreservedCacheList -a0
- 4、在我处理的过程中,确实发现有原先raid0的虚拟设备信息,使用如下命令将其清除掉:
/opt/MegaRAID/MegaCli/MegaCli64 -DiscardPreservedCache -L4 -a0
-L4表示保留在缓存中的raid0的虚拟设备编号。当我运行该清除命令后,并不能成功的清除掉,报了一个段错误的信息。发生了此错误大多是由于raid卡硬件本身发生了问题,需要重启物理节点机器,进入raid管理界面进行清除。
使用ipmi登陆到物理节点,必须先在ecas前端界面将该节点设置为维护模式才能重启节点。重启节点后,进入raid管理界面,点击start按钮,将virtual Drive:4 Missing清除掉。退出raid管理界面,进入操作系统。
- 5、使用步骤3中的命令,发现已经是干净的。此时可以直接将该硬盘重新做成raid0上线,使用如下命令:
-
/opt/MegaRAID/MegaCli/MegaCli64 -cfgldadd -r0 [252:3] WT Direct -a0
-r0表示制作成raid0级别,[252:3]上文已经解释过,WT Direct表示该raid0使用的读写策略为WriteThrough。成功执行该命令,使用lsblk,发现该硬盘已经被操作系统识别到。
- 6、使用如下命令将Foreign State:Foreign状态的硬盘中的raid信息倒入到raid控制器,直接上线:
/opt/MegaRAID/MegaCli/MegaCli64 -cfgforeign -Import -a0