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への変換には2つのステップが必要であると想像できます。最初のディスクはRAID4レイアウトを使用してRAID5に変換され、パリティディスクは最後のディスクとして使用されました。明らかにデータを再配置する必要がないため、変更はすぐに適用される可能性があります。 RAID4レイアウト内でダウングレードされたRAID5を作成するので、完全ではありませんが、明らかに正しい方向に進むステップです。次に何が起こるのかを見ることができると確信しています。 RAID0を珍しいレイアウトにダウングレードされたRAID5に変換した後、新しいレイアウト変更機能を使って真のRAID5に変換してみましょう。

これは、RAID5をRAID6に変換するために使用できる非常に似たプロセスです。まず、パリティブロックは正常に展開されますが、Qブロックはすべて最後のデバイス(新しいデバイス)の非標準レイアウトを使用してRAID 5をRAID 6に変更します。これはRAID6ドライバを使用するRAID6ですが、RAID6ではなくレイアウトを使用します。したがって、レイアウトを「簡単に」変更すると、作業が完了します。

このプロセスを逆にすると、RAID6をRAID5に変換できます。まず、レイアウトをほぼRAID5レイアウトに変更しましたが、Qドライブが追加されました。その後、Qドライブを忘れて物理RAID5に変換します。

データ再ストライピングの複雑さ

これらすべての最も汚れた部分は、データがクラッシュや他のシステムのシャットダウン時にも生き残ることを保証することです。最初の形状の変更では、デバイスの数だけを増やすことができるので、非常に簡単です。ほとんどの場合、デバイスには、古いレイアウトのデータを読み取る場所と新しいレイアウトのデータを書き込む位置との間に間隔があります。この間隔により、そのデータのコピーが2つあります。再構成中に小さなセクションへの書き込みを無効にすると、クラッシュ後に以前のレイアウトにまだ良いデータがあることを知り、記録した最後のいくつかのストリップを再配置できます。

古いレイアウトの上に新しいレイアウトを作成する必要があるため、最初のいくつかのストライプでは機能しません。そのため、クラッシュ後に古いレイアウトが破損し、新しいレイアウトが不完全になる可能性があります。したがって、mdadmは最初のいくつかのストライプを慎重にバックアップし、まだ再構成の初期段階であるアレイを組み立てるときに最初にバックアップから復元します。

ブロックサイズやレイアウトの変更など、デバイスの数を変更しない再構成の場合、各書き込みは同じデータの以前のレイアウトを上書きするため、衝突後には確実に一連のブロックがあるはずです。古いレイアウト、新しいレイアウト、またはその両方を採用するかどうかを確認できます。したがって、現在再構成されているブロック範囲のバックアップを常に保持する必要があります。

これはmdadm 3.1の新機能の最も複雑な部分です(まだリリースされていませんが、git://neil.brown.name/mdadmのdevel-3.1四半期にあります)。 mdadmは再構成を監視し、発生頻度の上限を設定し、再構成を許可する領域が書き込み禁止およびバックアップされるようにします。

これは、すべてのデータがバックアップに1回、アレイの新しいレイアウトに1回、合計2回コピーされることを意味します。これは明らかにそのような再発明が非常に遅いことを意味します。しかし、それは安全のために支払わなければならない対価です。保険のようです。あなたはお金を払うのを嫌うかもしれませんが、お金を払わずにそれが必要であることがわかったら、もっと嫌いになります。

おすすめ記事