
背景について。
私は使用していますズレップ2 台のサーバーを相互に複製し、各サーバーには、レプリケーション マスターとして 2 つのデータセットを含む 1 つの ZFS プールと、レプリケーション ターゲットとして 2 つのセットが含まれます。マスター セットには、ローカル サーバーのシステムと VirtualBox-VM が含まれ、レプリケーション ターゲットは他のサーバーと同じです。
さらに、私は を使用して、サーバーごとのすべてのマスター セットを NAS にバックアップしていますrsync
。NAS はかなり遅く、バックアップが成功するまでに数時間かかるため、実装されたアプローチは、VM を一時停止し、スナップショットを 1 つ作成し、VM を復元して、rsync
作成したスナップショットから実行することです。重要なのは、手動で作成されたスナップショットが ZREP の命名規則に従っておらず、終了直後に破棄されていることですrsync
。最初は、 によって開始された ZREP が並行して動作し続けましたcron
。
問題。
しかし、時々ZREPが何らかの状態に陥ることがありましたもう同期できませんこの問題を解決するには、スナップショットを削除し、ZREP を最初から初期化するプロセスを実行する必要があると同僚から教えてもらいました。rsync
最終的には、ZREP を独自のスナップショットと並行して実行しないようにすることで、この問題が解決しました。
残念ながら、そのエラーの具体的な詳細はわかりませんし、同僚ももう連絡が取れませんが、彼の説明によると、増分同期するレプリケーション マスターとターゲットの間でスナップショットの共通の祖先を見つける際に問題が発生したようです。エラー メッセージは次のようなものだったと思います。
cannot receive incremental stream: most recent snapshot of zfs-pool/vbox/tori does not match incremental source
cannot open 'zfs-pool/vbox/tori@zrep_0001b7': dataset does not exist
増分送受信の仕組みについての私の理解。
私の理解ではドキュメントそして他の 質問スナップショットを増分的に送信するには、送信マスターと受信ターゲットが引数 1 として使用される 1 つのスナップショットを共有する必要がありzfs send
、さらにそのスナップショットが受信ターゲット上の最新のスナップショットである必要があります。
2 番目の引数は任意の新しいスナップショットで、ZFS によって、マスターとターゲットに共通する 1 つのスナップショットとの差異を計算し、その差異をレプリケーション ターゲットに送信するために使用されます。両方とも引数 1 として指定された同じスナップショットを共有しているため、差異はターゲットにとって意味があり、そのまま適用できます。
私の理解では、議論-i
vs.-I
は、マスター側のすべての計算された増分データを含む 1 つの論理スナップショットが送信されるか、増分変更を含むすべての中間スナップショットが送信されるかのいずれかになります。つまり、たとえば、-i
ターゲット上に常に 1 つの新しいスナップショットが生成されるか、または-I
N 個の追加スナップショットが生成される可能性があります。
引数 1 と 2 として提供されるものの間の中間スナップショットの作成と破棄はzfs send -i
問題にならないはずです。これは、ZFS が常にこれら 2 つの引数間の差異のみを計算し、他の中間スナップショットについては考慮しないためです。ZREP の場合、理論的には、ZREP 管理スナップショットに干渉しない限り、操作中に追加のスナップショットが作成されるかどうかは関係ありません。これは、ZREP によって管理され、レプリケーションの差異を計算するために使用される特別な ZREP スナップショットが常に利用可能であるためです。したがって、理論的には、スナップショットを追加で作成してrsync
バックアップしてもまったく問題はありません。
それらの仮定は正しいでしょうか?
ZREP に関連しない質問。
中間スナップショットを無視して ZFS スナップショットを段階的に送信することは、一般的に安全ですか? それとも、ネットの同期がとれなくなるのを防ぐために、これまでに作成されたすべての中間スナップショットをレプリケーション ターゲットに送信する必要があるのでしょうか? -i
vs.によって状況はどのように異なりますか-I
?
答え1
はい、その間のデータはすべて取得できますが、その間に巻き戻すことはできません。
スナップショット 1、2、3 があり、リモート プールにスナップショット 1 しかない場合は、スナップショット 3 を指定して 2 をスキップできます。ただし、'2' 状態にロールバックすることはできません。ただし、データはそのまま残ります。
スナップショットは、その時点で何があったかを示します。したがって、リモート プールでスナップショット '2' が欠落していると、その時点でスナップショットを 1 つも取得していないのと同じです。文字通り、'2' スナップショットとその当時の状態がわかりません。
気が変わった場合は、リモート プールのスナップショット「3」を削除して、その後で「2」、そして「3」を再度送信する必要があります。
https://www.reddit.com/r/zfs/comments/cfzdb3/is_it_safe_to_send_zfssnapshots_incrementally/euensuy/