同じzfsプールに2つのファイルシステム/mnt/fs_a
と/mnt/fs_b
があります。約1TBのデータをfs_a
からfs_b
に移動したい。しかし、私が:
mv /mnt/fs_a/mythtv_recordings /mnt/fs_b/
驚いたことに、それはファイルをブロックごとにコピーし始めます。 2GBのファイルを移動するのにかかった時間を考えると、この操作は完了するまでに大量のスラッシングに何日もかかるようです。
これを行うには、よりスマートで高速な方法が必要ですよね?
(これはコメントとして始まりましたが、長くなりすぎたため、今は回答です)
残念ながら、答えは「いいえ」です。これを行うためのより高速でスマートな方法はありません。
ZFSファイルシステムは(同じプール上にある場合でも)別々のファイルシステムです。 mv
も他のツールもブロックポインターなどを移動することはできないため、fs_a
にあったファイルはfs_b
に移動します。
(ところで、同じディスクまたはRAIDアレイ上の複数のフォーマット済みパーティションまたはLVMボリュームも個別のファイルシステムであり、mv
はそれらのコピーと削除にも委譲されます)
この問題は何年にもわたって何度も発生しており(やりたいことを行うためのツールを作成することについての話もある)、私が理解しているように、難しすぎるバスケットに入れる主な困難は、スナップショットの処理方法の問題です。 -fs_a
のスナップショットがある場合、ブロックは両方のファイルシステムに同時に存在します。同じことがハードリンクを持つファイルにも当てはまります。
私は何度も自分でそれに遭遇しました(たとえば、データセット間でファイルを移動したときや、サブディレクトリをfsに変換する必要があるとき)、不便に我慢することを学びました。主要なPITAになる可能性があります。
fs_b
が空であるかまだ存在せず、fs_a
の全体の内容をfs_b
に移動する場合(および一部またはほとんどのファイルとディレクトリ)zfs rename
を使用してfs_a
をfs_b
に名前変更できます。しかし、これはあなたの状況には関係ないと思います。
https://github.com/zfsonlinux/zfs/issues/2991 にZFSOnLinuxのこれに関する未解決の問題があります
私は検索していませんが、アップストリーム OpenZFS であり、Sun/Oracle ZFSでもおそらく同様のバグレポート/機能リクエストがあるはずです。
ところで、次も参照してください https://serverfault.com/questions/584693/freenas-why-isnt-mv-command-instant-within-a-raidz1-volume