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を削除できます。 。早く。

おすすめ記事