HPE Smart Array 更换故障硬盘后重建 RAID0(ssacli 实战记录)
背景
一台 HPE 服务器(Smart Array P840ar 阵列卡),8 块 600G SAS 盘每块单独做成一个 RAID0 逻辑盘。其中一块盘故障,对应逻辑盘状态变为 Failed,现场已把故障盘拔出、同槽位换上新盘。
RAID 0 没有任何冗余,控制器不会自动重建,必须手动「删除故障逻辑盘 → 用新盘重建 RAID0」。
⚠️ 重要提醒:RAID 0 坏盘即丢数据,删除重建后原数据不可恢复。操作前务必确认该盘数据可弃或已备份。
1. 安装 ssacli
# 先校验包完整性
sha256sum ssacli-4.21-7.0.x86_64.rpm
# a911dfcf2855d36fe32f064c7c0a3454282aa9d1710548e6aaf3ece2bf167c52
# 安装(提示 NOKEY 警告可忽略,HP 官方包未内置 GPG key)
rpm -ivh ssacli-4.21-7.0.x86_64.rpm
# 确认安装位置
which ssacli
# /usr/sbin/ssacli
注意:ssacli 不支持 --help 参数(会报 Syntax error),直接敲 ssacli help 查看语法,更细的帮助用 help create、help delete、help show 等子命令查看。
2. 查看控制器状态
# 控制器信息
ssacli ctrl all show
# 控制器 / 缓存 / 电池状态
ssacli ctrl all show status
Smart Array P840ar in Slot 0 (Embedded)
Controller Status: OK
Cache Status: OK
Battery/Capacitor Status: OK
3. 定位故障盘
# 物理盘列表
ssacli ctrl slot=0 pd all show
# 逻辑盘列表 —— 找到 Failed 的那块
ssacli ctrl slot=0 ld all show
输出中可以看到故障点:
Array F
logicaldrive 6 (558.88 GB, RAID 0, Failed)
再看详情(逻辑盘、阵列、新换的物理盘):
ssacli ctrl slot=0 ld 6 show detail # 故障逻辑盘详情
ssacli ctrl slot=0 array F show detail # 所在阵列详情
ssacli ctrl slot=0 pd 1I:1:2 show detail # 故障槽位上的新盘详情
pd show detail 重点确认:
Status: OK—— 新盘已正常识别Serial Number—— 与换下的旧盘序列号对比,确认是块新盘Size: 600 GB—— 容量不小于原盘Drive exposed to OS: False属正常现象,物理盘在控制器后面,OS 只能看到逻辑盘
盘位命名
1I:1:2= port:box:bay(端口:背板:槽位),对应服务器前面板从左数第 2 块盘,拔插盘时就按这个编号找位置。
4. 删除故障逻辑盘
ssacli ctrl slot=0 ld 6 delete
Warning: Deleting an array can cause other array letters to become renamed.
Warning: Deleting the specified device(s) will result in data being lost.
Continue? (y/n) y
删除后有两个变化,务必注意:
- 故障槽位上的盘变成
Unassigned(未分配)状态 - 阵列字母会被重新编排:删除 Array F 后,后面的 G、H 顶上来变成 F、G
Array F physicaldrive 1I:1:3 ← 原来的 Array G
Array G physicaldrive 1I:1:4 ← 原来的 Array H
Unassigned physicaldrive 1I:1:2 ← 新换上的盘
所以后续操作一律以物理盘槽位号(如 1I:1:2)为准,不要凭 array 字母想当然,否则容易误删别的盘。
5. 重建 RAID0
ssacli ctrl slot=0 create type=logicaldrive drives=1I:1:2 raid=0
创建后重新确认:
ssacli ctrl slot=0 pd all show # 1I:1:2 回到 Array F,不再是 Unassigned
ssacli ctrl slot=0 ld all show
Array F
logicaldrive 6 (558.88 GB, RAID 0, OK) ← 状态恢复 OK
创建时同样会提示 "array letters renamed"——新阵列占回 F 的位置,字母编排恢复原样。
6. 在 OS 里找到新盘
重建后 OS 里的块设备顺序可能变化,需要确认逻辑盘和 /dev/sdX 的对应关系:
lsblk -o NAME,SIZE,MODEL,SERIAL
但所有逻辑盘 MODEL 都是 LOGICAL VOLUME、SERIAL 都是控制器序列号,无法区分,这时用两种方法:
方法一:SCSI LUN 编号对应(逻辑盘 N = LUN N-1)
udevadm info /dev/sdf | grep by-path
# E: ID_PATH=pci-0000:03:00.0-scsi-0:1:0:5
0:1:0:5 即 LUN 5 → 第 6 个逻辑盘(logicaldrive 6)→ /dev/sdf。
方法二:WWN 精确匹配(最可靠)
ssacli ctrl slot=0 ld 6 show detail | grep -i unique
# Unique Identifier: 600508B1001C****************************
udevadm info /dev/sdf | grep -i id_wwn
# E: ID_WWN=0x600508b1001c********
# E: ID_WWN_VENDOR_EXTENSION=0x60**********************
# E: ID_WWN_WITH_EXTENSION=0x600508b1001c****************************
(输出已脱敏)
对比方法:逻辑盘 Unique Identifier 的前 16 位(600508B1001C 开头部分)就是它的 WWN,而 udevadm 里的 ID_WWN_WITH_EXTENSION(= ID_WWN + ID_WWN_VENDOR_EXTENSION)正好对应完整的 Unique Identifier,两边对得上(不区分大小写)就是同一块盘。确认无误后再做分区、格式化、挂载等后续操作。
7. 完整命令速查
ssacli ctrl all show # 所有控制器
ssacli ctrl all show status # 控制器/电池状态
ssacli ctrl slot=0 pd all show # 物理盘列表
ssacli ctrl slot=0 pd 1I:1:2 show detail # 指定物理盘详情
ssacli ctrl slot=0 ld all show # 逻辑盘列表
ssacli ctrl slot=0 ld 6 show detail # 指定逻辑盘详情
ssacli ctrl slot=0 array F show detail # 指定阵列详情
ssacli ctrl slot=0 ld 6 delete # 删除逻辑盘
ssacli ctrl slot=0 create type=logicaldrive drives=1I:1:2 raid=0 # 建 RAID0
8. 经验小结
- 换盘前先记录:
pd all show detail导出留档,记下旧盘序列号、槽位号,新盘插回同一槽位。 - 删阵列会导致字母重排:后续操作认准
port:box:bay槽位号,别依赖 array 字母。 - 本例是 RAID0 所以要删了重建;如果坏盘属于 RAID 1/5/10 等冗余阵列,换上新盘后控制器会自动 rebuild,不需要删逻辑盘。
- 新盘容量不能小于原盘,否则无法按原大小重建。
ld delete/create可在线执行,但生产环境建议低峰操作;删除前先 umount 该盘对应的挂载点。- 操作完成后
ld all show全部 OK,再到 OS 侧核对/dev/sdX,收工。