条带宽度与整条带写
条带宽度(stripe width)指一次数据在阵列上跨盘分布的完整宽度,等于条带元素大小乘以数据盘数(不含校验盘)。它是判断「一次写入是否整条带落盘」的尺子:请求大小达到或超过条带宽度的整数倍时,RAID 5/6 可以省掉读旧数据与旧校验的步骤,把写惩罚从 4/6 降到 2/4。分区起点、文件系统块大小与上层逻辑卷条带都按这个宽度对齐,才拿得到这部分性能。
基本信息
| 定义 | stripe width = 条带元素大小 × 数据盘数(不含校验盘) |
|---|---|
| 示例 | 4 块数据盘 + 1 块校验盘、条带元素 64KB:条带宽度 = 256KB |
| 对齐要点 | 分区起点、文件系统块、逻辑卷条带都要按条带宽度对齐 |
| RAID 10 的算法 | 数据盘数即成员盘数,条带宽度 = 条带元素 × 盘数 |
| 影响 | 不对齐会退化成跨条带写,RAID 5/6 上每次写都触发读改写 |
查看与计算
查看与计算
cat /sys/block/md0/md/chunk_size # md 条带元素大小(字节)
cat /sys/block/md0/md/raid_disks # 阵列总盘数,减去校验盘得数据盘数
blockdev --getss /dev/md0 # 逻辑扇区大小
# 计算:条带宽度 = chunk_size x 数据盘数
# 例:chunk 65536 字节 x 4 块数据盘 = 262144 字节(256KB)
storcli /c0/v0 show all | grep -i -E 'Strip|Size' # 硬件卡上的条带参数对齐环节与工具
| 环节 | 对齐对象 | 常用工具 |
|---|---|---|
| 分区 | 分区起始扇区按条带宽度取整 | parted、sgdisk |
| 文件系统 | 块大小与条带宽度成整数比 | mkfs 时指定块大小 |
| 逻辑卷 | 条带大小与阵列条带一致 | lvcreate -I |
| 应用层 | 数据库块与条带边界对齐 | 数据库初始化参数 |
怎么确认已经对齐
- 读出 chunk_size 与数据盘数,算出条带宽度并记进配置文档
- 用 parted 打印分区表,确认起始扇区能被条带宽度整除
- 建文件系统时显式指定块大小,避免默认值造成零头
- 上线后用 fio 跑顺序与随机写入,观察是否出现明显的性能台阶
不对齐会出现跨条带写:每个逻辑写都要读改写两次,RAID 5/6 上的性能可能差出一倍以上,而且这类损失在监控上很难看出来。