Backup
linux tar 列出-增量不可信
我正在尋找某種方法來解決在 linux 上使用 tar 進行增量備份的問題。
我有大量需要備份到磁帶的數據集(大約 3TB)。為此,我在 LTO4 設備上使用 linux tar 命令和 mt / mtx。
由於備份非常非常非常慢(我想我必須將其放在另一個問題中),所以我別無選擇,只能使用增量備份以避免它在生產期間執行。
基本上,它是這樣的:
- 製作完整的焦油:(級別為 0)
tar --new-volume-script=changetape.sh \ --exclude=.zfs \ --listed-incremental=file.index \ --label=full_DS01 \ -cvf /dev/nst0 \ /mnt/storage/sharename >>filelisting.log 2>>errlisting.errlog
- 每天增量焦油:
mtx -f /dev/sg1 load X #(load correct tape) mt -f /dev/nst0 eod #(forward to end of data to write a new incremental tar) tar --exclude=.zfs \ --listed-incremental=file.index \ --label=incremental_DS01 \ -czvf /dev/nst0 \ /mnt/storage/sharename >>filelisting.log 2>>errlisting.errlog
- 重複增量焦油。使用與 2 中相同的過程,所以我總是使用 0 級列出的增量,每次都適應。這應該意味著我總是備份自上次增量更新以來更改的文件。(與您始終與完整更新進行比較的差異相反)
問題:
幾次迭代後,增量開始失敗,這意味著:備份執行,但似乎認為所有文件都已更改,實際上它進行了完整備份。
這發生在不同的數據集中。
我該如何解決這個問題?這怎麼可能?一切似乎都執行良好,然後它認為所有文件都已更改?
為了清楚起見:
- 數據集是只讀掛載點
- 文件夾結構與完整備份中的相同
- 上層文件夾名稱未更改
我該如何解決這個問題?
gtar 中的增量功能存在概念問題,無法在所有情況下都正常工作。2004年我在star上嘗試檢查增量功能時,gtar提前失敗,根本無法測試。
你試過star的增量備份嗎?
Freebsd 使用star 進行zfs 備份,這很好用,因為freebsd 修復了一些舊的核心錯誤。
gtar
增量備份有幾個問題:
- 重要的較大元數據不在備份存檔中,而是在一個單獨的文件中,該文件是使用
gtar
供應商特定選項創建的-g
。如果系統完全崩潰,這個文件很可能會失去(至少在它的最新版本中)。然而,與備份分開的這個文件的存在並不是真正的問題。真正的問題是該文件無法跟踪重命名。- gtar 的備份存檔不包含有關重命名文件的任何資訊。只有一個跟踪允許假設新存檔中未提及但存在於目前文件系統中的文件名必須已消失並因此被刪除。
- 如果頂層目錄被重命名,gtar 需要歸檔一個包含所有內容的完整目錄樹。這使得 gtar 增量很大,並且在恢復操作期間很容易溢出目標文件系統。
- gtar 在兩個增量之間更改文件類型的非目錄文件存在問題。
- gtar 無法處理目錄重命名,然後創建以前名稱的新目錄。
- 因此,我無法使用我在 2004 年 9 月為 star 創建的 gtar 執行最初的手工測試。
另一方面,Star 使用一種基本算法,該算法自 35 年以來就被認為是正確的,因為它是 1981 年為 ufsdump/ufsrestore 開發的。Star 的增量備份以下列方式工作:
- 有一個dumpdates 文件,記錄不超過每個完整或增量轉儲的時間戳、級別和文件系統。
- 每個 tar 存檔包含跟踪兩個備份之間文件系統中的所有更改所需的所有元數據。除了所有更改的文件之外,star 還歸檔所有更改目錄的文件名列表以及相關的 inode 編號。這允許隨時跟踪所有文件刪除和所有文件重命名以進行任何增量備份。
- 當 star 從備份中恢復文件系統時,它會創建一個數據庫,其中包含所有提取對象的條目,其中包含文件名、備份文件系統中的原始 inode 編號和提取文件系統上使用的新 inode 編號。這允許 star 跟踪兩個增量之間的所有更改。
- 當您在文件系統的頂層重命名目錄時,star 只需要備份根目錄和重命名目錄及其元數據,而不是該目錄內容中的單個文件。
- Star 用於在 Berlios 文件系統上執行每日累積增量備份和恢復(通常每天 2-10GB 的更改數據),在 10 年內從未失敗。
在開始使用 gtar 進行備份之前,您可能希望先執行類似的恢復測試。
順便說一句:這是一個驗證 GNU tar 如何通過增量恢復失敗的腳本:Is it possible to use tar for full system backups?