首页/系统/服务器硬件与 RAID 速查/软件 RAID(mdadm)基础
RAID 级别与计算68 条

软件 RAID(mdadm)基础

Linux 内核的 md 子系统用 CPU 做 RAID 运算,不依赖 RAID 卡;配置透明、可迁移性好,适合系统盘与中小规模数据盘,代价是消耗 CPU 并缺少卡上缓存。

软件 RAID 是什么

Linux 内核的 md 子系统直接用 CPU 做 RAID 运算,mdadm 是它的管理工具,两者合起来就是常说的软 RAID。它的元数据(superblock)写在成员盘上,换机器、换发行版后可以用 mdadm --assemble 重新组装,迁移性明显好于依赖固件与专有格式的硬件卡。代价也很清楚:档位运算和校验计算吃 CPU,没有卡上的缓存与保护电池,写性能与掉电安全性要仰仗文件系统与磁盘自身。

基本信息

组成内核 md 模块 + mdadm 管理工具(多数发行版需单独安装)
支持级别linear / 0 / 1 / 4 / 5 / 6 / 10(10 还有 near、far、offset 布局选项)
元数据版本0.90 / 1.0 / 1.1 / 1.2,1.2 默认写在盘头,做整盘阵列时要注意引导分区
状态入口/proc/mdstat、/sys/block/md0/md/、mdadm --detail
典型用途系统盘镜像、中小规模数据盘、无阵列卡的服务器

环境检查与创建

环境检查与创建
mdadm --version                      # 确认工具已安装
lsmod | grep -E "^md"               # 确认内核模块已加载
cat /proc/mdstat                     # 看现有阵列与状态
mdadm --create /dev/md0 --level=5 --raid-devices=4 --spare-devices=1 --chunk=256 /dev/sd[b-f]1
mdadm --detail /dev/md0              # 核对成员、级别、状态与 UUID

常用命令速查

命令作用注意
--create创建阵列并写入 superblock会覆盖目标盘,先确认盘号
--detail查看阵列详情故障排查的第一站
--manage --add把盘加入阵列容量不足时会被拒绝
--fail 与 --remove标记故障并从阵列移除先 fail 再 remove,顺序别反
--assemble按元数据重新组装阵列换机、重装系统后使用
--stop停止阵列停之前卸载文件系统
--grow扩容或调整参数改条带大小不支持,需重建

软 RAID 的适用与不适用

  • 适用:系统盘做 RAID 1,逻辑简单、迁移方便、不依赖专有固件
  • 适用:中小规模数据盘,级别与条带参数都可视需要调整
  • 不适用:对写延迟极敏感的高负载数据库,缺少卡上缓存与写保护
  • 不适用:需要掉电缓存保护的场景,md 自身不提供电池保护
  • 混合方案:硬件卡做物理阵列、md 或逻辑卷管理器在上层做二次组织
元数据写在盘上带来一个实际好处:整机迁移或系统盘重建后,接上原盘执行 mdadm --assemble --scan 一般就能把阵列找回来,不必依赖原机器的固件配置。
软 RAID 没有卡上缓存与电池保护:突然掉电时缓存中的数据依赖文件系统的日志与屏障机制落盘,关键数据盘要确认挂载参数与日志策略,并保证有可用备份。

易错点

  • md 阵列不受阵列卡保护:背板掉盘、链路误码与供电问题与 md 无关,硬件层面的故障仍要按硬件流程排查
  • 在虚拟机上练习创建阵列时不用回环设备:直接对真实盘操作会瞬间毁掉数据
  • 元数据版本选错:1.2 的 superblock 在盘头,整盘做阵列又当引导盘时会与引导装载程序冲突
  • 扩容顺序搞错:先扩阵列容量再用文件系统工具扩文件系统,反过来做会白忙一场
  • 以为软 RAID 不需要热备:坏盘后仍要靠人工介入,重建窗口并不会因为「软件实现」而缩短

数据来源与参考

  • man 8 mdadm
  • Linux 内核文档 md(Multiple Devices)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌