例としてストライプミラー(RAID 10)を使用して、2つのディスクが4つに拡張された場合、2つのディスクのデータを2つのミラー間でどのように「再バランス」(分散)できますか?
つまり、1つのミラーに書き込まれたファイルを2つのミラーに書き込んで、ストライプディスクを利用するにはどうすればよいでしょうか。
新しく書き込まれた(追加された)データのみが現在アクティブなすべてのvdev間で分割されます。ZFSには明示的なリバランス操作はありません。
2つの可能な解決策:
より正確には、2番目のソリューションを選択し、システムの負荷が低い時間帯(たとえば夜間)に各ファイルシステムを個別に転送します。
zfs snapshot -r
)を取得するzfs send | zfs recv
を適切なオプションとともに使用して、スナップショットを新しく作成された一時ファイルシステムに送信します(スペースが許す場合は同じプールに置くことができます)。このファイルシステムは、古いファイルシステムと同じ階層の場所にある必要があります。zfs destroy
zfs rename
一時システムを古い名前にzfs mount
を使用してマウントポイントを確認および変更し、置き換えられたファイルシステムの以前の状況を再調整します。可能な3番目の解決策(このFreeNASフォーラムでSirMasterが言及している post ):
rm -rf original/
mv temp/ original/
これは、ZFSが最も空き容量の多いvdev(この場合は空の新しいドライブ)に比例して書き込みを行うため、機能します。 (0.7以降では、zfsは 書き込みにはより高速なドライブを優先します ですが、2つの新しいドライブが元のドライブと同じかそれ以上のパフォーマンスであると想定できます)
おそらくzfs send | zfs recv
よりも低速ですが、スナップショットを作成または破棄する必要がないため、より単純です。
zpool list -v
を前後に実行して、vdevの使用率を確認できます。
また、ファイルごとにコピー/削除/名前変更の手順を実行するphp script も見つかりました。これは answer でリンクされていました(ただし、zvolと同様) question 数年前のもの。 (このスクリプトを個人的にテストしていません)