web-dev-qa-db-ja.com

一部の中間スナップショットを無視してZFSスナップショットを段階的に送信しても安全ですか?

いくつかの背景。

[〜#〜] zrep [〜#〜] を使用して2つのサーバーを相互に複製し、各サーバーには、複製マスターとして2つのデータセットと複製ターゲットとして2つのセットを含む1つのZFSプールが含まれています。マスターセットには、ローカルサーバーのシステムVMとVirtualBox-VMが含まれ、レプリケーションは他のサーバーから同じものをターゲットにします。

さらに、サーバーごとにすべてのマスターセットをいくつかのNAS using rsyncにバックアップしています。NASはかなり遅く、バックアップには数時間かかります成功したため、実装されたアプローチは、VMを一時停止し、1つのスナップショットを作成し、VMを復元し、作成したスナップショットからrsyncを実行させることです。重要なことは、手動で作成したスナップショットがZREP命名規則に従っていないことrsyncが再び終了した直後に破壊されました。最初、ZREPはcronによって開始され、同時に動作し続けました。

問題。

しかし、時々、ZREPが何らかの状態に陥ることがありました もう同期できません 。この問題を解決するために、同僚から、スナップショットを削除し、プロセスに従ってZREPを最初からやり直す必要があると言われました。この問題は、ZREPをrsyncと並行して実行させないことで修正され、最終的には独自のスナップショットが作成されました。

残念ながら、そのエラーの具体的な詳細が不足しており、同僚はもう利用できませんが、彼の説明から、増分同期するレプリケーションマスターとターゲット間のスナップショットの共通の祖先を見つけることに問題があるように思われました。エラーメッセージは次のようなものだったと思います。

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

インクリメンタル送信/受信の仕組みについての私の理解。

the docs および otherquestions についての私の理解から、スナップショットを増分的に正常に送信するには、送信マスターと受信ターゲットがその1つのスナップショットを共有する必要があります。はzfs sendの引数1として使用され、スナップショットはさらに受信ターゲットの現在のスナップショットである必要があります。

2番目の引数は任意の新しいスナップショットで、ZFSが使用して、マスターとターゲットに共通するスナップショットの違いを計算し、それらの違いをレプリケーションターゲットに送信します。どちらも引数1として指定された同じスナップショットを共有するため、違いはターゲットにとって意味があり、そのまま適用できます。

私の理解からの引数-i-Iは、マスター側のすべての計算された増分データを含む1つの論理スナップショットを送信するOR増分変更。たとえば、-iはターゲット上で常に1つの新しいスナップショットにつながるのに対し、-IはN個の追加スナップショットにつながる可能性があります。

ZFSは常にこれら2つの提供された引数間の差異のみを計算し、他の中間スナップショットを気にしないため、引数1と2からzfs send -iに提供されるものの間の中間スナップショットを作成および破棄しても問題はありません。 ZREPの場合、理論的には、ZREPで管理されているスナップショットに干渉しない限り、操作中に追加のスナップショットが作成されても、その違いはありません。特別なZREPスナップショットが常に利用可能であり、ZREPによって管理され、レプリケーションの差異を計算するために使用されるからです。したがって、理論的には、rsyncとバックアップのスナップショットを追加で作成することはまったく問題にはなりません。

それらの仮定は正しいですか?

ZREPに関連しない質問。

一般に、いくつかの中間スナップショットを無視して、ZFSスナップショットを段階的に送信するのは安全ですか?または、同期またはその他のものから完全に外れるように、これまでに作成されたすべての中間スナップショットをレプリケーションターゲットに送信する必要がありますか? -i-Iはどのように依存しますか?

2

はい、まだ中間のデータはすべて取得できますが、中間に巻き戻すことはできません。

スナップショット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/

0