web-dev-qa-db-ja.com

BTRFSパーティションをスナップショットを含む外部ハードディスクBTRFSパーティションにコピーします

BTRFSパーティションのバックアップについて質問があります。

/ dev/sda1にBTRFSパーティションがあり、/ dev/sdb1にBTRFSを備えた外付けハードドライブがあるとします。

次のコマンドを発行して、最初のバックアップを作成できることはすでにわかっています。

btrfs replace start /dev/sda1 /dev/sdb1

その後、私は2つのことを変更します。

  • SDA1で新しい通常のファイルを作成します
  • SDA1に新しいBTRFSスナップショットを作成します

次に、外付けハードドライブSDB​​1(「バックアップ」)をSDA1に合わせます。したがって、両方のファイルはBTRFS固有のもの(スナップショット)です。

どうすればよいですか?

だから私はBTFS機能(スナップショット)も同期するrsyncの同等物を探しています:

rsync -avr --delete <mount point sda1> <mount point sdb1>

ありがとう

4
robert

Replaceコマンドはsda1のバックアップを作成せず、ファイルシステム内でsda1をsdb1に置き換えますが、これは1つのデバイスのファイルシステムであり、btrfsはsda1を置き換えるときにデータをわざわざワイプしないため、最終的には同一のコピーになります。ファイルシステム。ただし、両方が同じUUIDを持つため、これを実行する必要はありません。現在、2つのbtrfsファイルシステムを同じUUIDでマウントすると、大規模なデータ破損が発生する可能性があるため、安全ではありません (btrfswikiのGotchasページを参照) 。 btrfsの増分バックアップ機能を使用する場合は、バックアップドライブ/ dev/sdb1を新しいbtrfsファイルシステムにフォーマットする必要があります。次に、を使用して、ファイルシステムにバックアップするwateverサブボリュームの読み取り専用スナップショットを作成する必要があります。

btrfs su sn -r @subvolume-name @subvolume-name-RO

各サブボリュームで。次に、空のbtrfsファイルシステムをマウントして実行する必要があります

btrfs send /path/to/@subvolume-name-RO | btrfs rec /path/to/backup-directory/

これが最初の送信であり、btrfsは今回すべてのデータを転送する必要があります。次回このドライブにバックアップを送信するときは、増分送信を使用して、前回送信したバックアップ以降に変更されたデータのみを送信できます。また、コピーオンライトを使用するため、スペースも大幅に節約できます。両方のファイルシステムで最新のスナップショットを保持していることを確認してください。完了したら、送信したスナップショットの名前を任意の名前に変更できます。

別のスナップショットを送信する場合は、元のスナップショットの名前を変更して、次のような新しいスナップショットを作成します。

mv @subvolume-name-RO @subvolume-name-RO-old
btrfs su sn -r @subvolume-name @subvolume-name-RO

次に、sendを使用して、を使用して最新のスナップショットを送信できます。

btrfs send -p @subvolume-name-RO-old @subvolume-name-RO | btrfs rec /path/to/backup-directory/

以前のスナップショットがバックアップドライブにまだ存在する場合は、前のスナップショット以降に行った変更をコピーするだけで、新しいスナップショットが送信されます。

3
Andrew