Backup

快速同步 zfs 池

  • November 2, 2016

我的伺服器將增量備份保存在 zfs 卷上。由於數據非常相似,我可以顯著減少增長 - 每天大約有 500GB 的“新數據”,但池每天僅增長 5-10GB 左右,其餘的儲存在重複數據刪除/壓縮中。

我想將備份複製到加密的 USB 磁碟,因此我也將其設置為 zfs 卷。當我使用 rsync 或 zfs 發送/接收同步備份時,似乎所有數據都再次傳輸(只是作為重複數據儲存在 USB 驅動器上)。因此,備份目前需要超過 24 小時,這使得每日備份變得不可能。

有沒有辦法更快地備份這個?

Michael Hampton 的建議很到位,Solaris 手冊頁也很好,但是對於初學者來說,這個概念並不容易掌握。我將概述我在編寫腳本時所經歷的要點。


本質上,你首先照常做一個快照x和一個完整的:send/recv

# Initial send, destroy all filesystems on the destination
# pool which are not present on the source pool.
zfs snapshot pool0@snap0
zfs send -R pool0@snap0 | zfs recv -Fdu pool1

之後,您進行快照x+1並以增量方式發送。您可以刪除源上的舊快照,但您需要保留最後一個(最近的),以便計算差異。如果您失去/銷毀源上的最後一個快照,您將不得不從完整的初始發送重新開始!

# incremental send, destroy all filesystems on the destination
# pool which are not present on the source pool. Afterwards, old
# snapshots can be destroyed.
zfs snapshot pool0@snap1
zfs send -R -I pool0@snap0 pool0@snap1 | zfs recv -Fdu pool1
zfs destroy pool0@snap0

# Afterwards, repeat and replace snap1 with snap2 and snap0 with snap1 etc.

一些我自己的經驗的建議:

  • 刪除最後一個快照意味著你需要重新開始,所以要小心,首先在你的腳本中檢查成功的返回值。
  • 您可以為快照編號或使用date- 編號更容易,但如果您查看日誌和/或頻繁拍攝快照,日期會更好。
  • 在嘗試選項並嘗試-nv模擬時,請注意這適用於發送,但會因接收失敗而失敗,因為沒有什麼可以接收。這在手冊或錯誤消息中並不明顯。
  • 快照將佔用空間,直到它們被銷毀,並且它們“鎖定”您已刪除的空間。如果您經常備份,這不是問題。如果您很少使用多個目標磁碟/池和/或備份,您可能會遇到磁碟空間限制。在 illumos/OpenZFS 中存在該bookmarks功能,可以作為規避此問題的一種方法。不幸的是,它目前只支持單個快照而不是遞歸,所以你必須自己添加遞歸程式碼。
  • 如果您不想使用/編寫自己的,請使用 Github 上的眾多之一。我認為znapzend是其中最成熟的一個。

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