web-dev-qa-db-ja.com

ファイルシステムのスナップショットは、単にファイルのコピーを作成することとどう違うのですか?

これを行うことにより、

# 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を使用してバックアップファイルシステムを簡単にバックアップするよりも、スナップショットを使用する利点は何ですか?

5
BufBills

スナップショットはバックアップを行いません。それらを一見別のファイルシステムとしてマウントできる(結果として同じbtrfsパーティションに制限される)コピーオンライトハードリンクの豪華なセットと考えてください(将来、それぞれに異なるマウントオプションを使用できるようになります)サブボリューム(=スナップショット))。

実際にデータをコピーするのは、rsyncを使用する場合のみです。


BTRFSでは、ディスクに保存された実際のデータの不変性のおかげで(--nodatacowでマウントしない限り)、同じファイルの2つのコピーをドライブの共有領域に保存できますが、副作用はありません。シンボリックリンクまたはハードリンクのいずれか。 btrfsパーティションをスキャンし、同一のファイルで使用されているハードドライブのスペースを解放するツール "bedup" もあります。

このBTRFS機能はcpプログラムとも統合されます。ユーザーの観点から見ると、cp --reflink <source> <dest>は通常のコピーと変わりませんが、桁違いに高速です。実際にはデータをコピーしません。コピー先またはソースファイルを実際に変更しようとすると、コピーはファイルシステムによって透過的に行われます。これは、--reflinkでコピーされたファイルだけでなく、変更したファイルにも当てはまります。これがCOWシステムと呼ばれる理由です(COW = Copy On Write)

4
Adam Ryczkowski

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=truecp -alとは異なることに注意してください。参照されるのは共通ブロックだけなので、1つのファイルを変更しても他のファイルは変更されません。私の知る限り、ZFSはこの機能をサポートしていません。

0
Alecz

スナップショットと同じファイルシステムへのcp -a --reflinkを使用したコピーの主な違いは、スナップショットの方がはるかに高速(ほぼ瞬時)であることです。パフォーマンスは、元のサブボリュームにあるファイルの数には依存しません。あまり基本的ではない違いもありますが、少し不便です。スナップショットはボリューム自体をコピーするだけで、ネストされたサブボリュームはスナップショット内の空のディレクトリとして表示されます。完全を期すために、--reflinkフラグは、1つのファイルから読み取り、他のファイルに書き込むことでデータをコピーする代わりに、高速でCOWファイルシステム上のスペース共有を可能にするreflink syscallを使用するようにcpに要求します。

0
Gabriel