一些背景。

一些背景。

一些背景。

我在用著中瑞普相互複製兩台伺服器,每台伺服器包含一個 ZFS 池,其中包含兩個資料集作為複製主伺服器和兩組作為複製目標。主集包含本機伺服器的系統和 VirtualBox-VM,複製目標與另一台伺服器相同。

此外,我使用 .NET 將每台伺服器的所有主集備份到某些 NAS rsync。 NAS 速度相當慢,備份需要幾個小時才能成功,因此實施的方法是暫停虛擬機,創建一個快照,恢復虛擬機並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 的一個快照,zfs send並且該快照還需要是接收目標上的當前快照。

第二個參數是任意較新的快照,ZFS 使用它來計算主快照和目標共有的一個快照的差異,並將這些差異傳送到複製目標。由於兩者共享指定為參數 1 的相同快照,因此這些差異對於目標來說是有意義的,並且可以簡單地按原樣應用。

-i根據我的理解,這些論點-I要么導致一個邏輯快照被發送,其中包含主端的所有計算增量數據,要么發送包含其增量更改的所有中間快照。因此,eg-i總是會在目標上產生一個新快照,而-I可能會產生 N 個額外的快照。

在 arg 1 和 2 提供的內容之間建立和銷毀中間快照應該zfs send -i不會有任何問題,因為 ZFS 始終僅計算這兩個提供的參數之間的差異,並且不關心任何其他中間快照。對於 ZREP,這意味著理論上只要我不干擾 ZREP 管理的快照,無論是否在其操作期間創建其他快照,都不會有任何影響。原因很簡單,因為特殊的 ZREP 快照始終可用,由 ZREP 管理並用於計算複製差異。所以理論上來說,另外創建快照rsync和備份應該不成問題。

這些假設正確嗎?

非 ZREP 相關問題。

一般來說,增量發送 ZFS 快照而忽略一些中間快照是否安全?或者是否有必要將創建的所有中間快照發送到複製目標以防止不同步或其他問題?事情如何取決於-ivs -I

答案1

是的,您仍然可以獲得中間的所有數據,但您只是無法倒回中間。

如果您有快照 1,2 和 3,而遠端池只有快照 1,您可以為其提供快照 3 並跳過 2。但數據仍然會在那裡。

這些快照描述了當時的情況。因此,遠端池上缺少快照“2”,就好像您在該時間點從未拍攝過快照一樣。它實際上不知道“2”快照以及當時的情況。

如果您改變主意,則需要刪除遠端池上的快照“3”,然後才能再次發送“2”,然後發送“3”。

https://www.reddit.com/r/zfs/comments/cfzdb3/is_it_safe_to_send_zfssnapshots_incrementally/euensuy/

相關內容