首页/系统/服务器硬件与 RAID 速查/条带宽度与整条带写
RAID 级别与计算68 条

条带宽度与整条带写

条带宽度是数据跨盘分布的总宽度:条带元素 × 数据盘数。文件系统块对齐到条带宽度时,写操作可以整条带落盘,避免读改写。

条带宽度与整条带写

条带宽度(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 上的性能可能差出一倍以上,而且这类损失在监控上很难看出来。

易错点

  • 把 stripe width 按全部盘数计算:校验盘不参与数据条带,算出的宽度偏大,对齐反而错位
  • 修改分区对齐会擦除数据:既有阵列无法在线调整,只能在建阵列与建文件系统时规划好
  • 只对齐分区不管文件系统:路只走了一半,块大小与条带不成整数比仍会跨条带
  • 忽略逻辑卷的上层条带:加了卷层条带后,两层参数不匹配会把对齐效果抵消
  • 不去实测验证:对齐是否正确最终看 fio 曲线,纸上算完就上线容易留下隐患

数据来源与参考

  • man 8 mdadm(条带与 chunk)
  • Red Hat 存储管理指南(条带对齐)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌