Btrfsを試してみたい。ライブシステムのスナップショットを作成できることはすでにわかっていますが、答えが見つからないものがあります。まあ、私がスナップショットを理解しているように、基本的にはある種のアーカイブ形式の完全なコピーです。では、ライブのbtrfsシステムのスナップショットを作成し、そのスナップショットをbtrfs以外のハードドライブ(ext4など)に配置できますか?
また、フルディスク暗号化(luks)を実行しています。スナップショットをどこかに転送すると暗号化されますか?スナップショットはパーティション自体から実際のデータをコピーしますか(その場合は明らかに暗号化されます)、または動作が異なりますか?
また、btrfsスナップショットは読み取りアクセスからどのように保護されますか?他のユーザーはスナップショットを読み取ることができますか?またはルートのみ?管理可能ですか?
スナップショット(この意味で)は、ファイルシステムの一部です。 btrfsの用語では、これはサブボリュームであり、ボリューム上のディレクトリツリーの1つです。 「アーカイブ形式」ではありません。サブボリュームのスナップショットを作成すると、スナップショットが作成された日付の元のボリュームのデータを含む新しいサブボリュームが作成されます。元のサブボリュームへのその後の書き込みはスナップショットに影響せず、その逆も同様です。すべてのサブボリュームは同じボリュームの一部です。ボリューム内のデータのサブセット(重複している可能性があります)を指定します。
どちらのサブボリュームでも変更されていないスナップショットの部分は、ストレージを共有します。スナップショットの作成には、最初はスナップショット制御データ以外のストレージは必要ありません。ストレージの量は、サブボリュームのコンテンツが分岐するにつれて、時間とともに増加します。
スナップショット作成の最も重要な特性は、それがアトミックであることです。ある時点でのデータの写真を撮ります。これはバックアップを作成するのに役立ちます。バックアッププログラムがライブシステムからファイルをコピーする場合、ファイルへの変更との相互作用が不十分になる可能性があります。たとえば、ファイルがディレクトリAからディレクトリBに移動されたが、バックアッププログラムが移動前にBを移動し、移動後にAを移動した場合、ファイルはバックアップに含まれません。スナップショットはこの問題を解決します。ファイルは、移動前にスナップショットが作成された場合はAになり、移動後に作成された場合はBになりますが、どちらの方法でも存在します。その後、バックアッププログラムはスナップショットから外部メディアにコピーできます。
スナップショットは元のボリュームと同じボリュームにあるため、同じ方法で保存されます。ボリュームが暗号化されている場合は暗号化されます。
スナップショットは、権限と他のすべてのメタデータを含む、元のディレクトリツリーを再現します。したがって、権限は元の権限と同じです。さらに、ユーザーはスナップショットディレクトリ自体にアクセスできる必要があります。ユーザーがスナップショットにまったくアクセスできないようにする場合は、ユーザーがアクセスできないディレクトリの下に作成します(スナップショットはどこにでも配置できます)。
ファイルシステムの外でスナップショットのコピーを作成したい場合は、スナップショットにアクセスまたはマウントしてから、お気に入りのプログラム(cp
、rsync
など)を使用してコピーを作成します。 btrfs wiki ;にサンプルコマンドがあります。完全なリファレンスについては、マニュアルページを参照してください。
「cp
、rsync
など」を使用することもできますが、Gillesの回答に追加します。読み取り専用のサブボリューム/スナップショットを転送するには、btrfs send
コマンドを使用して、サブボリュームをbtrfsストリームとして送信および保存することもできます。 btrfs Wiki は次の使用法について言及しています:
# btrfs subvolume snapshot -r / /my/snapshot-YYYY-MM-DD && sync
# btrfs send /my/snapshot-YYYY-MM-DD | ssh user@Host btrfs receive /my/backups
# btrfs subvolume snapshot -r / /my/incremental-snapshot-YYYY-MM-DD && sync
# btrfs send -p /my/snapshot-YYYY-MM-DD /my/incremental-snapshot-YYYY-MM-DD |
ssh user@Host btrfs receive /backup/home
ただし、後で使用するためにストリームを保存することもできます。
# btrfs subvolume snapshot -r / /my/snapshot-YYYY-MM-DD && sync
# btrfs send /my/snapshot-YYYY-MM-DD |
ssh user@Host 'cat >/backup/home/snapshot-YYYY-MM-DD.btrfs'
# btrfs subvolume snapshot -r / /my/incremental-snapshot-YYYY-MM-DD && sync
# btrfs send -p /my/snapshot-YYYY-MM-DD /my/incremental-snapshot-YYYY-MM-DD |
ssh user@Host 'cat >/backup/home/incremental-snapshot-YYYY-MM-DD.btrfs'
これは、逐語的なbtrfsスナップショットを任意のファイルシステムに保存するのに便利です。たとえば、tar
よりも優れている点は、btrfs
スナップショットが増分であり、差分のみが送信されることです。 btrfs Wikiは、この増分バックアップの方法はrsync
よりも高速になる傾向があると主張しています。