一、RAID重建的触发条件与基本流程
RAID重建(Rebuild)是指在阵列中某块成员盘故障后,利用校验数据或镜像数据,将数据恢复到新替换盘上的过程。理解重建的触发条件和完整流程,是安全操作的前提。
1. 重建触发条件
RAID重建通常在以下几种情况下触发:
硬盘故障自动触发:当RAID卡检测到成员盘出现不可恢复的I/O错误或链路断开,会将该盘标记为Failed状态。如果配置了热备盘(Hot Spare),RAID卡会自动启动重建,将热备盘纳入阵列并恢复数据。
手动更换故障盘触发:如果没有配置热备盘,运维人员需要手动拔出故障盘、插入新盘,然后通过管理工具手动启动重建。
预测性故障替换(PFA)触发:当RAID卡通过SMART监测发现某块盘即将故障(如坏块数增长趋势异常),会将该盘标记为Predictive Failure,管理员可以选择主动更换并重建,避免突然掉盘。
2. 重建基本流程
无论是自动还是手动触发,RAID重建的流程基本一致:
第一步:故障盘被标记为Failed或Offline,阵列状态变为Degraded(降级)。
第二步:新盘(热备盘或手动插入的替换盘)被识别为Unconfigured Good状态。
第三步:RAID卡将新盘纳入故障阵列,开始重建。
第四步:重建过程中,RAID卡从存活盘读取数据和校验信息,计算出缺失盘的数据并写入新盘。
第五步:重建完成后,阵列状态恢复为Optimal(最佳),新盘成为正式成员盘。
二、RAID5单盘故障重建全流程
RAID5是最常见的服务器阵列级别,允许一块盘故障。以下是从发现掉盘到完成重建的完整操作流程。
1. 确认阵列状态
首先通过RAID卡管理工具确认当前阵列状态和故障盘位置。
# 使用storcli查看RAID卡信息
storcli64 /c0 show
# 查看所有虚拟盘(VD)状态
storcli64 /c0 /vall show
# 查看所有物理盘(PD)状态
storcli64 /c0 /eall /sall show
# 关键状态字段说明:
# DG = Disk Group(磁盘组编号)
# State:
# Optml = Optimal(最佳,正常状态)
# Dgrd = Degraded(降级,有盘故障但可运行)
# OfLn = Offline(离线,阵列不可用)
# Pros = Progress(重建进度百分比)
在输出中找到State为Dgrd的VD,以及状态为Failed(Fail)或Offline(OffLn)的PD,记录其Enclosure ID和Slot号。
2. 确认故障盘并准备替换
通过服务器的硬盘指示灯确认故障盘的物理位置。通常故障盘的指示灯会变成橙色或闪烁红色。确认物理位置与storcli输出对应后,可以安全拔出故障盘。
# 查看具体故障盘的详细信息
storcli64 /c0 /e252 /s3 show
# 确认该盘的Firmware state是否为Failed
# 记录该盘的型号、容量、序列号信息,用于采购替换盘
3. 插入新盘并启动重建
插入与故障盘容量相同或更大的新硬盘。新盘插入后状态应为Unconfigured Good。如果新盘状态为Unconfigured Bad,需要先将其置为Good:
# 将新盘状态置为Good
storcli64 /c0 /e252 /s3 set good
# 如果有热备盘已自动开始重建,可以直接查看进度
storcli64 /c0 /v0 show
# 如果没有热备盘,需要手动将新盘设为重建盘
# 方法一:将新盘指定为该DG的热备盘,RAID卡会自动开始重建
storcli64 /c0 /e252 /s5 add hotsparedrive dgs=0
# 方法二:直接启动重建(适用于某些RAID卡固件)
storcli64 /c0 /e252 /s5 start rebuild
4. 重建时间估算与影响因素
RAID5重建时间受多个因素影响,实际操作中往往比预期时间长很多,这也是重建期间数据风险最高的阶段。
| 影响因素 | 说明 | 典型影响 |
|---|---|---|
| 硬盘容量 | 重建需要读取所有存活盘的完整数据 | 4TB盘约需6-12小时,8TB盘约需12-24小时 |
| 硬盘类型 | HDD和SSD的读取速度差异巨大 | SSD阵列重建通常快3-5倍 |
| 业务负载 | 重建I/O与业务I/O竞争带宽 | 高负载下重建时间可能翻倍 |
| RAID卡重建速率设置 | RAID卡可调节重建任务的I/O优先级 | 低优先级慢但业务影响小,高优先级快但业务影响大 |
| 硬盘健康状态 | 存活盘如果有坏块会拖慢读取 | 坏块多的盘可能使重建时间延长数倍 |
# 调整RAID卡重建速率(0-100,默认30左右)
# 查看当前重建速率
storcli64 /c0 show rebuild
# 设置重建速率(数值越大重建越快,但对业务影响越大)
storcli64 /c0 set rebuildrate=60
# 建议在业务低峰期临时调高,高峰期调回
5. 监控重建进度
# 实时查看重建进度(每30秒刷新一次)
watch -n 30 'storcli64 /c0 /v0 show'
# 查看物理盘级别的重建状态
storcli64 /c0 /e252 /s5 show rebuild
# 查看RAID卡事件日志,监控重建过程中的告警
storcli64 /c0 show events
重建过程中,阵列仍处于Degraded状态,业务可以继续运行但性能会受影响。如果在重建期间再有盘故障,RAID5阵列将不可恢复,这就是为什么大容量硬盘阵列更推荐使用RAID6。
三、RAID6双盘故障恢复
RAID6使用双重校验,允许两块盘同时故障。这使得它在重建期间的安全性远高于RAID5,是8TB以上大容量硬盘阵列的推荐级别。
1. RAID6双盘故障的重建策略
当RAID6阵列中两块盘先后或同时故障时,阵列会进入Critical或Degraded状态。与RAID5不同,RAID6在双盘故障下仍可正常运行,但已没有冗余余量,必须立即处理。
# 查看RAID6阵列状态(假设VD1为RAID6)
storcli64 /c0 /v1 show
# 如果有两块盘故障,先替换一块并完成重建,再替换第二块
# 这样始终维持阵列在单盘故障的安全范围内
# 第一块盘替换和重建
storcli64 /c0 /e252 /s5 set good
storcli64 /c0 /e252 /s5 start rebuild
# 等待第一块盘重建完成(状态恢复Optimal后再处理第二块)
# 可以用以下命令循环检查
while true; do
state=$(storcli64 /c0 /v1 show | grep "State" | awk '{print $3}')
if [ "$state" == "Optml" ]; then
echo "重建完成,可以替换第二块盘"
break
fi
sleep 60
done
2. 双盘同时故障的紧急处理
如果两块盘几乎同时故障(如同一批次硬盘集中到寿命终点),需要特别注意:不要同时对两块盘启动重建,因为同时重建两块盘会产生极大的I/O压力,可能拖垮存活盘导致阵列彻底崩溃。正确做法是串行重建——先重建一块,完成后再重建另一块。
四、RAID10磁盘故障处理
RAID10是RAID1镜像与RAID0条带的组合,在处理磁盘故障时与RAID5/6有本质区别。
1. RAID10的故障容忍特性
RAID10由多个镜像对组成,每个镜像对包含两块互为镜像的硬盘。只要每个镜像对中至少有一块盘存活,整个阵列就能正常运行。最危险的情况是同一个镜像对的两块盘都故障,这将导致该对的数据完全丢失,整个阵列失效。
| 故障情况 | RAID10状态 | 数据安全 | 处理方式 |
|---|---|---|---|
| 镜像对A中1块盘故障 | Degraded | 安全,数据完整 | 更换故障盘,镜像同步 |
| 不同镜像对各1块盘故障 | Degraded | 安全,数据完整 | 分别更换,逐对同步 |
| 同一镜像对2块盘都故障 | Failed | 数据丢失 | 需从备份恢复 |
2. RAID10的重建特点
RAID10的重建不需要校验计算,只需将镜像对中存活盘的数据完整复制到新盘上。这使得RAID10的重建速度通常比RAID5/6快得多,重建期间对CPU和阵列卡的负载也更小。
# 查看RAID10阵列中各盘的镜像关系
storcli64 /c0 /v2 show
# 确认故障盘所在的镜像对(PD Group中的配对关系)
storcli64 /c0 /v2 show all
# 更换故障盘后启动镜像同步
storcli64 /c0 /e252 /s7 set good
storcli64 /c0 /e252 /s7 start rebuild
五、重建过程中性能下降的原因与缓解方法
RAID重建会对业务性能产生明显影响,理解原因才能采取有效的缓解措施。
1. 性能下降的原因分析
重建过程中,RAID卡需要从所有存活盘读取数据(RAID5还需计算校验),并将恢复的数据写入新盘。这些重建I/O与正常业务I/O共享硬盘带宽和RAID卡处理能力,导致业务I/O延迟增加。对于RAID5/6的降级状态,由于每次读取都需要额外的校验计算,性能下降更为明显,通常只有正常状态的30%-60%。
2. 缓解性能影响的措施
# 1. 调整重建速率
# 业务低峰期调高重建速率,加快完成
storcli64 /c0 set rebuildrate=70
# 业务高峰期调低,优先保障业务
storcli64 /c0 set rebuildrate=10
# 2. 调整重建模式
# 查看当前重建模式设置
storcli64 /c0 show bgirate
# bgirate = Background Initialization Rate(后台初始化速率)
# 3. 暂停和恢复重建(紧急情况下可暂停)
storcli64 /c0 /e252 /s5 pause rebuild
# 暂停后业务性能恢复,但阵列仍处于降级状态
# 恢复重建
storcli64 /c0 /e252 /s5 resume rebuild
| 重建速率 | 对业务影响 | 重建速度 | 适用场景 |
|---|---|---|---|
| 10-20 | 较小 | 较慢 | 业务高峰期 |
| 30(默认) | 中等 | 正常 | 日常运行 |
| 60-80 | 较大 | 较快 | 业务低峰期或维护窗口 |
| 100 | 很大 | 最快 | 仅限停机维护期间 |
六、重建失败的应急处理
重建过程中可能遇到各种失败情况,处理不当会导致数据永久丢失。以下是几种常见故障场景的正确处理方式。
1. 重建过程中又一块盘故障
这是最危险的场景。RAID5在重建期间再掉盘意味着数据彻底丢失,RAID6再掉一块盘也会面临同样结果。遇到这种情况,立即停止所有写入操作,不要尝试任何修复命令,直接联系专业数据恢复机构。盲目操作只会进一步破坏数据。
2. 重建卡住不动
重建进度长时间不变化,可能是因为存活盘存在坏块导致读取卡住。可以尝试以下处理:
# 查看重建详细状态和错误信息
storcli64 /c0 /e252 /s5 show rebuild
storcli64 /c0 show events | grep -i "rebuild\|error"
# 查看是否有介质错误(Medium Error表示盘片有坏块)
storcli64 /c0 /e252 /s5 show all | grep -i "media\|error"
# 如果确认是存活盘坏块导致,可以尝试暂停重建
storcli64 /c0 /e252 /s5 pause rebuild
# 使用ddrescue对坏盘做镜像后,再用镜像盘替换坏盘继续重建
# 这比直接在坏盘上重建成功率更高
3. 新盘容量不足导致重建失败
替换盘的容量必须大于等于故障盘。由于不同厂商对相同标称容量(如4TB)的实际可用容量可能略有差异,可能导致"容量不足"的报错。建议替换盘选择与原盘完全相同的型号,或选择同系列更大容量的型号。
# 查看故障盘和替换盘的精确容量(以扇区数表示)
storcli64 /c0 /e252 /s3 show all | grep "Raw size"
storcli64 /c0 /e252 /s5 show all | grep "Raw size"
# 如果替换盘略小,只有更换更大容量的盘
4. RAID卡固件问题导致重建失败
部分RAID卡固件版本存在已知的重建Bug。遇到不明原因的重建失败,可以检查RAID卡固件版本,参考厂商的Release Notes是否有相关修复。升级固件前务必备份RAID配置。
# 查看RAID卡固件版本
storcli64 /c0 show | grep -i "firmware\|FW Package"
# 备份RAID配置(重要!)
storcli64 /c0 show all > /tmp/raid_config_backup.txt
# 导出RAID配置到文件
storcli64 /c0 /vall show all > /tmp/vd_config_backup.txt
storcli64 /c0 /eall /sall show all > /tmp/pd_config_backup.txt
七、Broadcom MegaRAID / Dell PERC / LSI RAID卡操作实例
目前主流服务器广泛使用基于Broadcom(原Avago/LSI)芯片的RAID卡,Dell PERC系列也是基于LSI方案。这些RAID卡可以使用storcli(新版)或MegaCLI(旧版)进行管理。
1. storcli常用操作速查
# === 基本信息查看 ===
storcli64 /c0 show # RAID卡信息
storcli64 /c0 /vall show # 所有虚拟盘
storcli64 /c0 /eall /sall show # 所有物理盘
storcli64 /c0 show events # 事件日志
# === 物理盘操作 ===
storcli64 /c0 /e252 /s3 set good # 设置为Good状态
storcli64 /c0 /e252 /s3 set offline # 设置为Offline
storcli64 /c0 /e252 /s3 set missing # 设置为Missing
storcli64 /c0 /e252 /s5 add hotsparedrive # 添加全局热备盘
storcli64 /c0 /e252 /s5 add hotsparedrive dgs=0 # 添加局部热备盘
# === 重建操作 ===
storcli64 /c0 /e252 /s5 start rebuild # 启动重建
storcli64 /c0 /e252 /s5 pause rebuild # 暂停重建
storcli64 /c0 /e252 /s5 resume rebuild # 恢复重建
storcli64 /c0 /e252 /s5 show rebuild # 查看重建进度
# === 虚拟盘操作 ===
storcli64 /c0 /v0 show # 查看VD0状态
storcli64 /c0 /v0 set wrcache=awrb # 设置写缓存策略
storcli64 /c0 /v0 set rdcache=ra # 设置读缓存策略
# === 巡检操作 ===
storcli64 /c0 /v0 start patrol # 启动巡检
storcli64 /c0 /v0 show patrol # 查看巡检状态
storcli64 /c0 /e252 /s3 start smart # 启动SMART检测
2. MegaCLI旧版命令对照
部分老服务器可能只安装了MegaCLI,以下是常用命令与storcli的对照。
| 操作 | storcli命令 | MegaCLI命令 |
|---|---|---|
| 查看RAID卡信息 | storcli64 /c0 show | MegaCli64 -AdpAllInfo -a0 |
| 查看所有VD | storcli64 /c0 /vall show | MegaCli64 -LDInfo -Lall -a0 |
| 查看所有PD | storcli64 /c0 /eall /sall show | MegaCli64 -PDList -a0 |
| 启动重建 | storcli64 /c0/e252/s5 start rebuild | MegaCli64 -PDRbld -Start -PhysDrv[252:5] -a0 |
| 查看重建进度 | storcli64 /c0/e252/s5 show rebuild | MegaCli64 -PDRbld -ShowProg -PhysDrv[252:5] -a0 |
| 添加热备盘 | storcli64 /c0/e252/s5 add hotsparedrive | MegaCli64 -PDHSP -Set -PhysDrv[252:5] -a0 |
3. Dell PERC RAID卡的特殊操作
Dell PERC系列RAID卡虽然底层基于LSI方案,但Dell封装了自己的管理工具。除了storcli外,还可以使用Dell OpenManage Server Administrator (OMSA)进行管理。
# 通过OMSA查看阵列状态(Linux)
omreport storage vdisk
omreport storage pdisk controller=0
# 通过OMSA查看控制器信息
omreport storage controller
# Dell服务器还可以在iDRAC Web界面中直接查看和操作RAID
# 路径:iDRAC Web界面 → Storage → Virtual Disks
# Dell特有的Patrol Read(巡检读)设置
# 通过OMSA配置巡检
omconfig storage controller action=enablepatrolread controller=0
omconfig storage controller action=patrolreadmode=auto controller=0
八、RAID重建最佳实践
1. 重建前的安全准备
在启动重建之前,如果条件允许,先对所有存活盘做镜像备份。重建过程是对存活盘的密集读取,如果存活盘也有隐患,重建可能导致其加速失效。使用ddrescue为每块存活盘制作镜像,即使重建失败,仍有镜像可以用于数据恢复。
2. 重建期间的业务调度
将非关键业务迁移到其他服务器,减少重建阵列上的业务负载。对于数据库应用,考虑切换到只读模式或降级运行,减少写入I/O压力。重建完成后,先验证数据完整性再恢复完整业务负载。
3. 重建后的验证
# 重建完成后的验证步骤
# 1. 确认阵列状态恢复Optimal
storcli64 /c0 /v0 show
# 2. 确认所有物理盘状态正常
storcli64 /c0 /eall /sall show
# 3. 检查新盘的SMART信息
smartctl -a /dev/sdb
# 4. 检查文件系统一致性
# Linux ext4文件系统
e2fsck -fn /dev/md0 # -n表示只检查不修复
# XFS文件系统
xfs_repair -n /dev/md0
# 5. 恢复热备盘配置(如果重建消耗了原热备盘)
storcli64 /c0 /e252 /s6 add hotsparedrive
相关阅读
RAID重建是运维工作中高风险又高频率的操作,每一次重建都应该谨慎对待。核心原则是:重建前做好存活盘的镜像备份,重建期间密切监控进度和阵列状态,遇到异常情况宁可暂停也不要盲目操作。配置合理的RAID级别(大容量盘优先选RAID6)和热备盘,能从根本上降低重建风险。如需了解更多服务器存储方案和硬件选型建议,欢迎浏览本站更多技术文章。

