Bas*_*asj 5 storage backup rsync rdiff
在使用备份工具时duplicity
,我注意到如果我重命名源上的文件,数据将通过网络再次重新发送到目的地,这有点令人难过。由于内部duplicity
使用librsync
,我决定看看rsync
.
这个ArchWiki 页面指出:
\n\n\n处理重命名
\n
\n检测到移动/重命名的文件,并且不会存储或传输两次。\xc2\xa0\n它\xc2\xa0通常意味着计算文件或其块的校验和。\xc2\xa0\n可以补充缺少此功能的应用程序通过与AUR组合,它仅同步重命名。hsync
\n\nrsync:处理重命名:否
\n
这是否真的意味着,在使用 时rsync
,如果我在源计算机上重命名为 ,则无法阻止 10 GB 通过网络重新传输到目的地/test/10GBfile
?/test/10GBfile_newname
鉴于 的长期流行rsync
,是否有更好的处理方式?
没有rsync
跟踪重命名的机制,因为它除了运行时之外不维护状态。如果在源计算机上重命名/test/10GBfile
为,则默认情况下只能看到已删除的和已创建的。/test/10GBfile_newname
rsync
10GBfile
10GBfile_newname
参数--fuzzy
( -y
) 可以帮助识别目标上的10GBfile
潜在数据源10GBfile_newname
,从而避免以文件副本为代价的网络副本。但是,它(大多数情况下)只能考虑同一目录中文件的匹配,因此尽管您的示例会匹配,但重命名/test/10GBfile
to/test/otherdir/10GBfile_newname
不会匹配。
另请注意,文档 ( man rsync
) 建议,如果您想使用,--delete
则应使用--delay-updates
或 ,--delete-after
以便--fuzzy
在使用之前不会删除 的潜在匹配项。
例子
\n# Prepare an uncompressible 100MB file\nmkdir -p /tmp/test\ndd bs=1M count=100 iflag=fullblock if=/dev/urandom >/tmp/test/file1\n\n# Normal first-time copy\nrsync -av --fuzzy --delete-after /tmp/test/ remote:/tmp/test\n\n# Skip copy because unchanged\nrsync -av --fuzzy --delete-after /tmp/test/ remote:/tmp/test\n\n# Rename file (per your example)\nmv /tmp/test/file1 /tmp/test/file2\n\n# Fast copy because fuzzy match\nrsync -av --fuzzy --delete-after /tmp/test/ remote:/tmp/test\n
Run Code Online (Sandbox Code Playgroud)\n添加另外两个-v
标志(即rsync -avvv \xe2\x80\xa6
)以查看正在发生的情况的逐块详细信息。
--fuzzy
已经得到了回答,但还有另一个涉及硬链接的有趣黑客。
第一次转账后
$ rsync -avHP --delete-after ~/family/Photos remotebox:backups
Run Code Online (Sandbox Code Playgroud)
您创建一个硬链接工作目录:
$ cd ~/family
$ cp -rlp Photos Photos-work
Run Code Online (Sandbox Code Playgroud)
然后你可以使用
$ rsync -avHP --delete-after --no-inc-recursive ~/family/Photos ~/family/Photos-work remotebox:backups
Run Code Online (Sandbox Code Playgroud)
将新结构传输到远程。
这里解释了为什么以及如何工作:
https://lincolnloop.com/blog/detecting-file-moves-renames-rsync/
归档时间: |
|
查看次数: |
2731 次 |
最近记录: |