简介:这份LSI RAID配置/修复教程手册面向使用LSI RAID控制器的服务器运维人员与存储工程师,针对磁盘阵列配置、跨接设置及故障修复等实际问题提供操作指引。资源包内含1个doc文档,压缩包约921KB,以图文步骤形式呈现,便于对照操作界面逐步查阅。手册围绕Configure配置菜单展开,涵盖New Configuration新建逻辑驱动器、物理驱动器选择与添加、阵列跨接、逻辑驱动器配置等关键环节,并说明F2、F3、F10等热键用途,同时提示磁条大小一致、数据备份、PERC4/Di仅支持RAID1与5跨接等注意事项,帮助读者理解RAID0/1/5/10/50的组建条件与写入策略设置。目前已有1167人学习,适合需要快速掌握LSI阵列配置与修复思路的技术人员参考。
1. LSI RAID 配置与修复:从一块掉线盘说起
机房巡检时发现一台存储节点告警,登录带外管理一看,LSI RAID 卡下的虚拟盘状态是Degraded,一块成员盘被标成Failed。这种场景下,运维人员最关心的不是"RAID 是什么",而是三件事:现在数据还在不在、能不能在线把盘换回来、换完之后怎么确认重建真的跑起来了。LSI(现属 Broadcom 体系)的 MegaRAID 系列是服务器里最常见的硬件 RAID 方案之一,配套工具主要是storcli(新一代)和MegaCli(老一代),配置、巡检、修复基本都围绕这两个命令行工具展开。这篇笔记面向的是手里真有 LSI 卡、需要动手配阵列或救故障盘的工程师,从建 VD 讲到掉盘修复,把参数、命令和踩过的坑都摊开说清楚。新手可以照着命令走,熟手可以重点看参数边界和排查思路。
2. 先搞清楚 LSI RAID 的层级模型和工具选型
动手之前必须把 LSI 的术语体系理顺,否则命令敲下去连自己在操作哪一层都不知道。MegaRAID 的抽象是三层:物理盘(PD,Physical Drive)、虚拟盘(VD,Virtual Drive)、以及承载 VD 的磁盘组(DG,Drive Group)。一块物理盘可以被划进某个 DG,DG 上再切出一个或多个 VD 对外呈现为操作系统看到的块设备。很多人把 DG 和 VD 混为一谈,结果扩容时切错对象,这是血泪经验里最常见的一类翻车。
2.1 PD、VD、DG 三层到底谁管谁
物理盘是硬件层,每块盘有 Enclosure ID 和 Slot ID 定位,比如252:0表示 enclosure 252 的 0 号槽。磁盘组是 RAID 级别的容器,一个 DG 内的所有盘共享同一个 RAID 级别(RAID0/1/5/6/10 等)。虚拟盘是最终对 OS 暴露的逻辑卷,一个 DG 可以切多个 VD,比如 8 块盘做 RAID6 建一个 DG,再切成两个 VD 分别给系统盘和数据盘。理解这个层级后,扩容、重建、迁移这些操作才知道该动哪一层:加盘扩容动的是 DG,改 RAID 级别通常要重建 DG,换故障盘动的是 PD。
2.2 storcli 和 MegaCli 该用哪个
老服务器上常见MegaCli64,新一点的固件和卡基本都推storcli64。两者功能重叠,但 storcli 的输出更结构化、脚本友好,MegaCli 在部分老卡上兼容性更好。判断标准很简单:先看卡型号和固件版本,能跑 storcli 就优先 storcli,因为它的 JSON 输出(/j)对自动化巡检太友好了。下面这条命令先确认工具能识别到卡:
# 列出所有 LSI/Broadcom RAID 控制器 storcli64 show # 老卡用 MegaCli 的等价命令 MegaCli64 -AdpAllInfo -aALL | head -40storcli64 show会输出控制器编号(Controller = 0,1...)、型号、固件版本、以及是否有 BBU/CV 缓存模块。逻辑说明:控制器编号是后续所有命令的c0、c1前缀来源,先确认编号再往下操作。参数说明:如果输出为空,多半是驱动没加载或工具版本与卡不匹配,先查lspci | grep -i raid确认系统认到卡没有。
2.3 建阵列前必须确认的四件事
建 VD 之前,有四件事没确认就动手,后面大概率返工。第一,盘的健康状态,storcli64 /c0/eall/sall show看每块盘是UGood(未配置好盘)还是Onln(已在线)。第二,RAID 级别和业务 IO 特征匹配,随机写多的库选 RAID10,顺序读多的大文件选 RAID5/6。第三,条带大小(Strip Size)和 OS 文件系统块对齐,默认 64K 或 256K 要结合业务定。第四,初始化方式,Fast Init只写元数据快但后台还在跑,Full Init慢但干净,生产环境首次建盘建议 Full Init 或至少确认后台初始化完成。
3. 用 storcli 建 VD 并跑通第一次配置
这一章是纯操作,从清盘到建 VD 到验证,每一步都给命令和参数解释。假设控制器是 c0,用 enclosure 252 下 0 到 7 号槽的 8 块盘做 RAID6,切两个 VD。
3.1 清盘与确认物理盘状态
如果盘上有残留的旧配置(比如从别的机器拆过来的),直接建 VD 会报foreign configuration或者盘状态是UBad。先看状态:
# 查看所有物理盘状态,重点看 State 列 storcli64 /c0/eall/sall show # 如果存在外部配置(Foreign),先导入或清除 storcli64 /c0/fall show storcli64 /c0/fall import # 确认是需要的配置才导入 storcli64 /c0/fall delete # 确认不需要则清除逻辑说明:eall/sall是通配所有 enclosure 和 slot,方便一次性看全。fall指 foreign(外部)配置。参数说明:导入前务必确认这块盘上的数据是不是你要的,导入和清除都是不可逆操作,清除后旧阵列元数据就没了。盘状态是UGood才能用于新建,UBad说明盘本身有问题,先换盘。
3.2 建磁盘组和虚拟盘的具体命令
确认盘都UGood后,建 DG 和 VD 可以一条命令搞定,也可以分两步。分两步更清晰:
# 第一步:用 0-7 号槽的盘建一个 RAID6 磁盘组 storcli64 /c0 add vd type=raid6 drives=252:0-7 # 第二步:在刚建的 DG 上切两个 VD(假设 DG 编号为 0) # VD0 用 100GB 做系统盘,VD1 用剩余空间做数据盘 storcli64 /c0/v0 add size=100GB storcli64 /c0/v1 add size=all逻辑说明:第一条命令创建 DG 并默认生成一个占满全盘的 VD0,如果只想切分,更稳妥的做法是先建 DG 再指定 VD 大小。参数说明:type=raid6指定 RAID 级别,drives=252:0-7是盘定位范围,size=all表示用掉 DG 剩余全部空间。注意 RAID6 至少需要 4 块盘,RAID5 至少 3 块,RAID10 至少 4 块且必须偶数。
3.3 初始化与验证 VD 状态
建完 VD 必须初始化才能被 OS 正常识别,否则可能看到盘但读写异常:
# 对 v0 做快速初始化 storcli64 /c0/v0 start initialization # 查看初始化进度和 VD 状态 storcli64 /c0/v0 show storcli64 /c0/vall show逻辑说明:start initialization触发初始化,show看State是否为Optl(Optimal)。参数说明:快速初始化(Fast Init)只清元数据,几秒完成;完整初始化(Full Init)会写全盘,大容量盘可能几小时。生产环境如果对数据一致性要求高,建议完整初始化,命令是storcli64 /c0/v0 start initialization full。验证时重点看三列:State 是否 Optl、RAID 级别对不对、Size 是否符合预期。
3.4 把新 VD 交给操作系统识别
VD 建好初始化完成后,OS 层可能还需要重新扫描才能看到新块设备:
# 触发 SCSI 总线重新扫描 echo "- - -" > /sys/class/scsi_host/host0/scan # 或者用 rescan 脚本 /usr/bin/rescan-scsi-bus.sh # 确认新盘出现 lsblk fdisk -l | grep -i "Disk /dev/sd"逻辑说明:硬件 RAID 对 OS 呈现的就是普通 SCSI 块设备,重新扫描后/dev/sdX会出现。参数说明:host0要换成实际的 SCSI host 编号,用ls /sys/class/scsi_host/查。如果扫描后还是看不到,检查 VD 状态是否 Optl,以及是否有未初始化的 VD。
4. 掉盘修复:把 Failed 盘换回来并确认重建
这是最考验人的环节。盘掉了不可怕,可怕的是重建过程中又掉一块,或者重建根本没启动而你以为它在跑。下面按"确认故障 → 换盘 → 触发重建 → 监控"的顺序走。
4.1 判断是真掉盘还是误报
先看 VD 和 PD 状态,确认是物理盘故障还是链路抖动:
# 看 VD 状态,Degraded 说明有盘掉了 storcli64 /c0/vall show # 看具体哪块盘 Failed storcli64 /c0/eall/sall show | grep -i -E "Failed|UBad|Offln" # 看控制器事件日志,确认掉盘原因 storcli64 /c0 show events | tail -50逻辑说明:Degraded是 VD 级别告警,具体哪块盘出问题要看 PD 状态。参数说明:事件日志里如果看到PD missing或timeout,可能是链路或背板问题,不一定是盘坏;如果看到medium error或predictive failure,基本可以判定盘要换。误报的情况先尝试storcli64 /c0/e252/s3 set good把盘重新拉回,但如果是真故障,这步会失败。
4.2 在线换盘与重建触发
确认盘故障后,热插拔换盘(服务器和背板支持的前提下),新盘插上后通常会自动开始重建。如果没有自动重建,手动触发:
# 确认新盘已被识别为 UGood storcli64 /c0/e252/s3 show # 如果新盘是 UGood 但没自动重建,手动指定为热备并触发 storcli64 /c0/e252/s3 add hotsparedrive # 或者直接对 VD 发起重建(部分固件支持) storcli64 /c0/v0 start rebuild逻辑说明:热备盘(Hot Spare)分全局和专用,全局热备任何 DG 掉盘都能顶,专用热备只服务指定 DG。参数说明:add hotsparedrive把盘设为热备,如果阵列已有掉盘,设完会自动开始重建。注意新盘容量必须大于等于原盘,否则重建会失败或只能部分重建。
4.3 监控重建进度和性能影响
重建期间最怕的就是再掉一块盘,所以必须盯着进度和剩余盘的健康:
# 查看重建进度百分比 storcli64 /c0/v0 show rebuild # 持续监控,每 30 秒刷新一次 watch -n 30 'storcli64 /c0/v0 show rebuild' # 同时看其他盘有没有异常 storcli64 /c0/eall/sall show | grep -v Onln逻辑说明:show rebuild输出重建百分比和预计剩余时间。参数说明:重建速度受盘速、RAID 级别、控制器负载影响,RAID6 重建比 RAID5 慢,大容量盘可能跑十几个小时。重建期间业务 IO 会变慢,如果业务对延迟敏感,可以调整重建速率:storcli64 /c0 set rebuildrate=30,30 表示用 30% 的控制器资源做重建,给业务留余量。
4.4 重建完成后的验证动作
重建到 100% 不代表万事大吉,还要确认 VD 回到 Optl 且数据一致:
# 确认 VD 状态回到 Optimal storcli64 /c0/vall show # 确认所有 PD 都是 Onln storcli64 /c0/eall/sall show | grep -c Onln # 检查是否有 media error 或一致性错误 storcli64 /c0/v0 show all | grep -i -E "error|inconsistent"逻辑说明:重建完成后 VD 状态应从 Degraded 回到 Optl,所有成员盘应为 Onln。参数说明:如果状态还是 Degraded,可能是重建没真正完成或又掉了盘。有条件的话做一次一致性检查(Consistency Check),命令是storcli64 /c0/v0 start consistencycheck,它会校验条带数据,发现静默错误。
5. 避坑与排查:那些让重建失败的常见问题
这一章全是踩过的坑,每条按现象、原因、解决写。LSI RAID 的很多问题不是命令错,而是对状态机和硬件边界理解不到位。
5.1 新盘插上不重建,状态一直是 UGood
现象:换上新盘后,storcli64 /c0/eall/sall show看到新盘是 UGood,但 VD 还是 Degraded,重建进度为 0。原因:新盘没有被自动纳入热备池,或者固件策略是手动重建。解决:先确认新盘容量不小于故障盘,然后storcli64 /c0/e252/sX add hotsparedrive设为热备,设完通常几秒内自动开始重建;如果还不重建,检查控制器是否开启了Auto Rebuild,用storcli64 /c0 show看相关策略项。
5.2 重建到一半又掉一块盘,VD 直接 Offline
现象:RAID5 重建过程中第二块盘掉线,VD 状态变成 Offline,数据不可访问。原因:RAID5 只容忍一块盘故障,重建期间再掉一块就彻底失效;或者重建压力把本就有隐患的盘逼死了。解决:这种情况只能从备份恢复,或者找专业数据恢复。预防手段是 RAID6 或 RAID10,以及定期做 Patrol Read( patrol read)提前发现弱盘:storcli64 /c0 start patrolread。血泪经验:重建前先看其他盘有没有Predictive Failure标记,有就先换掉再重建。
5.3 重建速率拉满导致业务 IO 超时
现象:重建开始后业务侧大量 IO 超时,数据库响应从毫秒级涨到秒级。原因:默认重建速率可能占用大量控制器和磁盘带宽。解决:重建前先设速率上限,storcli64 /c0 set rebuildrate=20,20 表示 20%。重建完成后可以调回默认。注意这个值不是越低越好,太低重建时间拉长,风险窗口变大,一般 20 到 40 之间比较平衡。
5.4 foreign configuration 没处理,建盘直接报错
现象:从别的机器拆过来的盘插上后,建 VD 报foreign configuration found,命令失败。原因:盘上残留了旧阵列的元数据,控制器认为这是外部配置。解决:先storcli64 /c0/fall show看清楚是什么配置,确认不需要就storcli64 /c0/fall delete清除,需要就import导入。注意清除是不可逆的,导入前务必确认数据归属。
5.5 初始化没完成就挂载,文件系统报错
现象:VD 建完立刻格式化挂载,mkfs报 IO 错误或挂载后读写异常。原因:VD 还在后台初始化,部分扇区不可写。解决:建完 VD 后用storcli64 /c0/v0 show确认 State 是 Optl 且初始化进度 100% 再交给 OS。快速初始化虽然几秒完成,但后台可能还在跑,稳妥做法是等Initialization相关字段显示完成。
6. 进阶:用 storcli 做自动化巡检和一致性校验
手动敲命令适合救火,但生产环境更需要的是提前发现隐患。这一章讲怎么把 storcli 用成巡检工具,以及一致性校验这个容易被忽略的动作。
6.1 用 JSON 输出做脚本化巡检
storcli 的/j参数输出 JSON,非常适合喂给监控系统。下面这个脚本片段检查所有 VD 是否 Optl、所有 PD 是否 Onln,有异常就输出告警:
#!/bin/bash # 巡检 LSI RAID 状态,异常时输出到标准错误 CTRL=0 VD_JSON=$(storcli64 /c$CTRL/vall show all J) PD_JSON=$(storcli64 /c$CTRL/eall/sall show J) # 检查 VD 状态 echo "$VD_JSON" | python3 -c " import sys, json data = json.load(sys.stdin) for ctrl in data.get('Controllers', []): for vd in ctrl.get('Response Data', {}).get('VD List', []): state = vd.get('State', '') if state != 'Optl': print(f'ALERT: VD {vd.get(\"DG/VD\")} state={state}', file=sys.stderr) " # 检查 PD 状态 echo "$PD_JSON" | python3 -c " import sys, json data = json.load(sys.stdin) for ctrl in data.get('Controllers', []): for pd in ctrl.get('Response Data', {}).get('PD List', []): state = pd.get('State', '') if state not in ('Onln', 'UGood', 'GHS', 'DHS'): print(f'ALERT: PD {pd.get(\"EID:Slt\")} state={state}', file=sys.stderr) "逻辑说明:脚本分别拉 VD 和 PD 的 JSON,用 Python 解析后判断状态,非正常状态输出到 stderr,方便被监控系统捕获。参数说明:J是 JSON 输出开关,注意大小写,有些版本是/j。这个脚本可以放进 cron 每 5 分钟跑一次,配合告警通道就能提前发现掉盘。
6.2 一致性校验和 Patrol Read 的区别
这两个动作经常被混淆。一致性校验(Consistency Check)是主动校验 VD 内所有条带的冗余数据是否一致,能发现静默数据损坏;Patrol Read 是后台扫描所有盘的扇区,提前发现弱扇区并触发重映射。两者互补,建议都定期跑:
# 启动一致性校验 storcli64 /c0/v0 start consistencycheck # 查看校验进度 storcli64 /c0/v0 show consistencycheck # 启动 Patrol Read storcli64 /c0 start patrolread # 查看 Patrol Read 进度 storcli64 /c0 show patrolread逻辑说明:一致性校验针对 VD,Patrol Read 针对 PD。参数说明:一致性校验会占用 IO 资源,建议在业务低峰期跑;Patrol Read 可以设成自动周期执行,storcli64 /c0 set patrolread=auto。校验发现不一致时,RAID 会用冗余数据修复,但如果冗余也不可信,就需要从备份恢复。
6.3 固件和驱动版本别乱升
最后说一个容易被忽视的点:LSI 卡的固件、驱动、storcli 工具三者版本要匹配。我见过升级固件后老驱动不认新特性,导致 VD 状态显示异常;也见过 storcli 版本太新,老卡命令不兼容。升级前先记录当前版本(storcli64 /c0 show里的 FW Version 和 Driver Version),查清楚目标版本的兼容矩阵,生产环境先在测试机验证。升级固件有风险,务必确认业务有备份、BBU 电量充足、不断电。这个习惯帮我躲过了好几次潜在的翻车。
希望帮到你。
本文还有配套的精品资源,点击获取