mdadm을 사용하여 Raid 5에서 Raid 6으로의 마이그레이션을 가속화하는 방법은 무엇입니까?

mdadm을 사용하여 Raid 5에서 Raid 6으로의 마이그레이션을 가속화하는 방법은 무엇입니까?

오늘 저는 새 디스크(7개 디스크에서 8개 디스크로, 모두 3TB)를 추가하여 Raid 5를 Raid 6으로 마이그레이션하기 시작했습니다. 이제 리모델링이 진행 중입니다.

Personalities : [raid6] [raid5] [raid4] 
md0 : active raid6 sdi[9] sdh[8] sdf[7] sdc[6] sdd[4] sda[0] sde[5] sdb[1]
      17581590528 blocks super 1.2 level 6, 512k chunk, algorithm 18 [8/7] [UUUUUUU_]
      [>....................]  reshape =  2.3% (69393920/2930265088) finish=6697.7min speed=7118K/sec

unused devices: <none>

하지만 고통스러울 정도로 느립니다. 완성까지 이제 약 5일 남았습니다. 예전에는 하루 정도에 배열을 재구성했는데 여기 상황이 너무 안 좋네요. 속도가 매우 낮습니다. 백업 파일은 SSD에 있습니다.

스트라이프 크기와 최소 및 최대 속도 제한을 변경했지만 아무 것도 변경되지 않았습니다.

프로세스 속도를 합리적인 시간으로 단축할 수 있는 방법이 있습니까? 아니면 프로세스가 완료될 때까지 5일을 기다려야 합니까?

업데이트: iostat -kx 10

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.05    0.00    1.68   22.07    0.00   76.20

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda            1675.90  1723.00   27.60   23.90 13875.20  6970.00   809.52     0.55   10.79    8.59   13.33   7.97  41.02
sdb            1675.90  1723.10   27.20   23.80 13670.40  6970.00   809.43     0.55   10.80    8.96   12.90   8.12  41.43
sdc            1675.90  1723.60   27.50   23.30 13824.00  6970.00   818.66     0.65   12.85   10.48   15.65   9.83  49.94
sdd            1675.90  1723.10   27.60   23.80 13875.20  6970.00   811.10     0.55   10.80    8.93   12.98   8.16  41.95
sde            1675.90  1723.10   27.20   23.80 13670.40  6970.00   809.43     0.60   11.79    9.17   14.79   9.19  46.87
sdf            1675.90  1723.80   27.70   23.10 13926.40  6970.00   822.69     0.72   14.28   11.65   17.43  10.12  51.40
sdg               0.00     4.10    0.00   93.20     0.00 39391.20   845.30     6.07   65.14    0.00   65.14   2.71  25.29
dm-0              0.00     0.00    0.00    4.30     0.00    18.40     8.56     0.00    0.07    0.00    0.07   0.02   0.01
dm-1              0.00     0.00    0.00   89.60     0.00 39372.80   878.86     6.07   67.78    0.00   67.78   2.82  25.28
md0               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sdh            1583.50  1631.70  216.50  115.90 13824.00  6970.00   125.11     1.56    4.73    5.36    3.55   0.43  14.41
sdi               0.00  1631.70    0.00  115.90     0.00  6970.00   120.28     0.21    1.77    0.00    1.77   0.28   3.25
dm-2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-3              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-4              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

sdi는 내가 추가한 마지막 디스크입니다. sdg는 SSD입니다. dmX는 LVM의 파티션입니다.

답변1

~에 따르면Neil Brown의 이 블로그 게시물(이것창조자mdadmmdadm) 다음을 수행하면 블록 범위 백업 프로세스로 인한 속도 손실을 방지할 수 있습니다.

  1. RAID 장치 수 늘리기(예: 4개 디스크 RAID5에서 5개 디스크 RAID6으로 재구성) mdadm --grow /dev/md0 --level=6 --raid-disk=5
  2. 이 옵션을 지정하지 마세요.--backup-file

그가 블로그 게시물에서 자세히 설명하는 이유는 다른 드라이브를 추가할 때 파일을 백업할 필요가 없기 때문입니다. 이는 프로세스가 약간 다르기 때문입니다. 이 경우 일반적으로 모양 변경 중에 조작되는 이전 레이아웃 데이터를 백업하는 데 사용할 수 있는 이전 레이아웃과 새 레이아웃 사이에 간격이 있습니다.

그의 기사에서 발췌한 내용은 이에 대해 더 자세히 설명합니다.

레벨 변경 작동 방식

"RAID5"가 표준 정의보다 더 일반적인 것으로 간주하고 여러 장치에 1개의 패리티 블록을 더해 데이터를 스트라이핑하는 레이아웃을 허용한다면 RAID4는 RAID5의 특별한 경우로 간주할 수 있습니다. 그렇다면 RAID0에서 RAID5로의 변환에는 두 단계가 필요하다고 상상할 수 있습니다. 첫 번째 디스크는 RAID4 레이아웃을 사용하여 RAID5로 변환되었으며 패리티 디스크는 마지막 디스크로 사용되었습니다. 분명히 데이터를 재배치할 필요가 없으므로 변경 사항이 즉각적으로 적용될 수 있습니다. RAID4 레이아웃 내에서 다운그레이드된 RAID5를 생성하므로 완전하지는 않지만 분명히 올바른 방향으로 나아가는 단계입니다. 다음에 무슨 일이 일어나는지 볼 수 있을 거라 확신합니다. RAID0을 특이한 레이아웃으로 다운그레이드된 RAID5로 변환한 후 새로운 레이아웃 변경 기능을 사용하여 진정한 RAID5로 변환해 보겠습니다.

이는 이제 RAID5를 RAID6으로 변환하는 데 사용할 수 있는 매우 유사한 프로세스입니다. 먼저 패리티 블록은 정상적으로 배포되지만 Q 블록은 모두 마지막 장치(새 장치)에 있는 비표준 레이아웃을 사용하여 RAID5를 RAID6으로 변경합니다. 이는 RAID6 드라이버를 사용하는 RAID6이지만 RAID6이 아닌 레이아웃을 사용합니다. 따라서 레이아웃을 "간단히" 변경하면 작업이 완료됩니다.

이 과정을 반대로 하면 RAID6을 RAID5로 변환할 수 있습니다. 먼저 레이아웃을 거의 RAID5 레이아웃으로 변경했지만 Q 드라이브가 추가되었습니다. 그런 다음 Q 드라이브를 잊어버리고 실제 RAID5로 변환합니다.

데이터 재스트라이핑의 복잡성

이 모든 것 중 가장 지저분한 부분은 데이터가 충돌이나 기타 시스템 종료 시에도 살아남도록 보장하는 것입니다. 첫 번째 모양 변경에서는 장치 수만 늘릴 수 있으므로 매우 쉽습니다. 대부분의 경우 장치에는 이전 레이아웃의 데이터를 읽는 위치와 새 레이아웃의 데이터를 쓰는 위치 사이에 간격이 있습니다. 이러한 간격으로 인해 해당 데이터의 복사본이 두 개 있게 됩니다. 재구성하는 동안 작은 섹션에 대한 쓰기를 비활성화하면 충돌 후 이전 레이아웃에 여전히 좋은 데이터가 있음을 알고 기록했던 마지막 몇 개의 스트립을 다시 배치할 수 있습니다.

이전 레이아웃 위에 새 레이아웃을 작성해야 하므로 처음 몇 개의 스트라이프에는 작동하지 않습니다. 따라서 충돌 후 이전 레이아웃이 손상될 수 있으며 새 레이아웃이 불완전할 수 있습니다. 따라서 mdadm은 처음 몇 개의 스트라이프를 신중하게 백업하고, 아직 재구성 초기 단계인 어레이를 조립할 때 먼저 백업에서 복원합니다.

블록 크기 또는 레이아웃 변경과 같이 장치 수를 변경하지 않는 재구성의 경우 각 쓰기는 동일한 데이터의 이전 레이아웃을 덮어쓰므로 충돌 후에는 확실히 일련의 블록이 있을 것입니다. 이전 레이아웃이나 새 레이아웃 또는 둘 다를 채택하는지 여부를 알 수 있습니다. 따라서 현재 재구성 중인 블록 범위의 백업을 항상 보유해야 합니다.

이는 mdadm 3.1의 새로운 기능 중 가장 복잡한 부분입니다(아직 출시되지 않았지만 git://neil.brown.name/mdadm의 devel-3.1 분기에서 찾을 수 있음). mdadm은 재구성을 모니터링하고 발생 빈도에 대한 상한을 설정하며 재구성을 허용하는 영역이 쓰기 비활성화되고 백업되도록 합니다.

이는 모든 데이터가 백업에 한 번, 어레이의 새 레이아웃에 한 번, 총 두 번 복사된다는 의미입니다. 이는 분명히 그러한 재발명이 매우 느리다는 것을 의미합니다. 하지만 그것은 안전을 위해 지불해야 하는 대가입니다. 그것은 보험과 같습니다. 당신은 돈을 내는 것을 싫어할 수도 있지만, 돈을 내지 않고 그것이 필요하다는 것을 알게 되면 더욱 싫어하게 될 것입니다.

답변2

제 생각에는 이는 mdadm이 raid 5에서 raid 6으로 마이그레이션하는 것과 관련이 있습니다. 방금 어레이에 새 디스크를 추가했는데 증가율이 내 하드웨어에 딱 맞는 수준입니다(40000K/s).

관련 정보