从裸盘到可用卷
mdadm 创建 RAID 5 的完整链条是:确认盘与分区标记、执行创建、等待后台同步、建文件系统、挂载并写入开机自动挂载。容易出问题的不是命令本身,而是盘名顺序、元数据版本与开机自动组装这三处——盘名写错会建出错误的阵列结构,元数据版本选错可能影响引导盘,自动挂载与自动组装没配好则会在重启后「阵列消失」。
完整创建流程
完整创建流程
mdadm --create /dev/md0 --level=5 --raid-devices=4 --chunk=128 --spare-devices=1 --metadata=1.2 /dev/sd[b-f]1
watch -n5 cat /proc/mdstat # 观察 initial resync 进度
mkfs.xfs -f /dev/md0 # 建文件系统
mkdir -p /data && mount /dev/md0 /data
echo '/dev/md0 /data xfs defaults 0 2' >> /etc/fstab
mdadm --detail --scan >> /etc/mdadm.conf # 让系统重启后能自动组装关键参数
| --level | 阵列级别,5 表示分布式校验 |
|---|---|
| --raid-devices | 参与条带的盘数(示例 4 块数据盘) |
| --spare-devices | 热备盘数量(示例 1 块) |
| --chunk | 条带大小,128KB~512KB 常见 |
| --metadata | superblock 版本,1.2 为当前默认,写在盘头 4K 处 |
创建前后的核对项
| 阶段 | 核对内容 | 常见问题 |
|---|---|---|
| 创建前 | 盘号与容量、是否已有分区或阵列 | 盘名写错或盘上残留旧阵列元数据 |
| 创建中 | resync 进度与阵列状态 [UUUU] | 误把 --spare-devices 写进成员数 |
| 创建后 | mkfs 是否成功、挂载与容量显示 | 容量对不上(单位换算) |
| 重启前 | fstab 与 mdadm.conf 是否落盘 | 重启后阵列不组装、卷不挂载 |
创建后的收尾动作
- 把 mdadm --detail --scan 的输出写进配置文件,确保重启后自动组装
- fstab 建议用 UUID 或标签而不是 /dev/md0,避免设备名变化导致挂载失败
- 记录成员盘序列号与槽位,换盘时不必靠猜
- 按周期执行数据巡检(echo check > /sys/block/md0/md/sync_action),提前暴露坏道
参数怎么定
- --chunk 按业务定:OLTP 类 64~128KB,文件与备份 256~512KB,建好后基本不能在线改
- --metadata=1.2 是默认选择,整盘做阵列又当引导盘时要注意 superblock 写盘头带来的引导冲突
- --spare-devices 至少要留 1:RAID 5 只有一块盘容错,坏盘后自动重建能省下最宝贵的时间
- 成员盘尽量同型号同固件:容量按最小盘计,速度按最慢盘走
创建后 initial resync(同步)在后台进行,期间阵列已可使用但性能未达最佳;可用 /proc/sys/dev/raid/speed_limit_max 与 speed_limit_min 控制同步速率。