Debian

如何保留備份歷史記錄?

  • February 22, 2022

我的目的是每天在伺服器上創建某個硬碟驅動器的“快照”。如何自動確保今天、三天前、五天前、10 天前(等等)的快照被保存並循環替換?我找到了一個工具:duplicity,但我沒有找到任何方法來使用它來實現這一點。我應該使用 bash shell 腳本嗎?有什麼例子可以讓我從中獲得靈感嗎?

系統正在執行 Debian。

Duplicity 創建快照,但以壓縮存檔的形式,而不是以可以直接讀取的形式。

有幾種方法可以創建快照。一些高級文件系統(例如ZFSBtrfs)將它們作為內置功能,某些磁碟層(例如LVM )也是如此。

在通用文件系統上,一項基本技術是重現您想要製作快照的目錄樹,但創建每個文件的硬連結而不是複製文件。當文件被刪除並被新版本替換時,快照會保留舊版本。請注意,某些應用程序會修改文件;這也會修改快照版本,因為它們是同一個文件。這是基於硬連結的解決方案的固有問題。

直接硬連結的一種變體是在備份文件時始終製作副本,但如果自上次備份以來文件未更改,則製作指向較早備份的硬連結而不是製作新副本。與以前的方法不同,這種方法適用於備份,因為它不會冒著通過修改舊備份中的文件來重寫歷史記錄的風險。

帶有--link-dest選項的Rsync和Rsnapshot是製作此類快照的最常用工具。Rsnapshot 是一個更高級別的工具:它在後台使用 rsync,但會使用正確的參數呼叫它,管理舊備份的剔除等。

使用 rsnapshot,您可以通過定義多個間隔來指定如何剔除舊備份。最低間隔是進行備份的頻率,在您的情況下是每天。更長的時間間隔定義了保留哪些備份。對於 中的每個指令,當您執行時,rsnapshot 會做兩件事:retain *INTERVAL* *N*``rsnapshot.conf``rsnapshot *INTERVAL*

  1. 剔除備份目錄,以便僅*N*保留 -1 個快照*INTERVAL*
  2. 對於最低間隔,進行備份;對於其他時間間隔,複製前一個時間間隔的目前圖像。

例如,要進行每日備份並保留 3、5 和 10 天前的備份,並retain在您的 中包含以下行/etc/rsnapshot.conf

retain daily 2
retain day3 2
retain day5 3

rsnapshot daily作為每日 cron 作業執行。在該作業前幾分鐘,rsnapshot day3rsnapshot 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 所示文件。

引用自:https://unix.stackexchange.com/questions/192994