여러 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

Frostschutz의 대답은 매우 간단했습니다. 즉시 병렬 재구축을 시작했지만 아무런 효과가 없었음에도 불구하고 첫 번째 어레이 재구축 속도가 갑자기 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

관련 정보