これを行うことにより、
# btrfs subvolume snapshot /mnt/1 /mnt/1/snapshot
# tree /mnt/1
/mnt/1
├── a
├── snapshot
│ ├── a
│ └── subv
└── subv
└── b
3 directories, 3 files
Btrfsの/ mnt/1からスナップショットを作成できます。
私の質問は:rsyncを使用してバックアップファイルシステムを簡単にバックアップするよりも、スナップショットを使用する利点は何ですか?
スナップショットはバックアップを行いません。それらを一見別のファイルシステムとしてマウントできる(結果として同じbtrfsパーティションに制限される)コピーオンライトハードリンクの豪華なセットと考えてください(将来、それぞれに異なるマウントオプションを使用できるようになります)サブボリューム(=スナップショット))。
実際にデータをコピーするのは、rsync
を使用する場合のみです。
BTRFSでは、ディスクに保存された実際のデータの不変性のおかげで(--nodatacow
でマウントしない限り)、同じファイルの2つのコピーをドライブの共有領域に保存できますが、副作用はありません。シンボリックリンクまたはハードリンクのいずれか。 btrfsパーティションをスキャンし、同一のファイルで使用されているハードドライブのスペースを解放するツール "bedup" もあります。
このBTRFS機能はcp
プログラムとも統合されます。ユーザーの観点から見ると、cp --reflink <source> <dest>
は通常のコピーと変わりませんが、桁違いに高速です。実際にはデータをコピーしません。コピー先またはソースファイルを実際に変更しようとすると、コピーはファイルシステムによって透過的に行われます。これは、--reflink
でコピーされたファイルだけでなく、変更したファイルにも当てはまります。これがCOWシステムと呼ばれる理由です(COW = Copy On Write)
btrfs send
を使用して、スナップショットを別のディスクまたはマシン上にある別のBTRFSに送信できます。この操作は、増分を実行するときに非常に高速で効率的です。 BTRFSからのスナップショット転送は、最後に転送されたスナップショット以降の差分のみを送信します。これは多くの場合rsync/cpより優れています( https://btrfs.wiki.kernel.org/index.php/Incremental_Backup )
btrfs send
経由でrsync
'dフォルダーを送信できないと思います。 cp -a --reflink=true
を使用してコピーしたフォルダも同じ
また、、受け入れられた回答(Michaelから)には、Btrfsの場合、cp -a --reflink=true
を使用できるという事実が含まれていません。任意のディレクトリのスナップショット。意味 "データが実際に変更されるまで、データの追加の物理コピーは作成されません。"(したがって、余分なスペースは使用されず、操作は非常に高速です)。
また、cp -a --reflink=true
はcp -al
とは異なることに注意してください。参照されるのは共通ブロックだけなので、1つのファイルを変更しても他のファイルは変更されません。私の知る限り、ZFSはこの機能をサポートしていません。
スナップショットと同じファイルシステムへのcp -a --reflink
を使用したコピーの主な違いは、スナップショットの方がはるかに高速(ほぼ瞬時)であることです。パフォーマンスは、元のサブボリュームにあるファイルの数には依存しません。あまり基本的ではない違いもありますが、少し不便です。スナップショットはボリューム自体をコピーするだけで、ネストされたサブボリュームはスナップショット内の空のディレクトリとして表示されます。完全を期すために、--reflink
フラグは、1つのファイルから読み取り、他のファイルに書き込むことでデータをコピーする代わりに、高速でCOWファイルシステム上のスペース共有を可能にするreflink syscallを使用するようにcpに要求します。