私の小さなホームサーバーはZFSディストリビューションで実行されます。このシステムでは、ローリングスナップショットスキームを実装しました。
- 毎時間スナップショットを作成
- 1日に1回チェーンが薄くなり、毎時/毎日/毎週/毎月のスナップショットセットが作成されます。
一部のファイルシステムのオフサイトバックアップをオフィスのUSBドライブに保存したいと思います。計画は隔週でドライブを更新することです。ただし、ローリングスナップショット方式のため、増分スナップショットの実装に問題があります。
たとえば、これが私が望むプログラムです:
- 初期スナップショット:
zfs snap tank/fs@snap0
- 初期スナップショットを送信します。
zfs send tank/fs@snap0 | zfs recv -Fduv backup_tank
backup_tank
オフサイトアーカイブ- スナップショットを撮る
zfs snap tank/fs@snap1
:zfs snap tank/fs@snap2
- チェーントリム:
zfs destroy tank/fs@snap0
- 戻って
backup_tank
ファイルシステムを増分更新します。 - 明らか
zfs send -I snap0 tank/fs@snap2 | zfs recv -Fduv backup_tank
にもう存在しなかったので失敗しました。snap0
tank
簡単に言うと:
send
スナップショットチェーンの改善と増加/結合を組み合わせるためのきれいなソリューションはありますかrecv
?ドライブを接続していくつかのコマンドを実行するたびに、その時点でファイルシステムのコピーを取得したいと思います。この例では、backup_tank
スナップショットfs@snap1
とfs@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 - ローカルホストまたはリモートホストに存在する可能性がある