在RHEL系统中,如果手头没有硬件RAID卡,又需要对数据做冗余保护,软RAID是一个非常实用的方案。Linux内核自带的MD(Multiple Devices)驱动配合mdadm管理工具,可以让我们把多块普通磁盘组合成RAID 0、RAID 1、RAID 5、RAID 10等各种级别的阵列。本文将从RAID级别选择讲起,一步步演示mdadm的安装、阵列创建、状态监控、故障模拟与恢复,以及开机自动装配的配置方法,帮助你完整掌握RHEL下的软RAID管理。

一、RAID级别怎么选
软RAID并不是级别越高越好,选择前要先明确自己的需求是性能、容量还是可靠性。RAID 0通过条带化把数据分散到多块磁盘上,读写性能最高,但任何一块盘损坏整个阵列数据全部丢失,只适合存放可重新生成的临时数据。RAID 1是镜像模式,两块盘内容完全一致,读性能有一定提升,写性能基本持平,容错能力强,适合系统盘或数据库日志这类对可靠性要求高的场景。
RAID 5需要至少3块磁盘,采用分布式奇偶校验,允许坏一块盘,可用容量为N-1块盘,是容量与可靠性折中较好的选择。RAID 10则先镜像后条带,需要至少4块盘,可用容量为一半,性能和可靠性都更出色,适合数据库等高IO负载场景。另外还有LINEAR线性模式,只是简单把磁盘串联起来扩容,没有冗余能力,日常使用较少。
需要注意软RAID会消耗CPU资源做校验计算,RAID 5在写入时有明显的写惩罚。对于生产环境的高负载数据库,更推荐RAID 10;如果只是文件服务器或备份存储,RAID 5或RAID 6的性价比更高。
二、mdadm安装与阵列创建
RHEL系统默认没有安装mdadm,可以通过yum或dnf安装:
# RHEL 7/8 安装mdadm yum install -y mdadm # 查看版本确认安装成功 mdadm --version
安装完成后,先确认磁盘情况。假设我们有四块新磁盘/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde,准备创建一个RAID 5阵列。创建之前务必确认磁盘上没有旧分区表和残留的RAID信息,否则装配时可能报错或出现阵列异常。可以用wipefs -a /dev/sdb清空磁盘签名。
创建RAID 5阵列的命令如下:
# 创建RAID 5,3块数据盘 + 1块热备盘 mdadm -C /dev/md0 -l 5 -n 3 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde # 参数说明: # -C 创建阵列,--create的简写 # -l 5 指定RAID级别为5,--level # -n 3 活动磁盘数量为3块,--raid-devices # -x 1 热备磁盘数量为1块,--spare-devices
创建过程中mdadm会提示确认覆盖磁盘数据,输入y继续。创建完成后可以用cat /proc/mdstat查看阵列状态,此时会看到恢复进度在后台进行。如果想要加快初始同步速度,可以临时调整stripe大小参数:
# 查看当前同步速度限制 cat /proc/sys/dev/raid/speed_limit_min cat /proc/sys/dev/raid/speed_limit_max # 提高最小同步速度到100MB/s,加快构建 echo 100000 > /proc/sys/dev/raid/speed_limit_min # 查看详细状态 mdadm -D /dev/md0
阵列创建好之后,还需要在上面创建文件系统并挂载才能使用。RAID 5建议配合XFS或ext4,同时适当调整stripe对应的块大小以获得更好性能:
# 创建文件系统,stride对应数据盘数量,stripe-width为总宽度 mkfs.xfs -d su=128k,sw=3 /dev/md0 # 创建挂载点并挂载 mkdir /data mount /dev/md0 /data df -h /data
三、日常监控与故障处理
软RAID的日常管理核心在于监控。最常用的命令是cat /proc/mdstat,它能快速显示所有阵列的级别、磁盘状态和同步进度。如果看到某个磁盘状态是(F)或者被标记为faulty,就说明这块盘出现了故障。mdadm -D /dev/md0则会输出更详细的信息,包括阵列UUID、创建时间、每块磁盘的角色等。
当磁盘发生故障时,如果是配置了热备盘的阵列,内核会自动用热备盘重建数据,此时重点观察Rebuild Status进度即可。如果没有热备盘,就需要手动替换故障盘。操作步骤是先把故障盘从阵列中移除,再插入新盘并加入阵列:
# 1. 将故障盘标记为失效并移除 mdadm /dev/md0 -f /dev/sdd mdadm /dev/md0 -r /dev/sdd # 2. 插入新盘后将其加入阵列,自动触发重建 mdadm /dev/md0 -a /dev/sdf # 3. 观察重建进度 cat /proc/mdstat
还可以主动模拟磁盘故障来验证容灾流程是否可靠。在生产环境上线前做一次故障演练非常有必要,确认热备盘能自动顶替、监控告警能正常触发。mdadm还支持邮件告警,通过配置monitor模式实现故障自动通知:
# 启动监控守护进程,故障时给管理员发邮件 mdadm --monitor --scan --daemonize --mailto=admin@ipipp.com # RHEL上mdmonitor服务已内置,直接启用即可 systemctl enable --now mdmonitor
需要注意的是,邮件告警依赖本机配置好sendmail或postfix,否则告警无法发出。建议同时配合外部监控手段,比如定时脚本检查/proc/mdstat中的异常关键字并上报。
四、配置持久化与开机自动装配
很多初学者踩过这样的坑:阵列创建成功、数据也写进去了,结果重启之后设备名变成了md127,甚至挂载失败。这是因为没有保存mdadm配置,系统开机时是靠内核自动扫描装配的,设备名分配顺序不稳定。正确的做法是生成并保存配置文件:
# 扫描当前阵列信息并写入配置文件 mdadm --detail --scan >> /etc/mdadm.conf # RHEL 8及以上路径为/etc/mdadm.conf,部分发行版在/etc/mdadm/mdadm.conf # 确认文件内容包含ARRAY行 cat /etc/mdadm.conf
保存配置后,重启时mdmonitor服务会按照配置文件里的UUID精确装配阵列,设备名就不会漂移了。另外,不要直接在/etc/fstab中使用/dev/md0这样的设备名挂载,更稳妥的方式是使用阵列的UUID。可以通过blkid /dev/md0查询文件系统的UUID,然后写入fstab:
# 查询文件系统UUID blkid /dev/md0 # 在/etc/fstab中追加一行,使用UUID挂载 UUID="a1b2c3d4-xxxx" /data xfs defaults 0 0
最后提一下阵列的移除流程。如果需要彻底解散某个阵列,应先卸载文件系统,停止阵列,再清空各成员盘上的超级块信息,否则残留的RAID元数据可能在下次重启时被误识别:
# 停止并移除阵列 umount /data mdadm -S /dev/md0 # 清空每块成员盘的超级块 mdadm --zero-superblock /dev/sdb /dev/sdc /dev/sdd /dev/sde # 再次擦除磁盘签名确保干净 wipefs -a /dev/sdb /dev/sdc /dev/sdd /dev/sde
掌握以上几个环节,RHEL下的软RAID管理基本就完整了。软RAID的优势在于不依赖额外硬件、配置灵活、跨磁盘品牌混搭也方便,但也要清楚它的校验计算消耗CPU、不支持热插拔背板等局限。在合适的场景选合适的方案,才能让存储层既可靠又高效。
mdadmLinux软RAIDRHEL磁盘管理修改时间:2026-09-01 06:08:53