Tar
GNU tar 增量備份是否會再次保存整個文件,即使只有 atime 或 mtime 不同?
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
預設情況下使用的方法在 1981ufsdump
年ufsrestore
左右使用,這是star
自 2005 年 2 月以來使用的方法,使用這些程序恢復增量備份從未出現過問題。