web-dev-qa-db-ja.com

Linux RAID5アレイで、まだ故障していないディスクを安全に交換する方法は?

4つのディスクにソフトウェアRAID5アレイ(Linux md)があります。

アレイを機能低下状態にせずに、ディスクの1つを新しいものと交換したい、可能な場合はオンライン。それはどのようにして可能でしょうか?

次のようなことはしたくないので重要です。

  • 他のディスクにストレスがかかるリスクを冒して、再構築中にクラッシュする可能性がある、
  • 「パリティなしの状態」になるリスクを冒して、しばらくの間、安全策を講じません。

私はオンラインでそうすることは非常に求めていると思います、そして私は古いディスクのデータを新しいディスクofflineに生コピー(dd)してから置き換えるべきですそれは理論的には可能だと思います...

一部のコンテキスト:これらのディスクはすべて、5.5年以上にわたってほぼ継続的に回転しています。それらは今のところまだ完全に機能し、すべて(長い)SMARTセルフテストに合格します。しかし、これらの4つのディスクの1つはそれほど長く続かないと思う理由があります(予測失敗)。

26
Totor

Mdadm 3.3の使用

mdadm 3. (2013年9月3日リリース)なので、 .2+カーネル を使用している場合は、次のように進めることができます。

# mdadm /dev/md0 --add /dev/sdc1
# mdadm /dev/md0 --replace /dev/sdd1 --with /dev/sdc1

sdd1は交換するデバイスです。sdc1はそのための優先デバイスであり、アレイのスペアとして宣言する必要があります。

--withオプションはオプションです。指定しない場合、使用可能なスペアが使用されます。

古いmdadmバージョン

注: .2+カーネルが必要です

まず、新しいドライブをスペアとして追加します(md0sdc1をそれぞれRAIDおよびディスクデバイスに置き換えます)。

# mdadm /dev/md0 --add /dev/sdc1

次に、次のようなコピー/置換操作を開始します(sdd1は失敗したデバイスです):

# echo want_replacement > /sys/block/md0/md/dev-sdd1/state 

結果

システムはすべての読み取り可能なブロックをsdd1からsdc1にコピーします。読み取り不能なブロックになると、パリティから再構築されます。操作が完了すると、以前のスペア(ここではsdc1)がアクティブになり、故障したドライブは故障(F)とマークされ、削除できます。

注:クレジットはfrostschutzおよびAnsgar Esztermann元のソリューションを見つけた人( 重複した質問 を参照)。

古いカーネル

他の答えは提案します:

  • Johnnyアプローチ :アレイをRAID6に変換し、ディスクを「交換」してからRAID5に戻します。
  • Hauke Lagingアプローチ :RAID5アレイからディスクを簡単に削除し、RAID1(ミラー)の一部にします新しいディスクとそのミラードライブをRAID5アレイに追加します(理論上)...
37
Totor

RAID-6(1ではなく2パリティディスク)を実行することを気にせず、mdadmin 3.1.x以降を実行している場合、 RAID-5アレイをRAID-6に変換 =追加のパリティディスクを追加します。ただし、これにより、再構築中にアレイにストレスがかかります。また、書き込み中に更新するパリティディスクが多いため、パフォーマンスに影響があります。

ただし、正常に完了した場合は、障害が発生したディスクをそのままにしておくことができ、最終的に障害が発生した場合でも、アレイのパリティ保護は維持されます。 RAID6として維持するのを待たなければ、アレイをRAID6からRAID5に戻すことができると思います。

アレイをRAID-5として維持し、アレイを機能低下モードにせずにディスクを交換するオンラインの方法はわかりません。交換に失敗したとマークする必要があると思います。あなたのddコピーのアイデアはそれを行う方法かもしれません。

3
Johnny

これは要件を満たす可能性があります

  1. オンライン
  2. 交換するディスク以外のディスクにストレスをかけないでください

しかし、以下が機能する可能性があるとしても、おそらく「本の中に」そのような推奨はありません...

考え:

  1. ディスクOLDをアレイから取り外します(少しの間):mdadm --manage /dev/raid5 --fail /dev/OLD
  2. 古いディスクと新しいディスクから新しいmdデバイス(RAID-1)を作成します:mdadm --build /dev/md42 --level=mirror --raid-devices=2 /dev/OLD /dev/NEW
  3. RAID-1をアレイに戻します(/ dev/OLDではなく):mdadm --manage /dev/raid5 --re-add /dev/md42

すべき :-)が起こること:

  1. RAID-5は/ dev/md42を同期させます。これには時間がかかりません。
  2. RAID-5は、通常は再び動作します(ただし低速です)。
  3. / dev/NEWは/ dev/OLDと同期されます。

同期の進行状況を見る(cat /proc/mdstatまたはmdadm --monitor)。同期が完了したら、RAID-5からRAID-1を取り出し、RAID-1を停止して、RAID-5に/ dev/NEWを再度追加します。すべて問題なければ、問題を回避するために/ dev/OLDのmdraidスーパーブロックを上書きします。mdadm --zero-superblock

警告: RAID-5の高速同期は、ビットマップを使用する場合にのみ機能する場合があります。ない場合は、まずダミーのRAID-5(ビットマップなし)でテストしてください。または追加してください。少なくとも外部を追加することは可能です。それ以外の場合は、デバイスを変更する前にRAID-5を停止する必要があります。ただし、RAID-5から起動する場合、これは少し複雑になります。

3
Hauke Laging