我正在尝试使用适用于 Windows 的 grsync(rsync 的 GUI)来运行备份。在我备份的目录中,有许多定期更新的较大文件。我希望能够只同步对这些文件的更改,而不是每个备份的整个文件。我的印象是 rsync 是一个 block 级文件复制器,只会复制在每次同步之间发生变化的字节。或许事实并非如此,或者我误解了什么是 block 级文件复制!
为了对此进行测试,我使用 grsync 在两个目录之间同步一个 5GB 的 zip 文件。然后我在 zip 文件中添加了一个非常小的文本文件并再次运行 grsync。然而,它又开始复制整个 zip 文件。是否有一个实用程序只能将更改复制到此 zip 文件而不是整个文件?或者 grsync 中是否有可用于此效果的命令?
最佳答案
复制整个文件的原因很简单,当在本地文件系统上的两个目录之间复制时,处理 block 级更改的算法被禁用。
这会起作用,因为文件正在被复制(或更新)到远程系统:
rsync -av big_file.zip remote_host:
这将不使用“delta”算法并且将复制整个文件:
rsync -av big_file.zip D:\target\folder\
一些注意事项
- 即使目标是网络共享,
rsync
也会将其视为本地文件系统的路径,并会禁用“delta”( block 更改)算法。 - 将数据添加到数据文件的开头或中间不会扰乱处理 block 级更改的算法。
基本原理
在两个本地目标之间复制时,delta 算法被禁用,因为它需要完全读取源文件和目标文件以确定哪些 block 需要更改。理由是读取目标文件所花费的时间与写入目标文件所花费的时间大致相同,因此没有必要先读取它。
解决方法
如果您确定从您的目标文件系统读取比写入它快显着,您可以通过包含 --no-whole- 来强制 block 级算法运行文件
标志。
关于windows - block 级复制和 Rsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28819379/