块级复制和 Rsync

Eam*_*mon 5 windows backup rsync

我正在尝试使用 grsync (rsync 的 GUI)用于 Windows 来运行备份。在我备份的目录中,有许多较大的文件会定期更新。我希望能够仅同步对这些文件的更改,而不是每次备份的整个文件。我的印象是 rsync 是一个块级文件复制器,只会复制每次同步之间更改的字节。也许事实并非如此,或者我误解了什么是块级文件应对!

为了测试这一点,我使用 grsync 在两个目录之间同步 5GB zip 文件。然后我向 zip 文件添加了一个非常小的文本文件并再次运行 grsync。但它会再次复制整个 zip 文件。是否有一个实用程序只能复制对此 zip 文件的更改,而不是再次复制整个文件?或者 grsync 中是否有一个命令可以用于此效果?

roa*_*ima 9

复制整个文件的原因很简单,在本地文件系统上的两个目录之间复制时,处理块级更改的算法被禁用。

这会起作用,因为文件正在被复制(或更新)到远程系统:

rsync -av  big_file.zip remote_host:
Run Code Online (Sandbox Code Playgroud)

这不会使用“delta”算法,并且将复制整个文件:

rsync -av  big_file.zip D:\target\folder\
Run Code Online (Sandbox Code Playgroud)

一些笔记

  1. 即使目标是网络共享,rsync也会将其视为本地文件系统的路径,并禁用“delta”(块更改)算法。
  2. 将数据添加到数据文件的开头或中间不会扰乱处理块级更改的算法。

基本原理

在两个本地目标之间复制时,增量算法被禁用,因为它需要完全读取源文件和目标文件以确定哪些块需要更改。理由是读取目标文件所花费的时间与写入目标文件所花费的时间大致相同,因此没有必要先读取它。

解决方法

如果您明确知道从目标文件系统读取的速度明显快于写入目标文件系统的速度,则可以通过包含该标志来强制块级算法运行--no-whole-file


小智 2

如果将文件添加到 zip 中,并且该文件是作为存档中的第一个文件添加的,则整个 zip 文件可能会发生更改。整个档案将发生变化。所以你的测试不是有效的测试。