raid阵列读写均衡性需逐盘对比物理盘i/o分布,关键指标为rkb/s、wkb/s、r/s、w/s、%util和await;不均衡常因raid5写放大、文件系统条带未对齐、io路径绑定或重建状态导致。

分析 RAID 阵列读写均衡性,不能只看整体逻辑设备(如 /dev/md0 或 /dev/mapper/vg-lv)的汇总指标——那会掩盖底层物理盘间的负载差异。关键在于**逐盘对比实际 I/O 分布**,确认各成员盘是否承担相近的读写压力。
先查清 RAID 结构和成员盘
运行以下命令确认 RAID 类型及组成设备:
-
cat /proc/mdstat(软 RAID):查看 md 设备状态与成员盘(如sda1 sdb1 sdc1) -
lsblk -f或lshw -class disk:识别物理盘与逻辑卷映射关系 -
mdadm --detail /dev/md0:确认 RAID 级别(如 RAID5/RAID10)、活动盘数、重建状态
用 iostat -x 按物理盘采样
直接监控每个成员盘(而非逻辑阵列设备),例如:
-
iostat -x -m 2 5 /dev/sda /dev/sdb /dev/sdc(每 2 秒刷新,共 5 次) - 若使用硬件 RAID 卡,监控其虚拟盘(如
/dev/cciss/c0d0)同时,还需通过厂商工具(如hpacucli、megaraid-status)获取物理盘级统计
重点关注每块盘的:rkB/s + wkB/s(吞吐量)、r/s + w/s(IOPS)、%util 和 await。均衡性差的表现是:某盘吞吐量或 IOPS 显著高于其他盘(比如相差 >2×),且其 %util 接近 100% 而其余盘仅 30%–50%。
识别常见不均衡原因
RAID 本身不保证绝对均衡,但严重偏差往往指向配置或访问模式问题:
- RAID5 写放大 + 热区:小块随机写集中在同一校验盘或特定数据盘;检查是否有单个应用持续往固定文件写入
-
文件系统条带对齐失效:XFS/ext4 创建时未指定
-d su=64k -d sw=4(对应 RAID 条带宽度 × 盘数),导致 IO 无法跨盘分散 - 单一 LUN 或分区绑定到某物理路径:在多路径或虚拟化环境中,IO 路径未负载分发,所有请求走同一物理链路
- 重建或降级状态:RAID 处于 degraded 或 recovery 中,部分盘承担额外计算负载,此时均衡性无参考价值
验证与辅助手段
iostat 提供基础分布视图,但需结合其他工具交叉验证:
- 用
iotop -o -P查看进程级 IO,并结合lsof -p PID确认其操作的是哪个底层设备 - 运行
blktrace -d /dev/sda -o - | blkparse -i -抓取原始 IO 流,分析请求地址分布是否均匀(需一定经验) - 对 RAID10,读操作天然可并行,若读不均衡,大概率是上层应用(如数据库)未启用多线程读或查询未打散到不同表空间











