Zfs

忽略一些中間快照以增量方式發送 ZFS 快照是否安全?

  • July 22, 2019

一些背景。

我正在使用ZREP相互複製兩台伺服器,每台伺服器都包含一個 ZFS 池,其中包含兩個數據集作為複制主機和兩組作為複制目標。主集包含本地伺服器的系統和 VirtualBox-VM,複製目標與另一個相同。

此外,我正在將每台伺服器的所有主集備份到使用rsync. NAS 非常慢,備份需要幾個小時才能成功,因此實施的方法是暫停 VM,創建一個快照,還原 VM,rsync然後從創建的快照執行。重要的是手動創建的快照沒有遵循 ZREP 命名約定,rsync再次完成後直接銷毀。起初,ZREP 繼續並行執行,由cron.

問題。

但時不時會發生 ZREP 進入某種無法再同步的狀態。為了解決這個問題,一位同事告訴我他需要刪除快照並按照流程重新初始化 ZREP。通過最終不再讓 ZREPrsync與我們自己的快照並行執行,這個問題得到了解決。

遺憾的是,我缺乏該錯誤的具體細節,並且該同事不再可用,但從他的描述看來,在複製主機和目標之間找到快照的共同祖先以增量同步時存在問題。我認為錯誤消息類似於以下內容:

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導致發送一個邏輯快照,其中包含主端的所有計算增量數據,要麼發送包含其增量更改的所有中間快照。因此,例如-i,總是會導致目標上的一個新快照,而-I可能會導致 N 個額外的快照。

在作為 arg 1 和 2 提供的內容之間創建和銷毀中間快照zfs send -i應該沒有任何問題,因為 ZFS 總是只計算這兩個提供的參數之間的差異,而不關心任何其他中間快照。在 ZREP 的情況下,這在理論上意味著只要我不干擾 ZREP 管理的快照,無論是否在其操作期間創建了額外的快照,它都不應該有任何區別。僅僅因為特殊的 ZREP 快照始終可用,由 ZREP 管理並用於計算複製差異。所以理論上,另外創建快照rsync和備份應該不是問題。

這些假設正確嗎?

非 ZREP 相關問題。

一般而言,忽略一些中間快照以遞增方式發送 ZFS 快照是否安全?或者是否有必要將曾經創建的所有中間快照發送到複製目標以使網路不同步或其他東西?事物如何依賴於-ivs. -I

是的,您仍然可以獲得中間的所有數據,但您不能倒回到中間。

如果您有快照的 1,2 和 3,而遠端池只有快照 1,您可以給它快照 3 並跳過 2.. 它只是無法回滾到“2”狀態。但數據仍然存在。

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

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

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

引用自:https://serverfault.com/questions/976096