如何保留備份歷史記錄?
我的目的是每天在伺服器上創建某個硬碟驅動器的“快照”。如何自動確保今天、三天前、五天前、10 天前(等等)的快照被保存並循環替換?我找到了一個工具:duplicity,但我沒有找到任何方法來使用它來實現這一點。我應該使用 bash shell 腳本嗎?有什麼例子可以讓我從中獲得靈感嗎?
系統正在執行 Debian。
Duplicity 創建快照,但以壓縮存檔的形式,而不是以可以直接讀取的形式。
有幾種方法可以創建快照。一些高級文件系統(例如ZFS和Btrfs)將它們作為內置功能,某些磁碟層(例如LVM )也是如此。
在通用文件系統上,一項基本技術是重現您想要製作快照的目錄樹,但創建每個文件的硬連結而不是複製文件。當文件被刪除並被新版本替換時,快照會保留舊版本。請注意,某些應用程序會修改文件;這也會修改快照版本,因為它們是同一個文件。這是基於硬連結的解決方案的固有問題。
直接硬連結的一種變體是在備份文件時始終製作副本,但如果自上次備份以來文件未更改,則製作指向較早備份的硬連結而不是製作新副本。與以前的方法不同,這種方法適用於備份,因為它不會冒著通過修改舊備份中的文件來重寫歷史記錄的風險。
帶有
--link-dest
選項的Rsync和Rsnapshot是製作此類快照的最常用工具。Rsnapshot 是一個更高級別的工具:它在後台使用 rsync,但會使用正確的參數呼叫它,管理舊備份的剔除等。使用 rsnapshot,您可以通過定義多個間隔來指定如何剔除舊備份。最低間隔是進行備份的頻率,在您的情況下是每天。更長的時間間隔定義了保留哪些備份。對於 中的每個指令,當您執行時,rsnapshot 會做兩件事:
retain *INTERVAL* *N*``rsnapshot.conf``rsnapshot *INTERVAL*
- 剔除備份目錄,以便僅
*N*
保留 -1 個快照*INTERVAL*
。- 對於最低間隔,進行備份;對於其他時間間隔,複製前一個時間間隔的目前圖像。
例如,要進行每日備份並保留 3、5 和 10 天前的備份,並
retain
在您的 中包含以下行/etc/rsnapshot.conf
:retain daily 2 retain day3 2 retain day5 3
rsnapshot daily
作為每日 cron 作業執行。在該作業前幾分鐘,rsnapshot day3
每rsnapshot day5
三天執行一次;你可以像這樣近似它:04 04 5,10,15,20,25,30 * * rsnapshot day5 07 04 3,6,9,12,15,18,21,24,27,30 * * rsnapshot day3 10 04 * * * rsnapshot daily
(例如,您不能從 3 天前開始備份,因為您在第 2 天擦除 - 您所做的是在第 3 天保留一個每日備份。)更經典的保留方案是每周和每月保留,如 rsnapshot 所示文件。