これは、ZFSとRAID-Zに関するやや理論的な質問です。わかりやすくするために、例として3ディスクのシングルパリティアレイを使用しますが、問題は任意の数のディスクと任意のパリティに拡張できます。
プールにディスクA、B、およびCがあり、それがクリーンであるとします。
ここで、ディスクCを交換する目的でディスクDを物理的に追加し、ディスクCは引き続き正常に機能しており、予防保守のためにのみ交換されているとします。一部の管理者は、CをヤンクしてDをインストールする場合があります。これは、デバイスがIDを変更する必要がないため、もう少し整理されています。ただし、これにより、アレイが一時的に劣化したままになるため、この例では、Cをオフラインまたは削除せずにDをインストールするとします。Solarisのドキュメントには、次のようなコマンドを使用して、最初にオフラインにすることなくディスクを交換できます。
zpool replace pool C D
これにより、Dへの再シルバーリングが発生するはずです。再シルバーリングは「カーソル」に沿って「下向き」に進行するとします。 (内部実装で使用されている実際の用語はわかりません。)
ここで、再シルバーリングの途中で、ディスクAに障害が発生したとします。理論的には、カーソルBとDの上には十分なパリティが含まれ、カーソルBとCの下には十分なパリティが含まれるため、これは回復可能である必要があります。ただし、これが実際に回復可能であるかどうかは、私が知らない(そして、マニュアルには特定の用語で記載されていない)ZFSの内部設計の決定に依存します。
ZFSがカーソルの下のCに書き込みを送信し続ける場合は、問題ありません。ただし、ZFSが内部でCをなくなったかのように扱い、AとBの間のパリティからのみDを再シルバー化し、カーソルの下にAとBのみを書き込む場合は、乾杯します。
いくつかの実験でこの質問に答えることができますが、ZFSがこの状況を処理する方法をすでに知っている人がいるかもしれません。洞察をありがとうございました!
ファイルベースのプール(ファイルでバックアップされたmdデバイスを使用するFreeBSD 8.3のv28)でテストすると、それが機能するはずです。 resilverの進行中に、残りのディスクの1つをオフラインにすることができました。理想的には、実際のディスクでテストし、実際に1つをプルして100%確実にする必要がありますが、ZFSはディスクをオフラインにできることを完全に喜んでいました。
Md0をオフラインにする前は、プールはまだ完全にオンラインであったため、ZFSは交換されたディスクを新しいディスクにミラーリングしているように見えますが、プロセス中に使用可能なものとしてロット全体を処理しています。
NAME STATE READ WRITE CKSUM
test DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
8480467682579886773 OFFLINE 0 0 0 was /dev/md0
md1 ONLINE 0 0 0
replacing-2 ONLINE 0 0 0
md2 ONLINE 0 0 0
md3 ONLINE 0 0 0 (resilvering)
ディスクCは、VDevから削除されるまで、RAIDZで以前とまったく同じように使用されます。 Mattが指摘しているように、ZFSは、交換用ディスクを交換用ディスクのミラーにし、交換用ディスクを再シルバー化することにより、ディスクを交換します。 RAIDZ VDevが劣化したり、再シルバー化されたりすることはありません(Aが失敗するまで、これは交換操作とは完全に別です)。
これが重要かどうかはわかりません。
ほとんどの場合、 RAIDZを使用するべきではありません 対ミラー...使用する場合は、スペアを使用して使用する必要があります。
読み取り元のディスクの1つに障害が発生するか、使用できない場合、再シルバーリングは失敗します。 回復不能な読み取りエラーと同じです。その時点でディスクCはなくなります...