Backup
快速同步 zfs 池
我的伺服器將增量備份保存在 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
是其中最成熟的一個。