ZFSがzpool内のすべてのディスクに特定のファイルシステムを再配布するように促す方法はありますか?
FC経由でLUNとしてエクスポートされる固定サイズのZFSボリュームがあるシナリオを考えています。現在のzpoolは小さく、1 TBのミラーリングされたディスクが2つあり、zvolは合計で750GBです。たとえば、zpoolのサイズを12 TBのディスクに突然拡張したとしても、zvolは最初の2つのスピンドルだけに効果的に「収容」されると思います。
より多くのスピンドル=より多くのIOPSがある場合、12スピンドルすべてにzvolを「再分散」してそれらを活用するためにどのような方法を使用できますか?
データのバランスを再調整するには、拡張されたzpoolにデータを再書き込みする必要があります。それ以外の場合、時間が経過すると、書き込みはプール全体に分散されます。
Zvolが初期デバイスのみに保存される理由はありません。プールを拡大すると、ZFSは使用可能なすべての基本デバイスの更新されたデータに広がります。 ZFSには固定パーティションはありません。
これはewwhiteの回答の「続き」です。
データをリバランスするには、拡張されたzpoolにデータを再書き込みする必要があります
私は、Ubuntu 14.04ホストでこれを自動化するためにPHPスクリプト( githubで利用可能 )を作成しました。
PHP CLIツールをSudo apt-get install php5-cli
を実行してスクリプトを実行し、最初の引数としてプールデータへのパスを渡します。例えば。
php main.php /path/to/my/files
理想的には、プール内のすべてのデータに対してスクリプトを2回実行する必要があります。最初の実行ではドライブ使用率のバランスが取られますが、個々のファイルは最後に追加されたドライブに過剰に割り当てられます。 2回目の実行では、各ファイルがドライブ間で「公平に」分散されます。異なるサイズのペア(4 TBミラー+ 3 TBミラー+ 3 TBミラー)のRAID 10を使用しているため、ドライブ容量を混合していない場合にのみ均等に分散されるため、均等ではなく公平に言います。
Iostatツールを一定期間使用します(例:iostat -m 5
)と書き込みを確認します。それらが同じであれば、あなたは均等な広がりを達成しています。 RAID 10で2ペアの3TBドライブを備えた4TBのペアを実行しているため、2つの4はわずかに多く書き込まれます。
ドライブの使用率が「不均衡」である場合、iostatは、新しいドライブが不均衡に書き込まれている以下のスクリーンショットのようなものを表示します。また、データがないため、読み取りが0であるため、それらが新しいドライブであることもわかります。
スクリプトは完璧ではなく、回避策だけですが、当面は、ZFSがBTRFSのようなリバランス機能を実装するまで(フィンガーが交差するまで)機能します。
まあこれは少しハックですが、zvolを使用してマシンを停止した場合、zfsはファイルシステムをbar.zvolと呼ばれるlocalhost上のローカルファイルに送信し、その後ファイルバックシステムを再び受信します。これにより、データのバランスが再調整されます。
zfs send tank/bar > bar.zvol
zfs receive tank/bar < bar.zvol