Tar

GNU tar 增量備份是否會再次保存整個文件,即使只有 atime 或 mtime 不同?

  • July 12, 2020
mkdir test
echo "hi" > test/file1
tar -c -f archive.0.tar -g test.snar test
touch -a test/file1  # changes atime and ctime, doesn't change mtime
tar -c -f archive.1.tar -g test.snar test
tar -t -G -vv -f archive.1.tar  # lists Y for file1

那麼GNU tar 是否再次儲存了整個文件,即使只更改了訪問時間(atime)和元數據更改時間(ctime)?這對我來說似乎非常低效,因為我們可以合理地預期許多文件會被讀取但不會被更改。

用於增量gtar備份是不可靠的,但這不是錯誤處理時間戳的結果。

任何在使用者空間工作的備份工具,因此無法檢查內部文件系統結構,例如,zfs send需要以相同的方式處理時間戳,否則它無法授予正確的增量備份。

  • atime與備份無關,因為它只是提示文件已被讀取,而不是文件是否已被修改。
  • mtime從第一個角度看可能看起來很有趣,但也無關緊要。這是因為mtime使用者空間程序可以將文件的 設置為任何值。
  • ctime是增量備份唯一重要的時間戳,因為這是唯一不能被操縱的時間戳。

由於ctime無法操縱並且隨著ctime內容和元數據的變化而更新,備份工具需要在文件內容和文件元數據ctime被更新時存檔。

結果,顯然沒有更改的文件mtime仍然可能具有修改的內容,因此需要在備份中

最後:GNU tar 沒有實現您要求的方法。該行為是硬編碼的。

star但是提供了-dumpmeta在 2004 年創建的選項,以便試驗非重複備份。star但是明確警告使用此選項,請參閱手冊頁:

-dumpmeta 在增量轉儲模式下改變star 的行為。如果使用 -dumpmeta 並且自上次增量轉儲以來僅更新了文件的 inode 更改時間 (st_ctime),star 將僅歸檔文件的元數據(例如 uid、權限等),而不歸檔文件內容。使用 -dumpmeta 將導致較小的增量轉儲,但在兩個增量之間創建並在 st_mtime 中設置為舊日期的文件(例如,作為 tar 提取的結果)將不會與完整內容一起存檔。因此,使用 -dumpmeta 可能會導致增量轉儲不完整,請謹慎使用。

star預設情況下使用的方法在 1981ufsdumpufsrestore左右使用,這是star自 2005 年 2 月以來使用的方法,使用這些程序恢復增量備份從未出現過問題。

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