Rsync

rsync 確實不能優雅地處理“文件重命名”嗎?

  • December 12, 2021

在使用備份工具duplicity時,我注意到如果我在源上重命名文件,數據將再次通過網路重新發送到目的地,這有點令人難過。由於duplicity使用librsync內部,我決定看看rsync.

這個ArchWiki 頁面指出:

處理重命名

檢測到移動/重命名的文件並且不會儲存或傳輸兩次。它通常意味著計算文件或其塊的校驗和。缺少此功能的應用程序可以通過與僅同步重命名的AUR結合使用來補充。hsync

rsync:處理重命名:否

這是否真的意味著,在使用時rsync,如果我在源電腦上重命名/test/10GBfile為**,就無法防止 10 GB 通過網路重新傳輸到目標?**/test/10GBfile_newname

鑑於 的長期流行rsync,有沒有更好的處理方式?

沒有rsync跟踪重命名的機制,因為它在執行時不保持狀態。如果您在源電腦上重命名/test/10GBfile/test/10GBfile_newname,則預設情況下rsync只能看到10GBfile已刪除和10GBfile_newname已創建的。

--fuzzy參數 ( -y) 可以幫助辨識目標上的10GBfile潛在數據源10GBfile_newname,從而以文件副本為代價避免網路副本。但是,它(大多數情況下)只能考慮同一目錄中的文件匹配,因此儘管您的範例會匹配,但重命名/test/10GBfileto/test/otherdir/10GBfile_newname不會。

另請注意,文件 ( man rsync) 建議如果要使用--delete,則應改為使用--delay-updatesor --delete-after,以便--fuzzy在使用之前不會刪除潛在的匹配項。

例子

# Prepare an uncompressible 100MB file
mkdir -p /tmp/test
dd bs=1M count=100 iflag=fullblock if=/dev/urandom >/tmp/test/file1

# Normal first-time copy
rsync -av --fuzzy --delete-after /tmp/test/ remote:/tmp/test

# Skip copy because unchanged
rsync -av --fuzzy --delete-after /tmp/test/ remote:/tmp/test

# Rename file (per your example)
mv /tmp/test/file1 /tmp/test/file2

# Fast copy because fuzzy match
rsync -av --fuzzy --delete-after /tmp/test/ remote:/tmp/test

添加另外兩個-v標誌(即rsync -avvv …)以查看正在發生的逐塊詳細資訊。

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