Linux上のZFS を使用して、私のDebian Linuxホスト上のデータストレージ用にext3からZFSに移行することを検討しています。私が本当に望んでいるZFSのキラー機能の1つは、そのデータ整合性の保証です。ストレージのニーズが増加するにつれて、ストレージをささやかに拡張できる機能も期待しています。
ただし、同じホストでいくつかのVMも実行しています。 (通常、私の場合、一度に1つだけVMがホストで実行されています。)
VMディスクイメージが比較的巨大なファイルであるという事実と共に、ZFSのデータチェックサムとコピーオンライト動作を考慮します(私のメインVMのディスクイメージファイルは現在31 GBにあります)、VMこのような移行のゲスト内のパフォーマンスにどのような影響がありますか?考えられる悪影響を減らすためにどのような手順を実行できますか?影響?
VM必要に応じてディスクイメージのデータ整合性を保証することなく生活できます(どのVM内でも実際に重要なことは何もしません)。他のファイルシステムから簡単に分離できます) 、ただし、ほとんどの場合に別のファイルシステムへの移行を希望する機能のほとんどを(選択的にも)オフにする必要がない場合は、すばらしいでしょう。
ハードウェアは、ワークステーションクラスのシステムにはかなり頑丈ですが、ハイエンドサーバー(32 GB RAMが10 GBを超えることはまれで、6-コア3.3 GHz CPU、現在2.6 TB df
に従って使用可能なディスク容量、および合計約1.1 TB無料、ZFSに移行するとおそらく 空き領域を追加する )であり、データ重複排除を実行する予定はありません(重複除去をオンにしても、私の状況ではあまり追加されません)。計画は、JBOD構成(当然、適切なバックアップがあります)が、状況に応じて、最終的には双方向ミラーセットアップに移行することもあります。
ZFSはブロックレベルで機能するので、ファイルのサイズに違いはありません。 ZFSはより多くのメモリとCPUを必要としますが、ファイルシステムとして本質的に大幅に遅くなるわけではありません。ただし、RAIDZの速度はRAID5と同等ではないことに注意する必要があります。 RAID10は、速度を優先する場合には問題ありません。
まともな(つまりバフ)ハードウェア上のZFSは、他のファイルシステムよりも高速である可能性が高く、高速(つまりSSD)の場所でZILを作成したい場合があります。これは本質的に書き込みをキャッシュする場所です(まあ、ext3/4のジャーナルに似ています)。これにより、実際のスピンドルがデータを取得する前に、ボックスが書き込みをディスクに書き込むことができます。
読み取りキャッシュ用にSSDにL2 ARCを作成することもできます。これは、VM環境で素晴らしいです。この環境では、複数のVMを同時に起動することにより、物理ディスクを完全に解放できます。
ドライブはVDEVに入り、VDEVはzpoolsに入ります(ディスク全体を一度に使用してください)。これがより小さなシステムである場合、単一のzpoolと(データの損失についてあまり心配していない場合)単一のVDEVを使用することができます。 VDEVはRAIDレベルを選択する場所です(十分なディスクがある場合はVDEVをミラーリングすることもできます)。 VDEV内の最も遅いディスクによって、VDEV全体の速度が決まります。
ZFSはすべてデータの整合性に関するものです。ファイルシステムのメンテナンスのための従来のツール(fsckなど)が多く存在しないのは、ZFSファイルシステムでは解決できない問題です。
IFS ZFSの最大の欠点は、ファイルシステムがフル(たとえば75%以上)に近づくと、非常に遅くなることです。そこに行かないでください。
31GBは本当に大きくありません...
とにかく、現在使用しているファイルシステムによっては、ZFSが少し遅い場合がありますが、ハードウェアの仕様上、無視できる場合があります。
明らかにZFSは、RAMの適切なチャンクをキャッシュに使用します。これにより、VMは一般的な使用で「よりスッキリ」しているように見える可能性があります(大量の読み取りまたは書き込みを行わない場合)。ZFSがLinuxで調整されていますが、may ARCを制限する必要があります。可能であれば、すべてのRAMでそれが実行されなくなるのを防ぐために、まともなホストシステムとVMに残されたチャンク)。
私は圧縮を有効にします(最近のアドバイスは、有効にする理由がない限り、有効にすることです)。これを実行する必要があることを覚えておいてくださいbeforeファイルシステムにデータを置く。圧縮アルゴリズムは一般的にディスクIOよりも高速に実行されるため、ほとんどの人は、実際にそれをオンにすると高速になることに驚いています。 6コアプロセッサでパフォーマンスの問題が発生することはないと思います。私はVMがそれほど圧縮することを期待していませんでしたが、デフォルトの圧縮設定だけで、約470GBのVMデータを304GBに変換できました。
重複排除を気にしないでください。後で戻ってくるだけで、何週間もデータをシャッフルして、それを取り除こうとするでしょう。
パフォーマンスの問題が発生した場合の明白な答えは、SSDをZIL/L2ARCまたはその両方として追加することです。両方に1つのデバイスを使用することは理想的ではありませんが、少数のディスク/ vdevを含むプールでパフォーマンスを向上させる可能性があります。
追加するには:可能であれば(理想的にはミラーリング)冗長構成から始めるか、できるだけ早くストライプからミラーに変換します。 ZFSはすべてのデータをチェックサムし、その場で(またはスクラブ中に)エラーを検出しますが、それについては何もできません(copy = 2を使用しないとディスク使用量が2倍になります)。ファイル(おそらくあなたのVMディスクイメージ))にエラーがあり、それらを削除して再作成しないと多くのことを実行できないことを通知するだけです。ファイル。
ユースケースとVMに応じて、以下を検討します。ホストオペレーティングシステムがZFSボリュームに格納するファイルを処理するようにします。
可能であれば、すべてのVMに対して、オペレーティングシステムと必要なバイナリファイルのみを含むLUNのみを作成します。そして、個々のデータのストレージステータスをNFS、samba、またはiSCSI(またはコメントで述べたzvols)を介した共有として提示します。 ZFSは、チェックサムを使用してすべてのファイルを追跡でき、アクセス時間も影響します。もちろん、速度がそれほど重要でない場合は、一部のデータストアで圧縮を有効にすることもできます。利点は、別のファイルシステムの欠落したレイヤーになるでしょう。 2番目の仮想ハードドライブ用のLUNを作成し、その上にNTFSファイルシステムを作成する場合、ZFSは大きなバイナリBLOBを処理する必要があり、コンテンツやファイルをまったく認識しないため、ZILまたはARCキャッシュを利用できません。飛行機のファイルと同じように。
ACLについて言及すると、ZFSはNFSv4またはSamba(有効な場合)を介してACLを使用できます。私はFreeBSDでZFSを使用していることを認めています。ZFSボリューム上でSambas ACLの組み合わせを有効にする方法を保証できません。しかし、これは大した問題ではないはずです。
読み取りキャッシュと組み合わせた重複排除は、すべてのVMが同じブロックの読み取りを開始するため、スペースを節約し、大規模な読み取り(ブートストーム)を改善するという点で大きな利点です。
VMとデータストアのZFSスナップショットについても同様です。単純なシェルスクリプトを作成して、VMをフリーズし、VMとデータストアのスナップショットを取得して作業を続行するか、データストアのみを使用して、VMオリジナルのスナップショットを提示し、いくつかのものをテストします。
ZFSの可能性は無限です;)
編集:うまくいけば、私はそれを今少し良く説明しました
EDIT2:個人的な意見:二重ディスク障害に耐えることができるため、RAIDZ2(RAID6)の使用を検討してください!予備のディスクが1つでも残っている場合は、それが問題になることはありませんが、迅速な復旧には2つのディスク障害で十分です。ディスクステータスを監視するためのスクリプトを投稿しました ここ