服务器运维中,磁盘故障是最常见的硬件问题之一。RAID阵列通过冗余机制保障数据安全,但当故障盘出现后若不及时替换并完成rebuild,阵列将处于降级状态,继续损坏将导致数据丢失。本文基于mdadm工具,完整梳理RAID阵列的创建、监控、故障检测与热替换流程,适用于物理服务器和IDC数据中心运维场景。
RAID级别选型与适用场景
不同RAID级别在冗余能力、性能表现和容量利用率上各有取舍:
- RAID 1:两盘镜像,容量利用率50%,读写性能与单盘持平,适合系统盘
- RAID 5:至少3盘,单盘容错,利用率(N-1)/N,读性能优秀,写性能受校验计算影响,适合数据盘
- RAID 6:至少4盘,双盘容错,利用率(N-2)/N,写入开销更大,适合大容量存储
- RAID 10:镜像+条带,利用率50%,读写性能优秀,容错能力强,适合数据库存储
生产环境系统盘推荐RAID 1,数据盘根据容量和性能需求在RAID 5/6/10间选择。涉及高可用集群的数据库节点建议RAID 10,兼顾性能和冗余。
mdadm创建与管理RAID阵列
mdadm是Linux下管理软件RAID的标准工具,创建RAID 5阵列示例:
# 检查磁盘设备
lsblk
fdisk -l | grep /dev/sd
# 创建RAID 5阵列(3块磁盘)
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd
# 查看阵列状态
cat /proc/mdstat
mdadm --detail /dev/md0
# 创建文件系统
mkfs.xfs /dev/md0
# 挂载
mkdir -p /data
mount /dev/md0 /data
# 保存RAID配置(重启后自动装配)
mdadm --detail --scan >> /etc/mdadm.conf
update-initramfs -u # Debian/Ubuntu
dracut -H -f # CentOS/RHEL
创建完成后,/proc/mdstat显示阵列状态为clean表示正常。阵列初始化(resync)过程在后台运行,不影响使用但会占用磁盘IO带宽。
故障磁盘检测与状态诊断
RAID阵列降级时需要快速定位故障盘。日常监控应配置mdadm的邮件告警:
# 配置告警邮箱
echo "MAILADDR admin@example.com" >> /etc/mdadm.conf
echo "PROGRAM /usr/sbin/mdadm --monitor --scan --daemonise" >> /etc/rc.local
# 手动检查阵列状态
mdadm --detail /dev/md0
# 关键状态字段解读:
# State : clean, degraded, failed
# Active Devices : 2 (正常应为3)
# Working Devices : 2
# Failed Devices : 1
# 查看具体哪块盘故障
mdadm --detail /dev/md0 | grep -A5 "Number"
# 查看磁盘SMART信息
smartctl -a /dev/sdb
smartctl -H /dev/sdc
阵列状态为degraded时仍可正常读写,但已丧失冗余能力,需尽快替换故障盘。状态为failed表示阵列不可用,需从备份恢复。
热替换故障磁盘的完整操作流程
热替换(Hot Swap)允许在不关机的状态下更换故障磁盘,操作步骤如下:
# 步骤1:标记故障盘为faulty并从阵列移除
mdadm /dev/md0 --fail /dev/sdc
mdadm /dev/md0 --remove /dev/sdc
# 步骤2:物理替换磁盘(热插拔场景直接更换)
# 新磁盘插入后确认设备名
lsblk
# 假设新盘为 /dev/sdc
# 步骤3:对新盘创建分区(与阵列其他盘一致)
parted /dev/sdc mklabel gpt
parted /dev/sdc mkpart primary 0% 100%
# 步骤4:将新盘加入阵列
mdadm /dev/md0 --add /dev/sdc
# 步骤5:观察rebuild进度
cat /proc/mdstat
# 输出示例:
# [=====>...............] resync = 28.3% ...
# finish=120.0min speed=50000K/sec
# 步骤6:rebuild完成后确认阵列恢复正常
mdadm --detail /dev/md0
# State : clean
# Active Devices : 3
如果使用热备盘(Hot Spare),阵列检测到故障盘后会自动开始rebuild,无需手动操作。配置热备盘命令:
# 添加热备盘
mdadm /dev/md0 --add /dev/sde
# 验证热备盘状态
mdadm --detail /dev/md0 | grep "Spare Devices"
RAID rebuild性能影响与注意事项
rebuild过程会大量占用磁盘IO和CPU资源,对在线业务产生直接影响。建议在业务低峰期执行rebuild,并调整rebuild速度限制:
# 查看当前rebuild速度限制
cat /proc/sys/dev/raid/speed_limit_min # 默认1000 KB/s
cat /proc/sys/dev/raid/speed_limit_max # 默认200000 KB/s
# 降低rebuild速度(减少对业务影响)
echo 50000 > /proc/sys/dev/raid/speed_limit_max
# 提高rebuild速度(业务可中断时)
echo 500000 > /proc/sys/dev/raid/speed_limit_max
注意事项:RAID 5在rebuild过程中若再坏一块盘则数据全部丢失,大容量磁盘rebuild周期可能长达数小时甚至数天,这段时间风险最高。对于关键业务数据,建议使用RAID 6或RAID 10提供更高容错能力。定期检查SMART信息,在磁盘出现预警扇区重分配时主动替换,避免被动故障。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-raid-zhen-lie-pei-zhi-yu-gu-zhang-ci-pan-re/