我刚刚更换了 raid6 阵列(由 8 个驱动器组成)中的一个故障驱动器,在恢复过程中,我确实注意到 iostat 中有些奇怪。所有驱动器的速度都相同(符合预期),但有一个驱动器(sdi)的读取速度始终快于其他驱动器。
它的读取速度也快了约八分之一,这可能与阵列中总共有八个驱动器有关,但我不知道为什么......
在整个恢复过程中都是如此(同一个驱动器的读取速度总是比其他驱动器快),从恢复的总体统计来看,所有驱动器的读取/写入量都差不多,除了 sdi 的读取量多八分之一。
一些 iostat 统计数据的平均值持续 100 秒:
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sdb 444.80 26.15 0.00 2615 0
sdb1 444.80 26.15 0.00 2615 0
sdc 445.07 26.15 0.00 2615 0
sdc1 445.07 26.15 0.00 2615 0
sdd 443.21 26.15 0.00 2615 0
sdd1 443.21 26.15 0.00 2615 0
sde 444.01 26.15 0.00 2615 0
sde1 444.01 26.15 0.00 2615 0
sdf 448.79 26.15 0.00 2615 0
sdf1 448.79 26.15 0.00 2615 0
sdg 521.66 0.00 26.15 0 2615
sdg1 521.66 0.00 26.15 0 2615
sdh 443.32 26.15 0.00 2615 0
sdh1 443.32 26.15 0.00 2615 0
sdi 369.23 29.43 0.00 2942 0
sdi1 369.23 29.43 0.00 2942 0
有人能给出合理的解释吗?当我发现它快了大约八分之一时,我认为这与奇偶校验有关,但这真的没有多大意义(我不知道 mdadm 中具体的 raid 6 实现,但它肯定不能将所有奇偶校验存储在一个驱动器上...)。
更新:好吧,我刚刚确实更换了另一个驱动器(相同的阵列),我看到了完全相同的结果,但这次使用不同的驱动器读取速度更快(实际上,这是我为上次恢复添加的驱动器,它决定要做更多的工作)。
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sdb 388.48 24.91 0.00 2490 0
sdb1 388.48 24.91 0.00 2490 0
sdc 388.13 24.91 0.00 2491 0
sdc1 388.13 24.91 0.00 2491 0
sdd 388.32 24.91 0.00 2491 0
sdd1 388.32 24.91 0.00 2491 0
sde 388.81 24.91 0.00 2491 0
sde1 388.81 24.91 0.00 2491 0
sdf 501.07 0.00 24.89 0 2489
sdf1 501.07 0.00 24.89 0 2489
sdg 356.86 28.03 0.00 2802 0
sdg1 356.86 28.03 0.00 2802 0
sdh 387.52 24.91 0.00 2491 0
sdh1 387.52 24.91 0.00 2491 0
sdi 388.79 24.92 0.00 2491 0
sdi1 388.79 24.92 0.00 2491 0
这些是 4k 驱动器(但和所有驱动器一样(或至少曾经如此)它们仍报告 512 字节扇区)。因此我认为我可能以某种方式错误地对齐了分区(我不知道这可能有什么影响,取决于 mdadm 的工作方式和条带大小,我猜,无论如何很容易检查):
debbie:~# fdisk -l -u /dev/sd[bcdefghi] | grep ^/dev/sd
/dev/sdb1 2048 3906988207 1953493080 fd Linux raid autodetect
/dev/sdc1 2048 3906988207 1953493080 fd Linux raid autodetect
/dev/sdd1 2048 3906988207 1953493080 fd Linux raid autodetect
/dev/sde1 2048 3906988207 1953493080 fd Linux raid autodetect
/dev/sdf1 2048 3907024064 1953511008+ fd Linux raid autodetect
/dev/sdg1 2048 3907024064 1953511008+ fd Linux raid autodetect
/dev/sdh1 2048 3906988207 1953493080 fd Linux raid autodetect
/dev/sdi1 2048 3906988207 1953493080 fd Linux raid autodetect
f 和 g 是新驱动器,看起来稍微大一些,但它们都从同一扇区开始(所有驱动器都是同一品牌和型号(并使用相同的控制器),但新驱动器的购买时间比其他驱动器晚约 6 个月)。
答案1
好奇。RAID6 当然不存储任何事物都在一个驱动器上,所以一般来说,没有理由让一个驱动器比其他驱动器读取得更多。我注意到有一个相应的减少在那个驱动器上的 TPS 中;我的猜测是,那sdi
是不同型号或技术的驱动器,或者连接到不同型号的控制器,因此可以进行不同的读取(每个事务的读取次数更大)。