新しく書き込まれた (追加された) データのみが、現在アクティブなすべての vdev 間で分割されます。ZFS には明示的なリバランス操作はありません。
考えられる 2 つの解決策:
<オール>より正確には、2 番目のソリューションを選択し、システムの負荷が低い時間帯 (夜間など) に各ファイル システムを個別に転送します。
- スナップショットを撮る (
zfs snapshot -r
) 適切なサイズのファイル システム (および派生ファイル システムは再帰的に) zfs send | zfs recv
を使用 新しく作成された一時ファイル システムにスナップショットを送信するための適切なオプションを使用します (スペースが許せば、同じプール上に配置できます)。このファイル システムは、階層内で古いファイル システムと同じ場所にある必要があります- コピーが完了したら (ディスクの読み取りと書き込みが必要なため、時間がかかる場合があります)、
zfs destroy
古いスナップショットと古いファイル システム zfs rename
一時的なシステムを古い名前にzfs mount
でマウント ポイントを確認して変更します 、置き換えられたファイル システムの以前の状況を再調整します- すべてのファイル システムが移動されるまで繰り返します
考えられる 3 番目の解決策 (この FreeNAS フォーラムの投稿で SirMaster が述べているように) :
- 新しいディスクを zpool に追加
- 多くのファイルを別の新しい /mnt/pool/temp/ ディレクトリにコピー
- 元のファイルを削除:
rm -rf original/
- ディレクトリの名前を元に戻す:
mv temp/ original/
これが機能するのは、ZFS が空き容量が最も多い vdev (この場合は空だった新しいドライブ) に比例して書き込みを行うためです。 (0.7 の時点で、zfs は書き込み用により高速なドライブを優先しますが、2 つの新しいドライブが元のドライブと同じかそれ以上のパフォーマンスであると仮定します)
おそらく zfs send | zfs recv
よりも遅いです ですが、スナップショットを作成/破棄する必要がないため、より簡単です。
zpool list -v
を実行できます 各 vdev 使用率を確認する前と後。
また、ファイルごとにコピー/削除/名前変更の手順を実行するphpスクリプトを見つけました。これは、数年前の同様の(しかしzvol)質問からの回答にリンクされていました。 (このスクリプトを個人的にテストしていません)
単純なボンド スループットに困惑し、ギグ以上は得られない
/etc/network/interfaces ファイルの先頭にある source /etc/network/interfaces.d/* は何をしますか?