背景

一台 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

删除后有两个变化,务必注意:

  1. 故障槽位上的盘变成 Unassigned(未分配)状态
  2. 阵列字母会被重新编排:删除 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. 经验小结

  1. 换盘前先记录:pd all show detail 导出留档,记下旧盘序列号、槽位号,新盘插回同一槽位。
  2. 删阵列会导致字母重排:后续操作认准 port:box:bay 槽位号,别依赖 array 字母。
  3. 本例是 RAID0 所以要删了重建;如果坏盘属于 RAID 1/5/10 等冗余阵列,换上新盘后控制器会自动 rebuild,不需要删逻辑盘。
  4. 新盘容量不能小于原盘,否则无法按原大小重建。
  5. ld delete / create 可在线执行,但生产环境建议低峰操作;删除前先 umount 该盘对应的挂载点。
  6. 操作完成后 ld all show 全部 OK,再到 OS 侧核对 /dev/sdX,收工。
文章作者: emporer
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Emporer-Linux!
喜欢就支持一下吧