ZFSまたはLVMまたはMDの冗長異機種ストレージの提案


10

私はほとんどの人が持っているのと同じ問題を抱えています。

  1. ハードドライブが異常なほど定期的に故障する。ファイルの損失は許されません。
  2. 時々新しいHDDを買います。必然的に、最良の価格/ GBは、最後に購入したHDDとはサイズが異なります。
  3. 2は、時間の経過とともに異種のディスクのコレクションができることを意味します。それらすべてを使用したいのですが、故障したディスクは通常、より大きなディスクに交換されます。

  4. データの整合性と信頼性は、速度よりも私にとって重要です。

ですから、この問題に頭を数日間ぶつけた後(そして何年も頭の後ろで)、次の解決策を提案します。Ubuntu PPA利用可能なネイティブLinux ZFSに基づいてテストしたソリューションについて説明しますが、LVM、MD、およびbtrfsを使用して同じことを実現できます。これにはRAID1(ZFSミラーvdevs)を使用します。

  1. ドライブのセットが与えられたら、それらを2つのディスクセットにグループ化して、各セットの容量が他のセットにできるだけ近くなるようにします。
  2. もう一方のグループには、小さいディスクの1つとまったく同じサイズのパーティションが存在するように、大きいディスクをパーティション分割します。
  3. 各ディスクが別のディスクにミラーを持つようにミラーvdevを作成します。

たとえば、新しい2TBドライブ、古い750GBドライブ、2つの古い400GBドライブ、および1つの古い500GBドライブのディスクセットを考えます。最適なミラーパーティションには2 TBの使用可能なスペースがあり、次の図で説明されています。ディスクを分離します。

+------------------------------------------------------------------+
| 2TB (sda1)        : (sda2)       : (sda3)       : (sda4)         |
+------------------------------------------------------------------+--+
| 750 GB (sdb)      | 400 GB (sdc) | 400 GB (sdd) | 500 GB (sde1)  :XX|
+---------------------------------------------------------------------+

次のようにzpoolを作成します

zpool create archive mirror /dev/sda1 /dev/sdb mirror /dev/sda2 /dev/sdc mirror /dev/sda3 /dev/sdd mirror /dev/sda4 /dev/sde1

これにより、4つのミラー化されたvdevが作成されます。いずれかのディスクで障害が発生した場合は、ディスクを(任意のサイズのディスクで)交換し、パーティション分割して、不足しているパーティションを再作成できます。これは、ZFSのvdevsがプールに追加できることが重要だが、削除されません。したがって、可能であれば、新しいドライブを購入するときに、既存のvdevを再配置する必要があります。次の購入が3TBドライブだったとしましょう。次の図に示すように、最適な構成は3.5TB使用可能です。これは現在5つのvdevペアです。これは、ドライブを適切にパーティション化し、連続して障害を起こしてパーティションを再作成することで実現できます。

+--------------------------------------------------------------+-------------+
| 3 TB (sdf1)       : (sdf2)      : (sdf3)      : (sdf4)       | 500GB (sde) |
+--------------------------------------------------------------+-------------+-+
| 2TB (sda1)        | 400GB (sdb) | 400GB (sdc) | 750GB (sdd1) : (sdd2)      :X| 
+------------------------------------------------------------------------------+

ミラーリングされたドライブのこのペアの維持は、LVMまたはMD RAIDでも実行できます。つまり、各ドライブに常にミラードライブまたはパーティションがあることを確認します。すべてがミラーリングされているため、ドライブを追加または削除したときに、ドライブを故障させたり、パーティションを再配置したりできます。LVMまたはMDを使用すると、必要に応じて、BTRFSと比較してZFSの洗練されていない回復ツールを犠牲にして、ドライブを取り外してアレイを縮小することができます。

この手順に関するコメントはありますか?優れたスクリプトは、ドライブのロスレス割り当てと再配置を処理できます。LVM対MD対ZFSに関するコメントはありますか?結果として奇妙に分割された配列のパフォーマンスに関するコメントはありますか?同じドライブ上の複数のパーティションにまたがるデータ配置は、過度のヘッドシークと早期障害の原因になりますか?

BTRFS開発者:誰もがこれを望んでおり、LVMやMDは技術的に必要ではありません(私の意見では、最適ではありません)。冗長な異種アレイの保守を容易にすることは、btrfsのキラー機能になります。これは、LVM / MD / ZFSのハックです。再配信/再同期を最小限に抑えることが非常に望ましいです。

はい、これは明らかに貧乏人のDroboです。そのための専用ハードウェアは必要ありません...

回答:


4

私はこれをZFSでテストしましたが、ZFSは読み取りと書き込みをすべてのvdevに分散するため(I / Oを同じディスク上の複数の場所に分割するため)、書き込みパフォーマンスは本来の半分になります。したがって、速度は、パーティションが最も多いディスクの速度によって制限されます。読み取り速度はディスク帯域幅に等しいようです。2つのディスク上のZFSパーティションのペアは、ディスクから並列に読み取ることができるため、どちらのディスクの読み取り速度も約2倍になります。

MD LINEARアレイまたはLVMを使用して2つの半分を作成すると、上記のZFS提案に比べて書き込みパフォーマンスが2倍になりますが、LVMとMDがデータの保存場所を認識できないという欠点があります。ディスク障害またはアップグレードが発生した場合は、アレイの片側を完全に破壊して再同期/再送してから、反対側を破壊する必要があります。(たとえば、再同期/再配信は2 *(配列のサイズ)をコピーする必要があります)

したがって、最適なソリューションは、ディスクを同じサイズの「半分」に結合する2つのLVMまたはMD LINEARデバイスにわたって単一のZFSミラーvdevを作成することです。これには、1つのディスクの約2倍の読み取り帯域幅があり、書き込み帯域幅は個々のディスク帯域幅と同じです。

ZFSの代わりにBTRFS raid1を使用することもできますが、ZTRは読み取りを分散して帯域幅を2倍にするため、BTRFSはそうではないように見えます(私のテストによると)。BTRFSには、パーティションを縮小できるという利点がありますが、ZFSではパーティションを縮小できません(したがって、障害発生後に多くの空きスペースがある場合、BTRFSを使用すると、ファイルシステムを縮小してからディスクを再配置することで、より小さな冗長アレイを再構築できます)。

これは手作業では退屈ですが、いくつかの優れたスクリプトを使用すると簡単です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.