ZFS:ローリングスナップショットを使用して送受信

ZFS:ローリングスナップショットを使用して送受信

私の小さなホームサーバーはZFSディストリビューションで実行されます。このシステムでは、ローリングスナップショットスキームを実装しました。

  • 毎時間スナップショットを作成
  • 1日に1回チェーンが薄くなり、毎時/毎日/毎週/毎月のスナップショットセットが作成されます。

一部のファイルシステムのオフサイトバックアップをオフィスのUSBドライブに保存したいと思います。計画は隔週でドライブを更新することです。ただし、ローリングスナップショット方式のため、増分スナップショットの実装に問題があります。

たとえば、これが私が望むプログラムです:

  1. 初期スナップショット:zfs snap tank/fs@snap0
  2. 初期スナップショットを送信します。zfs send tank/fs@snap0 | zfs recv -Fduv backup_tank
  3. backup_tankオフサイトアーカイブ
  4. スナップショットを撮る zfs snap tank/fs@snap1zfs snap tank/fs@snap2
  5. チェーントリム: zfs destroy tank/fs@snap0
  6. 戻ってbackup_tankファイルシステムを増分更新します。
  7. 明らかzfs send -I snap0 tank/fs@snap2 | zfs recv -Fduv backup_tankにもう存在しなかったので失敗しました。snap0tank

簡単に言うと:

sendスナップショットチェーンの改善と増加/結合を組み合わせるためのきれいなソリューションはありますかrecv?ドライブを接続していくつかのコマンドを実行するたびに、その時点でファイルシステムのコピーを取得したいと思います。この例では、backup_tankスナップショットfs@snap1fs@snap2

答え1

あなたが望むものを正確にすることはできません。

ストリームを作成するたびに、zfs sendストリームは2つのスナップショット間のデルタとして生成されます。 (これが現在ZFSを実装する唯一の方法です。)ストリームを他のデータセットに適用するには、ターゲットデータセットにストリームの開始スナップショットを含める必要があります。そうでない場合、両方に共通の参照点はありません。 。ソースデータセットから@snap0スナップショットを削除すると、ZFSが調整できない状況が発生します。

要求された操作を実行する方法は、常に2つのデータセット間で共通のスナップショットを維持し、その共通のスナップショットを次のトランスポートストリームの開始点として使用することです。

したがって、手順1で@backup0スナップショットを作成し、手順6の近くで@backup1スナップショットを作成してオフサイトバックアップを更新できます。次に、@backup0と@backup1(すべての中間スナップショットを含む)の間にデルタストリームを転送します。それから@backup0を削除しかし続ける@backup1(新しい共通分母になる)の後にバックアップを更新するときは、@backup1の代わりに@backup2を作成し、@backup0と@backup1の代わりに@backup1と@backup2の間にデルタを転送し、@backup0の代わりに@backup1を削除できます。 。早く。

答え2

スナップショットにはランダムな名前があります。そして、zfs send -i [snapshot1] [snapshot2]2つのスナップショットの違いが送信されることがあります。これを利用して、保存ポリシーが異なる2つ以上のスナップショットセットを持つことができます。

たとえば、次の名前のスナップショットセットがあります@snap.$timestamp$timestamp日付/時刻形式があなたに適しています(time_tは計算が最も簡単ですが、人間が読むのは簡単ではありません。どちらも提供されています)) @snap.%s.%Y%M%D%H%M%S。毎月のスナップショット削除コードは、で終わらないすべてのエントリを無視する必要があります@snap

2番目のグループはに電話できます@offsite.$timestamp。ジョブに適したスナップショット保存/削除ポリシーが必要であり、管理に使用されるコードは、で終わらないすべての項目を無視する必要があります@offsite

ちなみに、これは当然のことですが、これは毎時、毎週、毎週、毎月のスナップショットに使用できるため、各スナップショットは異なる保存ポリシーを持つことができます。例えば@hourly.$timestamp@daily.$timestamp@snap.$timestamp

また、データセットで使用されているブロックは解放されるまで解放されないため、より多くのディスク領域が使用されることは明らかです。いいえ残されたスナップショットはこれを参照します。

答え3

あなたは私のものを使うことができますzfs自動スナップショットこれはオリジナルフォークです。zfs自動スナップショットsend2remoteスクリプトを使用した更新

send2remoteはスナップショットのソースとターゲットの違いを取得し、SSHを介して増分スナップショットをバックアップzpoolに送信します(バックアップzpoolがリモートホストにある場合)。

バックアップzpool - ローカルホストまたはリモートホストに存在する可能性がある

関連情報