btrfsサブボリュームを別のbtrfsファイルシステムに移動する簡単な方法はありますか?

btrfsサブボリュームを別のbtrfsファイルシステムに移動する簡単な方法はありますか?

統合したい2つの別々のbtrfsファイルシステムがあります。サブボリューム構造は次のとおりです。

/ filesystemA
|- subvolume1
|- subvolume2
|- ...
|- subvolumeN

/ filesystemB
|- subvolume1
|- subvolume2
|- ...
|- subvolumeM

filesystemB目標です。毎日のスナップショットサブボリュームなので、サブボリューム1をNからfilesystemB.over 1000に移動したいと思います。Nまた、両者の差が小さい。つまり、共有データが多い。filesystemA1TBですが、duパス内のファイルの総数が300TBを超えています(ドライブの実際のスペース使用量は500GB未満です)。

したがって、btrfsサブボリュームまたはデータの共有特性を認識しないため、直接mvまたはcpto filesystemAtoが実現可能であるとは思わない。filesystemB

btrfs sendドキュメントを何度も読んbtrfs receiveでいましたが、これはうまくいくようです。デフォルトでは、filesystemBサブボリューム構造全体を徐々に再構築します。しかし、より簡単な方法があることを願っています。なぜなら、スクリプトを書く必要があり(サブボリュームの数が多いため)、エラーが発生しやすいと思うからです。

(また、送受信にはサブボリュームが読み取り専用である必要があり、Ubuntu 14.04のbtrfs-toolsバージョンにはbtrfs property既存のサブボリュームを読み取り専用に設定するコマンドがないようです。で構成管理を実行することはこれを望まない。

ベストアンサー1

私はあなたがbtrfs-send/btrfs-receiveをバイパスしないと確信しています。別のオプションは、サブボリュームをコピーしてからターゲットから重複を削除することですが、時間がかかります。

読み取り専用の質問:毎日のスナップショットなので、ほとんどのボリュームは読み取り専用ではありませんか?

一つ作る

$btrfs subvolume create /subvolumeA/source
$for i in /filesystemA/subvolume*; do btrfs subvolume snapshot -r $i /filesystemA/source/$i; done

これで、/filesystemA/source/readonlyの下にすべてのサブボリュームがあります。

これで、親ステートメントと一緒にbtrfs-sendを使用して、ループの宛先に徐々に送信できます。

一部のスナップショットを書き換える必要がある場合は、そのスナップショットの内容を書き込み可能な新しいサブボリュームにコピーすることができますcp --reflink

おすすめ記事