私はほとんどの人が抱えているのと同じ問題を抱えています:信頼できるパーソナルストレージソリューションを作成する方法:
ですから、この問題に数日間(そして何年も頭の後ろで)頭をぶつけた後、私は次の解決策を提案します。ネイティブのLinuxZFSに基づいてテストしたソリューションについて説明します。これは buntu PPAで利用可能 ですが、LVM、MD、およびbtrfsを使用して同じことを実現できます。このために、RAID1(ZFSミラーvdev)を使用します。
たとえば、新しい2TBドライブ、古い750GBドライブ、2つの古い400GBドライブ、および1つの古い500GBドライブのディスクセットについて考えてみます。最適なミラーパーティションには2TBの使用可能スペースがあり、次の図で説明されています。ここで、「:」はパーティションを区切り、「|」はディスクを分離します:
+------------------------------------------------------------------+
| 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 vdevをプールに追加できるが、削除できないことが重要です。したがって、可能であれば、新しいドライブを購入するときに、既存の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をそのままハックしたものです。 resliver/resyncを最小限に抑えることが非常に望ましいです。
はい、これは明らかに貧乏人のDroboです。そのための専用ハードウェアは必要ありません...
私はこれをZFSでテストしましたが、ZFSはすべてのvdevに読み取りと書き込みを分散するため、書き込みパフォーマンスは本来の約半分になります(したがって、I/Oを同じディスク上の複数の場所に分割します)。したがって、速度は、パーティションが最も多いディスクの速度によって制限されます。読み取り速度はディスク帯域幅と同じようです。 2つのディスク上のZFSパーティションのペアは、ディスクから並列に読み取ることができるため、いずれかの単一ディスクの読み取り速度が約2倍になることに注意してください。
MD LINEARアレイまたはLVMを使用して2つの半分を作成すると、上記のZFS提案と比較して2倍の書き込みパフォーマンスが得られますが、LVMとMDがデータの保存場所を認識できないという欠点があります。ディスク障害またはアップグレードが発生した場合は、アレイの一方の側を完全に破棄して再同期/再ライブし、次にもう一方の側を使用する必要があります。 (例:resync/resliverは2 *(アレイのサイズ)をコピーする必要があります)
したがって、最適なソリューションは、ディスクを同じサイズの「半分」に結合する2つのLVMまたはMDLINEARデバイスにまたがって単一のZFSミラーvdevを作成することであると思われます。これには、任意の1つのディスクの約2倍の読み取り帯域幅があり、書き込み帯域幅は個々のディスク帯域幅と同じです。
ZFSの代わりにBTRFSraid1を使用することもできますが、ZFSは読み取りを分散して帯域幅を2倍にするため、読み取り帯域幅は半分になりますが、BTRFSはそうではないようです(私のテストによると)。 BTRFSには、パーティションを縮小できるという利点がありますが、ZFSでは縮小できません(したがって、障害後に多くの空き領域がある場合、BTRFSを使用すると、ファイルシステムを縮小してからディスクを再配置することで、より小さな冗長アレイを再構築できます)。
これは手作業で行うのは面倒ですが、いくつかの優れたスクリプトを使用すれば簡単です。