btrfsのスナップショット

btrfsのスナップショット

私のDebianシステムでは、バックアップにbtrfs形式のハードドライブを使用しています。データの大部分は私の音楽と写真のコレクションなので、比較的安定して増え続ける傾向があります。

/media/backupにbtrfsボリュームをマウントし、作成していたさまざまなバックアップセットのディレクトリを含むサブディレクトリバックアップを作成しました。毎晩バックアップを完了したら、スナップショットを撮ります。

DATE=$(date+"%Y%m%d_%H%M") btrfs サブボリュームスナップショット/メディア/バックアップ/メディア/バックアップ/$DATE

最初の日は期待どおりに機能しますが、翌日のスナップショットには最初の日のスナップショットも含まれ、スナップショットには最初のスナップショットと2日目のスナップショットの両方が含まれます。

btrfsスナップショットを作成するときに何が起こるのかを正しく理解しているのであれば、これは疑いの余地があり、ディスク容量の使用は絶対に最小限に抑えられますが、少し汚れているように見えるので避けたいと思います。私の最初の考えは、これを避けるために/media/backup/backupのスナップショットを作成することでしたが、もちろんボリュームの代わりにディレクトリのスナップショットを作成しようとするとうまくいきません。

同じボリュームの複数のスナップショットを作成し、すべての古いスナップショットを指す最新のスナップショットを回避する方法はありますか?

答え1

まず、最新のスナップショットを見ると、古いスナップショットのディレクトリに新しいスナップショットの実際のデータが含まれていないため、ディスク使用量が非常に少なく、追加使用量がまったくないことがわかります。

これを防ぐ唯一の方法は、スナップショットプロセスで扱われていない場所にスナップショットを保存することです。これを行うには、基本的に2つのオプションがあります。

  1. スナップショットを作成するサブボリューム内にスナップショット専用のサブボリュームを作成します。スナップショットはサブボリュームの境界で停止するため(これが既存のスナップショットのコピーを保存しない理由です)、スナップショットにはスナップショットがなく、スナップショットサブボリュームの空のディレクトリのみがあります。これは、サブボリュームを作成し、スナップbtrfs subvolume createショット作成スクリプトをスナップショットが保存されている場所に割り当てるだけで済むため、現在採用する最も簡単なオプションです。それほど価値があるだけに、.snapshotsこの方法の事実上標準名のようです。数日間使用した後、ディレクトリツリーはおおよそ次のようになります。

    /media/backups
    /media/backups/.snapshots
    /media/backups/.snapshots/20180207_1342
    /media/backups/.snapshots/20180209_0415
    /media/backups/.snapshots/20180312_1754
    

    スナップショット以外のすべてのデータはにあり、/media/backupsすべてのプライベートスナップショットはに保存されます/media/backups/.snapshots。各スナップショット.snapshotsには空のディレクトリがあります。

  2. BTRFSボリュームのルートサブボリュームを使用する代わりに、すべての物理データを独自のサブボリュームに配置し、スナップショットを外部に配置しながらスナップショットを作成します。このアプローチは変換が簡単ではなく、スナップショットコマンドよりも多くを更新する必要があるかもしれませんが、スナップショット全体を一度にロールバックする方が簡単です。この方法を使用していくつかのスナップショットを撮った後、ディレクトリツリーは次のようになります。

    /media/backups/current
    /media/backups/20180207_1342
    /media/backups/20180209_0415
    /media/backups/20180312_1754
    

    すべてのデータは/media/backups/current(最初の方法のようにBTRFSサブボリュームである必要があります.snapshots)に保存され、スナップショットはにあります。サブボリュームを/media/backups削除して復元するスナップショットという名前の書き込み可能なスナップショットを作成すると、スナップショット全体を簡単に復元できます。 。currentcurrent

今、あなたが言ったことについて2つのコメントをさらに提示したいのですが、あなたの質問に直接は属しません。

  1. リストされたコマンドは、書き込み可能なスナップショットを作成します。あなたの目的がコレクションのアーカイブされたコピーを維持することである場合、これはあなたが望むことがほとんどわからないので、スナップショットを読み取り専用にする-rオプションを追加することをお勧めします。ファイルを変更する必要がある場合(たとえば、コレクションからファイルを完全に削除する必要がある場合など)、このbtrfs property setコマンドを使用してスナップショットの読み取り専用フラグを切り替えることもできます。
  2. 技術的には重要な問題ではありませんが、タイムスタンプ形式はわずかにユニークであるため、他のツールを使用してこれらのスナップショットを処理しようとすると問題が発生し、このデータを共有する必要がある場合は他の人に問題が発生する可能性があります。この点を考慮して、「%FT%T」を使用することをお勧めします。これは、すべてのソフトウェアで解析でき、ほとんどの人がすぐに識別できるISO 8601タイムスタンプを提供しながら、スナップショットの合理的な語彙順序を提供します。

関連情報