web-dev-qa-db-ja.com

「btrfssend」を使用した「親」と「クローンソース」の違いは何ですか?

私は定期的にbtrfs sendbtrfs receiveを使用して、読み取り専用のスナップショットをライブシステムからバックアップドライブにコピーしています。バックアップドライブには、すでに複数のスナップショットがあります。今日私は疑問に思いました:複数の古いスナップショットから一度に増分更新として今日のスナップショットの複数をコピーできますか

最近やった

btrfs send -p  home_old  home_today | btrfs receive /mnt/backup/
btrfs send -p share_old share_today | btrfs receive /mnt/backup/

これを1つのコマンドに統合できますか?

だから私は man btrfs-send を調べて読んだ:

インクリメンタルモード(オプション-pおよび-c)では、送信側と受信側の両方で使用できる以前に送信されたスナップショットを使用して、別のファイルシステムで送信されたスナップショットを再構築するために送信する必要のある情報の量を減らすことができます。

それが私が欲しいものです。

-p <親>

親からサブボリュームにインクリメンタルストリームを送信する

-c <clone-src>

このスナップショットを増分送信のクローンソースとして使用します(複数許可)

-p-cのどちらか1つだけが複数の既存のスナップショットをサポートしているようですが、それらの違いはわかりません。違いは何ですか?

3
Daniel Böhmer

Here with-pbtrfs-sendは、最初に親サブボリュームのスナップショットを作成し、次にデータストリームに応じてそのスナップショットを変更することを示していますbtrfs-sendから。 -cオプションを使用すると、btrfs-receiveは空白のサブボリュームを作成して変更し、変更されていないファイルの参照リンクを作成します。違いは、btrfs-sendが転送する必要のあるメタデータのサイズです。 -cオプションallの場合、メタデータが転送されます。 -pオプション-someメタデータ。

サブボリューム(250G、310kファイル)のスナップショットでこれをテストしたところ、次の結果が得られました。

# time btrfs send -p server-20181031-1746 server-20181225-1144 -f /mnt/parent.diff
At subvol server-20181225-1144

real    3m12,618s

Parent.diffのサイズは6418364996バイトです

# time btrfs send -c server-20181031-1746 server-20181225-1144 -f /mnt/clone.diff
At subvol server-20181225-1144

real    3m17,435s

Parent.diffのサイズは6418364996バイトです

ですから、私の場合はほとんど違いはありません。

Btrfs-sendが1つのコマンドで複数のサブボリュームのストリームを生成できるとは思いません。

2
AlexandrK