首页/系统/服务器硬件与 RAID 速查/md RAID10 的 near/far/offset 布局
RAID 级别与计算68 条

md RAID10 的 near/far/offset 布局

md 的 RAID10 支持三种副本布局:near(副本挨着,读并发提升)、far(副本分离,可靠性更好)、offset(交错,均衡)。布局不同,容量利用率与故障容忍也不同。

md RAID10 布局是什么

md 的 RAID10 不是「先镜像再条带」的固定写法,而是把每个数据块复制若干份再分散到盘上,副本的摆放方式由 --layout 决定:near(n)副本落在相邻盘,far(f)副本跨越阵列两半,offset(o)副本整体错开一个盘位。两副本时三种布局的容量利用率都是 50%,差别在读并发能力与能同时容忍哪些盘损坏。

基本信息

适用平台Linux(mdadm / 内核 md)
最少组件盘数4
布局参数--layout=n2、f2、o2(n3/f3/o3 表示三副本)
查看方式mdadm --detail /dev/md0 或 /proc/mdstat
容量口径两副本固定 50%,三副本约 33%

典型使用场景

  • 数据库等以随机读为主、需要高并发读的业务选 near,副本可被并行读出
  • 对可靠性要求更高、能接受写放大代价的场景评估 far
  • 读写压力需要在半阵列之间均衡时选 offset
  • 接手旧阵列或换盘前核对当前生效的布局与副本份数
  • 迁移到硬件 RAID 前评估容量与容错差异,避免按经验直换算

布局对照

布局副本位置读性能耐受故障容量利用率
near (n2)相邻盘高,可并发读多份副本特定单盘,取决于数据分布50%
far (f2)跨半区分离较高部分双盘组合也可耐受50%
offset (o2)整体错开一个盘位读写在半阵列间均衡视具体组合50%

创建与查看布局

创建与查看布局
mdadm --create /dev/md0 --level=10 --layout=f2 --raid-devices=4 /dev/sd[b-e]1   # 4 盘两副本 far 布局
mdadm --create /dev/md1 --level=10 --layout=n3 --raid-devices=6 /dev/sd[b-g]1   # 6 盘三副本 near 布局
mdadm --detail /dev/md0 | grep -i layout                                        # 查看当前生效的布局
mdadm --detail /dev/md0 | grep -iE 'raid devices|state'                         # 连带成员数与阵列状态一起确认
cat /proc/mdstat                                                                # 快速看级别、成员与重建进度
far 布局对「整列掉电、背板整段故障」这类相关性失效更友好,但它假定故障不发生在对称位置;选型时按实际盘数和风险模型核算,不能只看 50% 利用率这一个数。
布局写进元数据,不能在线切换:想改 near/far/offset 只能备份后重建阵列,副本份数变化还会连带改变可用容量与条带布局。

易错点

  • 把 n2/f2/o2 当成性能上的小差别:读并发与可容忍的故障组合差别很大,直接决定双盘失效时会不会丢数据
  • 以为 RAID10 一定「坏两块盘都不丢」:两副本时某些盘对同时失效就会丢掉同一块数据的两份副本,必须先按布局推算实际能坏哪几块
  • 指望在线改布局:md 不支持,只能备份后重建,而重建期间阵列失去冗余
  • 用 near 的压测数据推断 far/offset 的重建时间与 IO 放大:三者读写路径不同,结论不能直接套用

数据来源与参考

  • man 8 mdadm(--layout)
  • Linux 内核 md 文档(RAID10 布局)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌