RAID1システムは、ミラーリング時にソースとして使用するディスクと宛先として使用するディスクをどのように決定しますか?
たとえば、次のシナリオを想定します。RAID1アレイが2つのディスクAとBで作成されます。AはディスクCに置き換えられ、アレイに追加されます。ファイルは時間の経過とともに変更されています。ここで、Bが削除され、Aが再挿入されます。
RAID1システムは、AとCが同期していないことを認識しますか?そして、そのCはAよりも最新ですか?そうでない場合は、ディスクAが挿入されたときにミラーリングプロセスがすぐに開始されないようにする安全な方法はありますか?
編集:私のシナリオでは、Aが削除されたときに失敗しなかったと想定していることを明確にする必要があります。したがって、私が理解している限り、RAID1システムがそれらの間でミラーリングする方法を決定する必要がある場合、AもCも「ダーティ」です。 。 (そして、ビットマップはないと仮定しましたが、これが関連している可能性があることを理解しています。)
何が起こるかというと、2つのディスクがタンデムに書き込まれ、交換可能に読み取られます。これはマルチマスターシステムであり、これからミラーリングによる読み取りパフォーマンスの向上が得られます。
1つのボリュームが不良になると、その配列はdegraded
と呼ばれます。次に、新しいディスクを追加します。 RAIDコントローラは、このドライブにボリュームの一部が含まれていないことを認識し(dirty
)、アレイは、アレイの他の場所からドライブに格納することになっているデータのコピーを開始します(このプロセスはrebuilding
と呼ばれます)。 RAID 1の場合、コピー元となる場所は他に1つだけです。再構築が完了すると、新しいボリュームはclean
になり、システムはフォールトトレラントになり、再びマルチマスターになります(normal
)。
再構築が行われる前に他の元のディスクが削除されたり失敗したりすると、データが失われます(削除されたが死んでいない場合、これは簡単に回復できます)。ただし、再構築が行われた後に削除され、新しいディスクが追加された場合、アレイは、通常の再構築に劣化するのとまったく同じプロセスを経ます。
これは少し単純化されていますが、ディスクに障害が発生したり、削除および追加されたりするケースの大部分を表しています。たとえば、通常、ボリュームの一部にダーティのフラグが立てられる可能性もあります。
mdadm
を使用したソフトウェアミラーについて話しています。ビットマップを使用するかどうかを記述していません。私はあなたがビットマップを使用していると仮定しています(他の場合、ディスクが失われたり再接続されたりするたびに、最初のブロックから完全な再ミラーリングが開始されます)。
ビットマップの場合、これらのビットマップはディスクごとに(ミラーディスク自体の内部ビットマップとして、または外部ビットマップ(指定した場合))保存されます。これもディスクごとです。
これがあなたの質問への答えでもあります。最初は、すべてのビットが「ダーティ」とマークされています。つまり、再同期する必要があります。各ビットは、物理ディスク上のブロックを表します。したがって、これらのビットマップのステータスは重要です。
これらのビットマップのステータスは、cat /proc/mdstat
で確認できます。
ミラーを作成する場合、ビットマップの作成は標準操作ではないことに注意してください。後でmdadm --grow
で変更できます。
1台のドライブでいつでも電源を入れた場合。通常、ドライブには書き込みカウンターのようなものがあります。ですから、どちらか高い方がマスターになります。
したがって、ドライブAを1週間取り出しても、ドライブBで実行し続けると、その間に書き込みが発生し、書き込みカウンターが高くなります。そしてそれがマスターになります。
一部のコントローラーは、前回の起動時にあったものに基づいて作成します。ドライブが1週間欠落していた場合、ドライブは再び表示され、同期していないと見なされます。
両方のドライブを同時に取り外す場合、それが何をするかはコントローラーに依存します。ほとんどの場合、インポートできる外部配列を表示するだけです。