web-dev-qa-db-ja.com

劣化することなくZFSRAID-Z [123]を成長させますか?

ZFSで、RAID-Z(またはRAID-Z2またはRAID-Z3)vdevを拡張する唯一の方法は、ディスクをより大きなディスクと交換することです。ジオメトリを変更する方法はありません。しかし、その過程でアレイを劣化させることなくそうすることは可能ですか?

例として、4つのディスクを備えたRAID-Zアレイがあるとします。1x2TBと3x1TBは、3 TBの使用可能スペースになります。すべてのドライブが機能している状態で、アレイを拡張するために2TBをさらに3つ購入します(6 TB使用可能に)。 1TBのそれぞれを一度に1つずつ取り外して2TBに交換し、各再銀を強制すると、アレイが不必要に繰り返し劣化し、プロセスで障害が発生するリスクが高まります。

私が可能だと思っているのは、ディスクを交換する前に各ディスクをミラーリングすることです。つまり、最初の2 TBをスペアベイに追加し、最初の1 TBディスクをミラーリングしてから、1 TBを取り外し、2 TBを取り外されたドライブのスロット。次に、2番目と3番目の1 TBディスクについて繰り返します。これにより、とにかく、再シルバー化する必要性、またはパリティを再計算する必要性さえも不要になる可能性があります。

そのようなことは可能ですか?

1
cp.engr

提案された解決策は可能ですが、いくつかの重大な欠点があります。

  • ディスククローンの進行中は、プール(zpool import -o readonly=on ${YOUR_ZFS_POOL})に何も書き込むことはできません。
  • スイッチアウトするディスクごとにプール(zpool export ${YOUR_ZFS_POOL})をエクスポートする必要があります。

Vdevディスクのクローンを作成した後、次のことを行う必要があります。

  1. プールをエクスポートします(zpool export ${YOUR_ZFS_POOL})。
  2. Zap(zpool labelclear ${OLD_DISK_DEVICE})するか、古いディスクを物理的に取り外します。
    警告:ディスクをザッピングしても元に戻すことはできません。
  3. 必要に応じて、新しいディスクでvdevパーティションを拡張します。
  4. プールをインポートします(zpool import ${YOUR_ZFS_POOL})。
    警告:この時点以降、元に戻すことはできません。古いディスクを同じプールでオンラインにすることはできなくなります。
  5. ディスクを展開します(zpool online -e ${NEW_DISK_VDEV})。

交換するディスクごとにこれらの手順を繰り返すと、新しい容量が有効になります。


ZFSの組み込みの置換機能は、上記のセクションで説明したこの余分な複雑さをすべて回避するように設計されています。 resilver中にRAID-Zzpoolが破損することを恐れている場合は、次のことを行う必要があります。

  • より冗長性のあるプール(RAID-Z2、RAID-Z3)を作成した、または
  • アレイを拡張しながら、プールを別の場所にバックアップします。

さらに、ディスクに実際に障害が発生した場合でも、RAID-Zに満足できますか?

予算が厳しく、データセットをバックアップする場所が本当にない場合は、クローンがトランザクションのオールオアナッシング操作になるため、計画を実行する方が実際に安全ですが、プールは読み取り専用になることに注意してください。またはしばらくオフラインにすると、クローン作成後の手順でミスを犯すリスクもあります。

zpool replaceを使用すると、次のようになります。

  • ブロックデバイス全体ではなく、使用済みのストレージのみがコピーされるため、より高速になります*
    * シーケンシャルスクラブ/リシルバー機能がある場合
  • 再銀が発生している間、プールは完全に機能するため、ダウンタイムは発生しません。
  • ディスクを交換するというZFSが期待するワークフローを使用するため、人的エラーを排除します
1
Deltik