統合したい2つの別々のbtrfsファイルシステムがあります。サブボリューム構造は次のとおりです。
/ filesystemA
|- subvolume1
|- subvolume2
|- ...
|- subvolumeN
/ filesystemB
|- subvolume1
|- subvolume2
|- ...
|- subvolumeM
filesystemB
目標です。毎日のスナップショットサブボリュームなので、サブボリューム1をNからfilesystemB
.over 1000に移動したいと思います。N
また、両者の差が小さい。つまり、共有データが多い。filesystemA
1TBですが、du
パス内のファイルの総数が300TBを超えています(ドライブの実際のスペース使用量は500GB未満です)。
したがって、btrfsサブボリュームまたはデータの共有特性を認識しないため、直接mv
またはcp
to filesystemA
toが実現可能であるとは思わない。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
。
答え2
あなたのリストを見つけたことを願っています。property
そのバージョンのコマンドが文書化されていませんか?この回答btrfs property set -ts /path/to/snapshot ro true
同様のコマンドを使用して問題を解決することをお勧めします。
将来の読者の場合:新しいスナップショットを読み取り専用に設定し、スナップ-r
ショットを作成するときにパラメータを使用します。私のスクリプトでは、次のようなものを使用します。
comm -23 \
<(btrfs subvolume list -ors --sort=path /fsA/ | perl -ne 'print if s/.+?\spath\s+(.+)/\1/') \
<(btrfs subvolume list -ors --sort=path /fsB/ | perl -ne 'print if s/.+?\spath\s+(.+)/\1/')
ファイルシステムの読み取り専用スナップショットボリュームのリストを提供する必要があります。ㅏどれいいえファイルシステムで第二。同期する各リストに対して送受信を実行して、リストを繰り返すことができます。