多个 mdadm raid 并行重建

多个 mdadm raid 并行重建

我想知道是否有任何程序可以启动两个或多个单独阵列的并发重建?

当一个正在重建时,另一个则保持现状:

md2 : active raid10 sdf5[4] sdd5[6] sdc5[5] sda5[7]
      7804374912 blocks super 1.2 64K chunks 2 near-copies [4/3] [_UUU]
      [=====>...............]  recovery = 28.8% (1124301568/3902187456) finish=364.1min speed=127142K/sec

md4 : active raid5 sde7[3](R) sdc7[0] sda7[2] sdb7[1]
      15623708416 blocks super 1.2 level 5, 64k chunk, algorithm 2 [3/3] [UUU]
        recovery=DELAYED

有什么方法可以并行启动另一个 md 阵列恢复吗?

更新1:

感谢接受的答案,我节省了大量时间:

md2 : active raid10 sdb5[8](R) sdf5[4] sdd5[6] sdc5[5] sda5[7]
      7804374912 blocks super 1.2 64K chunks 2 near-copies [4/4] [UUUU]
      [===============>.....]  recovery = 78.9% (3079104384/3902187456) finish=123.8min speed=110796K/sec

md4 : active raid5 sde7[3](R) sdc7[0] sda7[2] sdb7[1]
      15623708416 blocks super 1.2 level 5, 64k chunk, algorithm 2 [3/3] [UUU]
      [>....................]  recovery =  0.0% (3492100/7811854208) finish=708.0min speed=183794K/sec

尽管如此,由于我之前的不同尝试行为,我仍然遇到了非常有趣的问题,这些问题将在单独的答案中发布。

答案1

如果真正独立(不同的物理驱动器组),它们应该并行运行。

但是,当多个阵列共享相同的驱动器(同一驱动器的不同分区)时,重建会被延迟,因为在这里并行运行不会加快速度,反而会减慢速度。

您可以通过设置sync_force_parallel 标志来强制重新同步并行运行。

echo 1 | tee > /sys/block/md*/md/sync_force_parallel

答案2

霜舒茨的回答很开门见山,我立即开始并行重建,但即使没有影响,第一次阵列重建的速度突然下降了10倍!

md2 : active raid10 sdb5[8](R) sdf5[4] sdd5[6] sdc5[5] sda5[7]
      7804374912 blocks super 1.2 64K chunks 2 near-copies [4/4] [UUUU]
      [===============>.....]  recovery = 75.3% (2941270464/3902187456) finish=1723.0min speed=9294K/sec

md4 : active raid5 sde7[3](R) sdc7[0] sda7[2] sdb7[1]
      15623708416 blocks super 1.2 level 5, 64k chunk, algorithm 2 [3/3] [UUU]
      [=>...................]  recovery =  6.9% (542682052/7811854208) finish=692.7min speed=174889K/sec

我无法理解为什么会产生影响,直到我看到 mdadm -D 阵列的详细信息,突然意识到它开始重建错误的驱动器。

尝试多次失败删除、清除替换的超级块以及添加备用新驱动器,但仍然开始替换错误的驱动器。

然后我发现我可以查看每个驱动器状态的 md 数组:

#cat /sys/block/md4/md/rd?/state
in_sync
in_sync,want_replacement
in_sync,want_replacement

就是这样!我尝试将不同的驱动器作为不同位置的目标,因此我尝试将数据从不同的 md 驱动器迁移到不同的目标,然后取消操作,但是当我发出 mdadm /dev/mdX --replace /dev/sdX 时,驱动器被标记为want_replacement,系统不会忘记这一点,但我会忘记 :D

因此清除标志:

# echo -want_replacement > /sys/block/md4/md/rd1/state
# cat /sys/block/md4/md/rd?/state
in_sync
in_sync
in_sync,want_replacement

将一切就位,添加备用驱动器现在开始更换正确的驱动器,所有速度并行最大化:

# mdadm /dev/md4 --add /dev/sde7
# mdadm -D /dev/md4
...
    Number   Major   Minor   RaidDevice State
       0       8       39        0      active sync   /dev/sdc7
       1       8       23        1      active sync   /dev/sdb7
       2       8        7        2      active sync   /dev/sda7
       3       8       71        2      spare rebuilding   /dev/sde7

# cat /proc/mdstat
md2 : active raid10 sdb5[8](R) sdf5[4] sdd5[6] sdc5[5] sda5[7]
      7804374912 blocks super 1.2 64K chunks 2 near-copies [4/4] [UUUU]
      [===============>.....]  recovery = 78.9% (3079104384/3902187456) finish=123.8min speed=110796K/sec

md4 : active raid5 sde7[3](R) sdc7[0] sda7[2] sdb7[1]
      15623708416 blocks super 1.2 level 5, 64k chunk, algorithm 2 [3/3] [UUU]
      [>....................]  recovery =  0.0% (3492100/7811854208) finish=708.0min speed=183794K/sec

相关内容