web-dev-qa-db-ja.com

同じプール内の1つのzfsファイルシステムから別のzfsファイルシステムにファイルを移動するにはどうすればよいですか?

同じzfsプールに2つのファイルシステム/mnt/fs_a/mnt/fs_bがあります。約1TBのデータをfs_aからfs_bに移動したい。しかし、私が:

mv /mnt/fs_a/mythtv_recordings /mnt/fs_b/

驚いたことに、それはファイルをブロックごとにコピーし始めます。 2GBのファイルを移動するのにかかった時間を考えると、この操作は完了するまでに大量のスラッシングに何日もかかるようです。

これを行うには、よりスマートで高速な方法が必要ですよね?

17
Fred Hamilton

(これはコメントとして始まりましたが、長くなりすぎたため、今は回答です)

残念ながら、答えは「いいえ」です。これを行うためのより高速でスマートな方法はありません。

ZFSファイルシステムは(同じプール上にある場合でも)別々のファイルシステムです。 mvも他のツールもブロックポインターなどを移動することはできないため、fs_aにあったファイルはfs_bに移動します。

(ところで、同じディスクまたはRAIDアレイ上の複数のフォーマット済みパーティションまたはLVMボリュームも個別のファイルシステムであり、mvはそれらのコピーと削除にも委譲されます)

この問題は何年にもわたって何度も発生しており(やりたいことを行うためのツールを作成することについての話もある)、私が理解しているように、難しすぎるバスケットに入れる主な困難は、スナップショットの処理方法の問題です。 -fs_aのスナップショットがある場合、ブロックは両方のファイルシステムに同時に存在します。同じことがハードリンクを持つファイルにも当てはまります。

私は何度も自分でそれに遭遇しました(たとえば、データセット間でファイルを移動したときや、サブディレクトリをfsに変換する必要があるとき)、不便に我慢することを学びました。主要なPITAになる可能性があります。

fs_bが空であるかまだ存在せず、fs_a全体の内容をfs_bに移動する場合(および一部またはほとんどのファイルとディレクトリ)zfs renameを使用してfs_afs_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

22
cas