ZFS:zpoolのすべてのディスクにzvolを再配布しますか?


12

特定のファイルシステムをzpool内のすべてのディスクに再配布するようにZFSに指示する方法はありますか?

FC上のLUNとしてエクスポートされる固定サイズのZFSボリュームがあるシナリオを考えています。現在のzpoolは小さく、1 TBのミラーディスクが2つだけで、zvolは合計で750GBです。たとえば、zpoolのサイズを突然1TBのディスク12個に拡張した場合、zvolは最初の2つのスピンドルのみに効果的に「収容」されると考えています。

より多くのスピンドル=より多​​くのIOPSがある場合、それらを利用するために12のスピンドルすべてにわたってzvolを「再分散」するためにどのような方法を使用できますか?

回答:


8

データのバランスを取り直すために、データを拡張zpoolに書き換える必要があります。そうしないと、時間が経つにつれて、書き込みがプール全体に分散されます。


私はそれを行うための迅速かつ簡単な方法があるとは思わない... ...?
growse

7
zfs send | zfs recv
-wabbit

私はそれをテストするつもりです-とても簡単なものがそれを行うとは信じられません。:)
成長

3
報告してください、私はこれをやったことがなく、また好奇心が強いです。
-StrangeWill

3

zvolが初期デバイスのみに保存される理由はありません。プールを拡大すると、ZFSは利用可能なすべての基盤デバイス上の更新されたデータにまたがります。ZFSには固定パーティションはありません。


4
私の経験では、これは真実ではありません。「固定パーティション」はありませんが、ZFSは、クライアントIO要求の外部でデータを独自の自由意志で移動しません。私が説明したシナリオを作成し、ディスクを追加してから元のLUNでヘビーIOを実行すると、アレイ内の最初の2つのディスクでのみアクティビティが表示されます。ewwhiteは、時間が経つにつれてバランスが取れるようになると指摘していますが、これを行うより速い方法があるかどうか知りたいです。
11

1
不明な場合はごめんなさい。もちろん、既存のデータが魔法のように移動することはありません。更新されたデータのみが均等に再配置されます。それが「新しいIO」の意味です。既存の静的データに関する限り、キャッシュはブロックが複数回読み取られる限りパフォーマンスも改善します。
jlliagre

0

これは、ewwhiteの答えの「続き」です。

データをリバランスするために、拡張されたzpoolにデータを書き直す必要があります。

Ubuntu 14.04ホストでこれを自動化するPHPスクリプト(githubで入手可能)を作成しました。

PHP CLIツールをインストールしsudo apt-get install php5-cliてスクリプトを実行するだけで、最初の引数としてプールデータへのパスを渡すだけです。例えば

php main.php /path/to/my/files

理想的には、プール内のすべてのデータに対してスクリプトを2回実行する必要があります。最初の実行ではドライブの使用率のバランスが取られますが、個々のファイルは最後に追加されたドライブに過剰に割り当てられます。2回目の実行により、各ファイルがドライブ間で「公平に」分散されます。私は、異なるサイズのペアのRAID 10(4TBミラー+ 3TBミラー+ 3TBミラー)でドライブ容量をミキシングしていない場合にのみ均等に分散されるため、均等ではなく公平に言います。

スクリプトを使用する理由

  • 問題を「その場で」修正する必要があります。たとえば、データを別のシステムに書き出すことはできません。ここでデータを削除して、再び書き戻すことはできません。
  • プールを50%以上いっぱいにしたため、元のファイルシステムを削除する前にファイルシステム全体を一度にコピーすることはできませんでした。
  • 適切に実行する必要がある特定のファイルのみがある場合は、それらのファイルに対してスクリプトを2回実行するだけで済みます。ただし、2回目の実行は、最初の実行でドライブの使用率のバランスを取ることに成功した場合にのみ有効です。
  • たくさんのデータがあり、進行状況の表示を確認できるようにしたいです。

ドライブの使用率が達成されたかどうかを確認するにはどうすればよいですか?

一定期間(例えばiostat -m 5)iostatツールを使用し、書き込みを確認します。それらが同じである場合、均等な広がりを達成しています。RAID 10では2 TBの3 TBドライブで4 TBのペアを実行しているため、これらは下のスクリーンショットでは完全に均一ではありません。 ここに画像の説明を入力してください

ドライブの使用率が「アンバランス」の場合、iostatは、新しいドライブが不均衡に書き込まれている下のスクリーンショットのようなものを表示します。また、データがないため読み取りが0であるため、それらが新しいドライブであることもわかります。 ここに画像の説明を入力してください

このスクリプトは完璧ではなく、回避策にすぎませんが、ZFSがBTRFSが持っている(フィンガーが交差した)ようなリバランス機能をいつか実装するまではうまくいきます。


わあ

0

さて、これはちょっとしたハックですが、zvolを使用してマシンを停止した場合、zfsはファイルシステムをローカルホスト上のbar.zvolと呼ばれるローカルファイルに送信し、その後ファイルバックシステムを再度受信できます。これにより、データが再調整されます。

zfs send tank/bar > bar.zvol

zfs receive tank/bar < bar.zvol

-1

私が見つけた最良の解決策は、拡張プールでデータの半分を複製してから、元の複製データを削除することでした。


3
詳しく説明してもらえますか?
ewwhite

@reco:zvolはファイルシステムではないため、データを削除または複製することはできません。データを上書きする可能性がありますが、同じコンテンツを使用してデータを効果的に拡張しない限り破損しますが、これは1年前にewwhiteが既に提案したものです。
jlliagre

はい、あなたは正しいです。私は同じトピックを探して調査していました。私が気づいたのは、zfsではvdevを介してデータを再配布する必要がないということです。ただし、何らかの理由でデータを複製して元のデータを削除したい場合は、zfsの動作が時間の経過とともに加速します。
レコ

1
vdevを介したデータの再配布は正当な要求です。ファイルシステムではなく、zvolについての質問がまだ不足しているのではないかと思います。ボリューム上のデータを複製または削除することはできません。これは意味がありません。
jlliagre

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