案例背景:生产环境RAID告警
某中型电商企业的主数据库服务器运行在Ubuntu Linux系统之上,底层采用软RAID 1(镜像模式)配置,由两块2TB SATA硬盘组成,挂载于/dev/md0。某日凌晨,自动化监控系统发出紧急警报:“/dev/md0 状态为 degraded”,且伴随大量I/O写入延迟。
IT运维团队接到通知后介入处理。初步检查发现,虽然服务未完全中断,但响应速度明显变慢。若不及时修复,一旦第二块硬盘也出现故障,将导致数据永久丢失。本次复盘旨在还原从故障发现到阵列重建的全过程,重点讲解关键排查步骤与数据保护措施。
第一阶段:故障诊断与信息收集
在处理任何存储故障时,首要原则是停止所有非必要的写操作,防止覆盖潜在可恢复的数据。以下是具体的诊断步骤:
1. 检查RAID状态
使用 cat /proc/mdstat 命令查看当前软RAID的状态:
$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[1] sda1[0](F)
1953511680 blocks super 1.2 [2/1] [_U]
上述输出显示:
- md0:RAID设备名称。
- [2/1]:表示总共2个成员,当前只有1个在线。
- _U:第一个槽位为空(或故障),第二个槽位正常。
- sda1[0](F):指出
/dev/sda1是故障成员(Failed)。
2. 确认物理磁盘健康状况
调用 smartctl 工具检查故障硬盘SMART信息,判断是否为物理损坏:
sudo smartctl -a /dev/sda
结果显示 Reallocated_Sector_Ct(重映射扇区计数)和 Current_Pending_Sector(当前待映射扇区)数值极高,且存在多次 Read Error Retry(读取重试)。这表明硬盘存在严重的物理坏道,控制器已无法稳定读写数据。
第二阶段:数据抢救与阵列重建准备
由于RAID 1是基于镜像的技术,数据完整保存在正常的 /dev/sdb1 上。此时的目标不是立即替换硬盘,而是确保在更换硬件前数据绝对安全。
1. 挂载与只读备份
为避免在重建过程中因意外写入导致数据不一致,建议先将正常硬盘单独挂载为只读:
sudo mount -o ro /dev/sdb1 /mnt/recovery_backup
随后,将关键业务数据拷贝至外部USB存储或另一台安全的服务器上,完成冷备份。这是数据恢复类操作中风险最低、最稳妥的一步。
2. 标记并移除故障成员
如果系统尚未自动标记故障盘,需手动将其设为故障并移除:
sudo mdadm /dev/md0 --fail /dev/sda1
sudo mdadm /dev/md0 --remove /dev/sda1
执行后再次检查 /proc/mdstat,确认故障盘已移除,阵列维持在“degraded”但可运行的状态。
第三阶段:硬件更换与新阵列同步
在确认数据已备份后,进行物理硬件更换。假设我们将 /dev/sda 拔出,插入一块新的同容量硬盘,系统将其识别为新设备 /dev/sda。
1. 重新分区
新硬盘通常是空白的,需要创建与旧硬盘一致的分区表。可以使用 sgdisk 快速克隆分区结构:
sudo sgdisk -R /dev/sda /dev/sdb
sudo sgdisk -G /dev/sda
第一条命令将 /dev/sdb 的分区表复制到 /dev/sda,第二条命令生成新的GUID以确保唯一性。完成后,新硬盘的分区应为 /dev/sda1,类型ID通常需设为 fd00(Linux RAID Auto):
sudo parted /dev/sda set 1 raid on
2. 将新磁盘加入阵列
使用 mdadm 命令将新硬盘重新添加到RAID阵列中:
sudo mdadm /dev/md0 --add /dev/sda1
此时,RAID阵列将自动开始数据同步(Resync)。可以通过以下命令监控进度:
watch -n 1 cat /proc/mdstat
屏幕上会显示类似 recovery = 45.2% 的信息。对于2TB的磁盘,同步可能需要数小时甚至更久,期间服务器仍可正常提供服务,但性能会有轻微下降,属于正常现象。
第四阶段:验证与优化
当同步完成后,/proc/mdstat 应显示:
md0 : active raid1 sda1[0] sdb1[1]
1953511680 blocks [2/2] [UU]
[UU] 表示两个成员均在线且健康。最后,执行以下操作以优化配置:
- 更新配置文件:运行
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf,确保重启后能正确识别阵列。 - 测试读写:在挂载点创建一个测试文件并进行读写操作,确认数据一致性。
- 设置监控告警:配置
mdadm的邮件告警功能,确保未来再发生降级时能第一时间收到通知。
总结与经验教训
本案例展示了Linux环境下RAID 1降级的标准处理流程。核心要点在于:
- 冷静判断:降级不等于数据丢失,RAID 1的特性允许单盘故障而不影响数据完整性。
- 备份优先:在进行任何硬件操作前,务必先通过只读挂载等方式进行数据冷备份。
- 规范操作:严格遵循“标记故障->移除->换盘->分区->添加->同步”的标准步骤,避免误操作导致双盘失效。
对于中小型企业而言,建立定期备份机制和监控预警系统是防范数据丢失的最后防线,而掌握底层存储故障的手动恢复技能,则是IT运维人员必备的核心能力。