「親」と「複製ソース」、「btrfsを送信」の違いは何ですか?

「親」と「複製ソース」、「btrfsを送信」の違いは何ですか?

私はライブシステムからバックアップドライブに読み取り専用のスナップショットを頻繁に使用してbtrfs sendコピーします。btrfs 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 <クローンソース>

このスナップショットをデルタ転送のレプリケーションソースとして使用する(複数の許可)

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

答え1

ここそれは言う-血btrfs-sendは最初に親ボリュームと子ボリュームのスナップショットを作成し、次にbtrfs-sendのデータフローに従ってスナップショットを変更します。そして-氏btrfs-receive オプションは空のサブボリュームを作成および変更し、変更されていないファイルへの参照リンクを生成します。違いは、btrfs-sendが送信する必要があるメタデータのサイズです。の場合-氏オプションみんな次の場合、メタデータが送信されます。-血オプション -一部メタデータ。

サブボリューム(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

ちょうど1つだけ書きました。長い答えまた、オプション、関連セクションのコピー、および貼り付けについても説明します-p-c

親は1つしか持てません

これマニュアルページそして(古い)Wiki FAQ残念ながら、かなり混乱しています。著者はbtrfs-clone パラドックスbtrfsの送受信はせいぜい考慮することができます。一つデルタ転送の親です。親項目は、-p1 つ以上のオプションで-c直接または間接的に指定できます。

btrfs-sendbtrfs-tools 4.13で、サブボリュームSの親ボリュームと指定された複製ソースセットC_iを選択します。このように:

  1. オプションを指定すると-p使用されます。
  2. Sにセットがない場合、またはparent_uuiduuidが見つからない場合は放棄してください。
  3. C_iある場合C_i->uuid == S->parent_uuid(Sはサブボリュームのサブボリューム(スナップショット)なので「ママ」と呼びます)を使用します。
  4. C_iがSと等しくない場合はparent_uuidあきらめてください。
  5. "母"のすべての子供C_iの中から"母"に最も近い世代を選択します(実際に、ctransidと"世代"の違いは何ですか?)。

気づくウィキペディア上記のアルゴリズムは通常これを暗示していますが、-cwithはwithとは異なることを示唆しているため、少し誤解を招く可能性があります。p関連する唯一の例外は、親ボリュームなしで子ボリュームを送信することです。-c-p-p

要約すると、常に明示的に親を指定して-p無視することをお勧めします-cbtrfs receive「両親」という概念はまったくありません。

関連情報